diff options
author | Dave Rolsky <autarch@urth.org> | 2011-12-20 15:21:49 -0600 |
---|---|---|
committer | Dave Rolsky <autarch@urth.org> | 2011-12-21 11:55:12 -0600 |
commit | da571fa1485daf7915ed3e9bed094411d43678ad (patch) | |
tree | 5ea76850e38ef49dc73ac77f3134cf8760964018 /Porting | |
parent | 99d49b358be8d3cfec37cd12a0b5f188988cafba (diff) | |
download | perl-da571fa1485daf7915ed3e9bed094411d43678ad.tar.gz |
Add a script to generate a release checklist from the RMG
Diffstat (limited to 'Porting')
-rw-r--r-- | Porting/make-rmg-checklist | 109 | ||||
-rw-r--r-- | Porting/release_managers_guide.pod | 39 |
2 files changed, 139 insertions, 9 deletions
diff --git a/Porting/make-rmg-checklist b/Porting/make-rmg-checklist new file mode 100644 index 0000000000..303bbc5881 --- /dev/null +++ b/Porting/make-rmg-checklist @@ -0,0 +1,109 @@ +#!perl +use strict; +use warnings; +use autodie; + +use Getopt::Long; +use Markdent::Simple::Document; + +sub main { + my ( $help, $type ); + GetOptions( + 'type:s' => \$type, + 'help' => \$help, + ); + + if ($help) { + print <<'EOF'; +make-rmg-checklist [--type TYPE] + +This script creates a release checklist as a simple HTML document. It accepts +the following arguments: + + --type The release type for the checklist. This can be BLEAD-FINAL, + BLEAD-POINT, MAINT, or RC. This defaults to BLEAD-POINT. + +EOF + + exit; + } + + $type = _validate_type($type); + my @heads = _parse_rmg($type); + _print_html(@heads); +} + +sub _validate_type { + my $type = shift || 'BLEAD-POINT'; + + my @valid = qw( BLEAD-FINAL BLEAD-POINT MAINT RC ); + my %valid = map { $_ => 1 } @valid; + + unless ( $valid{ uc $type } ) { + my $err + = "The type you provided ($type) is not a valid release type. It must be one of "; + $err .= join ', ', @valid; + $err .= "\n"; + + die $err; + } + + return $type; +} + +sub _parse_rmg { + my $type = shift; + + open my $fh, '<', 'Porting/release_managers_guide.pod'; + + my @heads; + my $include = 0; + my %skip; + + while (<$fh>) { + if (/^=for checklist begin/) { + $include = 1; + next; + } + + next unless $include; + + last if /^=for checklist end/; + + if (/^=for checklist skip (.+)/) { + %skip = map { $_ => 1 } split / /, $1; + next; + } + + if (/^=head(\d) (.+)/) { + unless ( keys %skip && $skip{$type} ) { + push @heads, [ $1, $2 ]; + } + + %skip = (); + } + } + + return @heads; +} + +sub _print_html { + my @heads = @_; + my $markdown = q{}; + for my $head (@heads) { + my $indent = ( $head->[0] - 2 ) * 4; + + my $text = $head->[1]; + $text =~ s/C<([^>]+)>/`$1`/g; + + $markdown .= q{ } x $indent; + $markdown .= '* ' . $text . "\n"; + } + + print Markdent::Simple::Document->new()->markdown_to_html( + title => 'Perl Release Checklist', + markdown => $markdown, + ); +} + +main(); diff --git a/Porting/release_managers_guide.pod b/Porting/release_managers_guide.pod index 2ee69c9290..a1d035b58b 100644 --- a/Porting/release_managers_guide.pod +++ b/Porting/release_managers_guide.pod @@ -23,7 +23,7 @@ This document both helps as a check-list for the release engineer and is a base for ideas on how the various tasks could be automated or distributed. -The outline of a typical release cycle is as follows: +The checklist of a typical release cycle is as follows: (5.10.1 is released, and post-release actions have been done) @@ -98,15 +98,14 @@ with a whole bunch of extra post-release steps, even more than for MAINT. =back +=for checklist begin =head2 Prerequisites Before you can make an official release of perl, there are a few hoops you need to jump through: -=over 4 - -=item PAUSE account +=head3 PAUSE account Make sure you have a PAUSE account suitable for uploading a perl release. If you don't have a PAUSE account, then request one: @@ -121,19 +120,19 @@ Andreas' email address at: https://pause.perl.org/pause/query?ACTION=pause_04imprint -=item search.cpan.org +=head3 search.cpan.org Make sure that search.cpan.org knows that you're allowed to upload perl distros. Contact Graham Barr to make sure that you're on the right list. -=item CPAN mirror +=head3 CPAN mirror Some release engineering steps require a full mirror of the CPAN. Work to fall back to using a remote mirror via HTTP is incomplete but ongoing. (No, a minicpan mirror is not sufficient) -=item git checkout and commit bit +=head3 git checkout and commit bit You will need a working C<git> installation, checkout of the perl git repository and perl commit bit. For information about working @@ -144,17 +143,18 @@ release. Have a chat with whichever evil perl porter tried to talk you into the idea in the first place to figure out the best way to resolve the issue. +=for checklist skip RC -=item Quotation for release announcement epigraph +=head3 Quotation for release announcement epigraph I<SKIP this step for RC> For all except an RC release of perl, you will need a quotation to use as an epigraph to your release announcement. - =back +=for checklist =head2 Building a release - advance actions @@ -382,6 +382,8 @@ Another good HTML preview option is http://search.cpan.org/pod2html If you make changes, be sure to commit them. +=for checklist skip BLEAD-POINT MAINT RC + =head3 remove stale perldeltas For the first RC release that is ONLY for a BLEAD-FINAL, the perldeltas @@ -472,6 +474,8 @@ Check that file over carefully: $ git diff dist/Module-CoreList/lib/Module/CoreList.pm +=head4 Bump C<$Module::CoreList::VERSION> + If necessary, bump C<$VERSION> (there's no need to do this for every RC; in RC1, bump the version to a new clean number that will appear in the final release, and leave as-is for the later RCs and final). @@ -487,6 +491,10 @@ file. Add a perldelta entry for the new Module::CoreList version. +=for checklist skip RC + +=head4 Update C<%Module::CoreList::release> and C<CAVEATS> + In addition, if this is a final release (rather than a release candidate): =over 4 @@ -507,6 +515,7 @@ cherry-pick it back). $ git commit -m 'Update Module::CoreList for 5.x.y' dist/Module-CoreList/lib/Module/CoreList.pm +=for checklist skip RC =head3 update perlhist.pod @@ -525,6 +534,7 @@ Be sure to commit your changes: $ git commit -m 'add new release to perlhist' pod/perlhist.pod +=for checklist skip BLEAD-POINT =head3 update patchlevel.h @@ -756,6 +766,7 @@ report. Check that it shows up, then remember to close it! =back +=for checklist skip BLEAD-POINT =head3 monitor smokes @@ -817,6 +828,7 @@ time to publish the tag you created earlier to the public git repo (e.g.): $ git push origin tag v5.11.0 +=for checklist skip BLEAD-POINT =head3 disarm patchlevel.h @@ -854,6 +866,8 @@ release announcement yet. If you have a blog, please consider writing an entry in your blog explaining why you chose that particular quote for your epigraph. +=for checklist skip RC + =head3 Module::CoreList nagging I<You MUST SKIP this step for RC> @@ -861,6 +875,7 @@ I<You MUST SKIP this step for RC> Remind the current maintainer of C<Module::CoreList> to push a new release to CPAN. +=for checklist skip RC =head3 new perldelta @@ -904,6 +919,7 @@ At this point you may want to compare the commit with a previous bump to see if they look similar. See commit e3c71926d3 for an example of a previous version bump. +=for checklist skip BLEAD-POINT MAINT RC =head3 bump version @@ -959,6 +975,7 @@ Finally, push any commits done above. $ git push origin .... +=for checklist skip BLEAD-POINT MAINT RC =head3 create maint branch @@ -974,6 +991,8 @@ Assuming you're using git 1.7.x or newer: $ git push origin -u maint-5.12 +=for checklist skip BLEAD-POINT MAINT RC + =head3 make the maint branch available in the APC Clone the new branch into /srv/gitcommon/branches on camel so the APC will @@ -985,6 +1004,7 @@ receive its changes. And nag the sysadmins to make this directory available via rsync. +=for checklist skip BLEAD-POINT RC =head3 copy perldelta.pod to other branches @@ -1087,6 +1107,7 @@ I<This step ONLY for BLEAD-FINAL and MAINT> Ask Leo Lapworth to update L<http://dev.perl.org/perl5/>. +=for checklist end =head1 SOURCE |