This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade Data::Dumper to 2.128
[perl5.git] / Porting / release_managers_guide.pod
index b5dbf5e..add7a5a 100644 (file)
@@ -45,7 +45,7 @@ The outline of a typical release cycle is as follows:
     perl-5.10.2 is released
 
     post-release actions are performed, including creating new
-       perl5103delta.pod
+       perldelta.pod
 
     ... the cycle continues ...
 
@@ -175,7 +175,8 @@ run the following:
 to see any inconsistencies between the core and CPAN versions of distros,
 then fix the core, or cajole CPAN authors as appropriate. See also the
 C<-d> and C<-v> options for more detail.  You'll probably want to use the
-C<-c cachedir> option to avoid repeated CPAN downloads.
+C<-c cachedir> option to avoid repeated CPAN downloads and may want to
+use C<-m file:///mirror/path> if you made a local CPAN mirror.
 
 To see which core distro versions differ from the current CPAN versions:
 
@@ -216,6 +217,7 @@ Ensure dual-life CPAN modules are stable, which comes down to:
 I<You MAY SKIP this step for SNAPSHOT>
 
 Similarly, monitor the smoking of core tests, and try to fix.
+See L<http://doc.procura.nl/smoke/index.html> for a summary.
 
 =item *
 
@@ -240,6 +242,10 @@ changed since the previous release, but which still have the old version
 number. If there is more than one maintenance branch (e.g. 5.8.x, 5.10.x),
 then compare against both.
 
+Be sure to bump the version numbers in separate commits for each module
+(or group of related modules) so that changes can be cherry-picked later
+if necessary.
+
 Note that some of the files listed may be generated (e.g. copied from ext/
 to lib/, or a script like lib/lib_pm.PL is run to produce lib/lib.pm);
 make sure you edit the correct file!
@@ -265,11 +271,14 @@ edit the whole document.
 
 I<You MUST SKIP this step for SNAPSHOT>
 
-A week or two before the first release candidate, bump the perl version
-number (e.g. from 5.10.0 to 5.10.1), to allow sufficient time for testing
-and smoking with the target version built into the perl executable. For
-subsequent release candidates and the final release, it it not necessary
-to bump the version further.
+Bump the version number (e.g. from 5.12.0 to 5.12.1).
+
+For a blead release, this can happen on the day of the release.  For a
+release candidate for a stable perl, this should happen a week or two
+before the first release candidate to allow sufficient time for testing and
+smoking with the target version built into the perl executable. For
+subsequent release candidates and the final release, it it not necessary to
+bump the version further.
 
 There is a tool to semi-automate this process. It works in two stages.
 First, it generates a list of suggested changes, which you review and
@@ -305,6 +314,13 @@ this line in README.vms needs special handling:
 
     rename perl-5^.10^.1.dir perl-5_10_1.dir
 
+When doing a blead release, also make sure the C<PERL_API_*> constants in
+F<patchlevel.h> are in sync with the with the version you're releasing, unless
+you're absolutely sure the release you're about to make is 100% binary
+compatible to an earlier release. When releasing a stable perl version, the
+C<PERL_API_*> constants C<MUST NOT> be changed as we aim to guarantee binary
+compatibility in maint branches.
+
 Commit your changes:
 
     $ git st
@@ -324,6 +340,11 @@ I<You MUST SKIP this step for SNAPSHOT>
 Review and update INSTALL to account for the change in version number;
 in particular, the "Coexistence with earlier versions of perl 5" section.
 
+Be particularly careful with the section "Upgrading from 5.X.Y or earlier". For
+stable releases, this needs to refer to the last release in the previous
+development cycle. For blead releases, it needs to refer to the previous blead
+release.
+
 =item *
 
 I<You MUST SKIP this step for SNAPSHOT>
@@ -367,16 +388,6 @@ L<perlport> has a section currently named I<Supported Platforms> that
 indicates which platforms are known to build in the current release.
 If necessary update the list and the indicated version number.
 
-=item *
-
-I<You MAY SKIP this step for SNAPSHOT>
-
-Update F<AUTHORS>, using the C<Porting/checkAUTHORS.pl> script, and if
-necessary, update the script to include new alias mappings for porters
-already in F<AUTHORS>
-
-    $ git log --pretty=fuller | perl Porting/checkAUTHORS.pl --acknowledged AUTHORS -
-
 =back
 
 =head2 Building a release - on the day
@@ -394,26 +405,43 @@ up-to-date.
 
 =item *
 
+For a blead release, if you did not bump the perl version number as part
+of I<advance actions>, do that now.
+
+=item *
+
 I<You MAY SKIP this step for SNAPSHOT>
 
+Finalize the perldelta.  In particular, fill in the Acknowledgements
+section.  You can generate a list of contributors with checkAUTHORS.pl.
+For example:
+
+  $ git log --pretty=fuller v5.13.2..HEAD | \
+    perl Porting/checkAUTHORS.pl --who -
+
 Re-read the perldelta to try to find any embarrassing typos and thinkos;
 remove any C<TODO> or C<XXX> flags; update the "Known Problems" section
 with any serious issues for which fixes are not going to happen now; and
 run through pod and spell checkers, e.g.
 
-    $ podchecker -warnings -warnings pod/perl5101delta.pod
-    $ spell pod/perl5101delta.pod
+    $ podchecker -warnings -warnings pod/perldelta.pod
+    $ spell pod/perldelta.pod
 
 Also, you may want to generate and view an HTML version of it to check
 formatting, e.g.
 
-    $ perl pod/pod2html pod/perl5101delta.pod > /tmp/perl5101delta.html
+    $ perl pod/pod2html pod/perldelta.pod > /tmp/perldelta.html
+
+Another good HTML preview option is http://search.cpan.org/pod2html
+
+If you make changes, be sure to commit them.
 
 =item *
 
 Make sure you have a gitwise-clean perl directory (no modified files,
 unpushed commits etc):
 
+    $ git clean -dxf
     $ git status
 
 =item *
@@ -429,7 +457,7 @@ Check that files managed by F<regen.pl> and friends are up to date. From
 within your working directory:
 
     $ git status
-    $ make regen
+    $ make regen_all
     $ make regen_perly
     $ git status
 
@@ -438,31 +466,18 @@ re-make perl to check that it's okay, then commit the updated versions:
 
     $ git commit -a -m 'make regen; make regen_perly'
 
-=item *
-
-Rebuild META.yml:
-
-    $ rm META.yml
-    $ make META.yml
-    $ git diff
-
-XXX it would be nice to make Porting/makemeta use regen_lib.pl
-to get the same 'update the file if its changed' functionality
-we get with 'make regen' etc.
-
-Commit META.yml if it has changed:
-
-    $ git commit -m 'Update META.yml' META.yml
+(XXX regen might be a problem depending on the bison version available.
+We need to get a wizard to give better instructions on what to do or not do.)
 
 =item *
 
 I<You MUST SKIP this step for SNAPSHOT>
 
-Update C<Module::Corelist> with module version data for the new release.
+Update C<Module::CoreList> with module version data for the new release.
 
 Note that if this is a maint release, you should run the following actions
-from the maint directory, but commit the C<Corelist.pm> changes in
-I<blead> and subsequently cherry-pick it.
+from the maint branch, but commit the C<CoreList.pm> changes in
+I<blead> and subsequently cherry-pick it.  XXX need a better example
 
 F<corelist.pl> uses ftp.funet.fi to verify information about dual-lived
 modules on CPAN. It can use a full, local CPAN mirror or fall back
@@ -475,7 +490,7 @@ http://www.cpan.org/misc/cpan-faq.html#How_mirror_CPAN)
 
 Then change to your perl checkout, and if necessary,
 
-    $ make perl
+    $ make
 
 If this not the first update for this version (e.g. if it was updated
 when the version number was originally bumped), first edit
@@ -568,7 +583,7 @@ Be sure to commit your changes:
 
 =item *
 
-I<You MUST SKIP this step for SNAPSHOT>
+I<You MUST SKIP this step for SNAPSHOT or BLEAD release>
 
 Update F<patchlevel.h> to add a C<-RC1>-or-whatever string; or, if this is
 a final release, remove it. For example:
@@ -607,11 +622,6 @@ Then delete the temporary installation.
 
 =item *
 
-If this is maint release, make sure F<Porting/mergelog> is saved and
-committed.
-
-=item *
-
 Push all your recent commits:
 
     $ git push origin ....
@@ -831,9 +841,14 @@ may need to contact a PAUSE administrator or even bump the version of perl.
 Upload both the .gz and .bz2 versions of the tarball.
 
 Wait until you receive notification emails from the PAUSE indexer
-confirming that your uploads have been successfully indexed.  Do not
-proceed any further until you are sure that the indexing of your uploads
-has been successful.
+confirming that your uploads have been received.  IMPORTANT -- you will
+probably get an email that indexing has failed (due to dual-life modules,
+apparently).  This is considered normal.
+
+Do not proceed any further until you are sure that your tarballs are on
+CPAN.  Check your authors directory on one of the "fast" CPAN mirrors
+(e.g.  cpan.shadowcatprojects.net, cpan.dagolden.com, cpan.hexten.net
+or cpan.cpantesters.org) to confirm that your uploads have been successful.
 
 =item *
 
@@ -896,38 +911,41 @@ to CPAN.
 
 I<You MUST SKIP this step for RC>
 
-Bump the perlXYZdelta version number.
+Create a new perldelta.
 
-First, create a new empty perlNNNdelta.pod file for the current release + 1;
-see F<Porting/how_to_write_a_perldelta.pod>.
+First, move the existing F<pod/perldelta.pod> to F<pod/perlNNNdelta.pod> (where
+NNN is the perl version number without the dots. i.e. 5134 for 5.13.4).
 
-You should be able to do this by just copying in a skeleton template and
-then doing a quick fix up of the version numbers, e.g.
+Now edit the moved delta file to change the C<NAME> from C<perldelta> to
+C<perlNNNdelta>.
 
-Then commit this file.  (If this new perldelta needs to get cherrypicked
-anywhere, this provides a clean base to merge from.)
+Then create a new empty perldelta.pod file for the new release; see
+F<Porting/how_to_write_a_perldelta.pod>.
 
-For example, assuming 5.10.2:
+You should be able to do this by just copying in a skeleton template and
+then doing a quick fix up of the version numbers, e.g.
 
-    $ cp -i Porting/perldelta_template.pod pod/perl5102delta.pod
-    $ (edit it)
-    $ git add pod/perl5102delta.pod
-    $ git commit -m 'create perl5102delta'
+Then commit the move and the new file.
 
-Edit the previous delta file to change the C<NAME> from C<perldelta>
-to C<perlNNNdelta> and commit it.  For example:
+For example, assuming you just released 5.10.1:
 
+    $ git mv pod/perldelta.pod pod/perl5101delta.pod
+    $ (edit pod/perl5101delta.pod to retitle)
     $ git add pod/perl5101delta.pod
-    $ git commit -m 'retitle perl5101delta'
+
+    $ cp -i Porting/perldelta_template.pod pod/perldelta.pod
+    $ (edit pod/perldelta.pod)
+    $ git add pod/perldelta.pod
+    $ git commit -m 'create perldelta for 5.10.2'
 
 Now you need to update various tables of contents, most of which can be
 generated automatically.
 
-Edit F<pod.lst>: add the new entry, flagged as 'D', and unflag the previous
-entry from being 'D'; for example:
+Edit F<pod.lst>: add the new entry, flagged as 'd', and unflag the previous
+entry from being 'd'; for example:
 
-    -D perl5101delta                Perl changes in version 5.10.1
-    +D perl5102delta                Perl changes in version 5.10.2
+    -d perl5101delta                Perl changes in version 5.10.1
+    +d perl5102delta                Perl changes in version 5.10.2
     +  perl5101delta                Perl changes in version 5.10.1
 
 Run C<perl pod/buildtoc --build-all> to update the F<perldelta> version in
@@ -945,33 +963,20 @@ the following files:
 Then manually edit (F<vms/descrip_mms.template> to bump the version
 in the following entry:
 
-    [.pod]perldelta.pod : [.pod]perl5101delta.pod
+    [.pod]perl5101delta.pod : [.pod]perldelta.pod
 
 XXX this previous step needs to fixed to automate it in pod/buildtoc.
 
-Manually update references to the perlNNNdelta version in these files:
-
-    INSTALL
-    README
-
-These two lists of files probably aren't exhaustive; do a recursive grep
-on the previous filename to look for suitable candidates that may have
-been missed.
-
 Finally, commit:
 
-    $ git commit -a -m 'update TOC and perldelta references'
+    $ git commit -a -m 'update TOC for perlNNNdelta'
 
 At this point you may want  to compare the commit with a previous bump to
 see if they look similar. See commit ca8de22071 for an example of a
 previous version bump.
 
-=item *
-
-I<You MUST SKIP this step for RC, BLEAD>
-
-If this was a maint release, then edit F<Porting/mergelog> to change
-all the C<d> (deferred) flags to C<.> (needs review).
+XXX the commit uses the old perldelta naming scheme and we need to reference
+another one once this has been done with the scheme.
 
 =item *
 
@@ -994,10 +999,10 @@ Assuming you're using git 1.7.x or newer:
 
 I<You MUST SKIP this step for RC, BLEAD>
 
-Copy the perlNNNdelta.pod for this release into the other branches; for
+Copy the perldelta.pod for this release into the other branches; for
 example:
 
-    $ cp -i ../5.10.x/pod/perl5101delta.pod pod/    # for example
+    $ cp -i ../5.10.x/pod/perldelta.pod pod/perl5101delta.pod    # for example
     $ git add pod/perl5101delta.pod
 
 Edit F<pod.lst> to add an entry for the file, e.g.: