release_managers_guide.pod revision 1.9
1=encoding utf8
2
3=head1 NAME
4
5release_managers_guide - Releasing a new version of perl 5.x
6
7Note that things change at each release, so there may be new things not
8covered here, or tools may need updating.
9
10=head1 MAKING A CHECKLIST
11
12If you are preparing to do a release, you can run the
13F<Porting/make-rmg-checklist> script to generate a new version of this
14document that starts with a checklist for your release.
15
16This script is run as:
17
18    perl Porting/make-rmg-checklist \
19        --version [5.x.y-RC#] > /tmp/rmg.pod
20
21You can also pass the C<--html> flag to generate an HTML document instead of
22POD.
23
24    perl Porting/make-rmg-checklist --html \
25        --version [5.x.y-RC#] > /tmp/rmg.html
26
27=head1 SYNOPSIS
28
29This document describes the series of tasks required - some automatic, some
30manual - to produce a perl release of some description, be that a release
31candidate, or final, numbered release of maint or blead.
32
33The release process has traditionally been executed by the current
34pumpking. Blead releases from 5.11.0 forward are made each month on the
3520th by a non-pumpking release engineer.  The release engineer roster
36and schedule can be found in Porting/release_schedule.pod.
37
38This document both helps as a check-list for the release engineer
39and is a base for ideas on how the various tasks could be automated
40or distributed.
41
42The checklist of a typical release cycle is as follows:
43
44    (5.10.1 is released, and post-release actions have been done)
45
46    ...time passes...
47
48    a few weeks before the release, a number of steps are performed,
49        including bumping the version to 5.10.2
50
51    ...a few weeks pass...
52
53    perl-5.10.2-RC1 is released
54
55    perl-5.10.2 is released
56
57    post-release actions are performed, including creating new
58        perldelta.pod
59
60    ... the cycle continues ...
61
62=head1 DETAILS
63
64Some of the tasks described below apply to all four types of
65release of Perl. (blead, RC, final release of maint, final
66release of blead). Some of these tasks apply only to a subset
67of these release types.  If a step does not apply to a given
68type of release, you will see a notation to that effect at
69the beginning of the step.
70
71=head2 Release types
72
73=over 4
74
75=item Release Candidate (RC)
76
77A release candidate is an attempt to produce a tarball that is a close as
78possible to the final release. Indeed, unless critical faults are found
79during the RC testing, the final release will be identical to the RC
80barring a few minor fixups (updating the release date in F<perlhist.pod>,
81removing the RC status from F<patchlevel.h>, etc). If faults are found,
82then the fixes should be put into a new release candidate, never directly
83into a final release.
84
85
86=item Stable/Maint release (MAINT).
87
88A release with an even version number, and subversion number > 0, such as
895.14.1 or 5.14.2.
90
91At this point you should have a working release candidate with few or no
92changes since.
93
94It's essentially the same procedure as for making a release candidate, but
95with a whole bunch of extra post-release steps.
96
97Note that for a maint release there are two versions of this guide to
98consider: the one in the maint branch, and the one in blead. Which one to
99use is a fine judgement. The blead one will be most up-to-date, while
100it might describe some steps or new tools that aren't applicable to older
101maint branches. It is probably best to review both versions of this
102document, but to most closely follow the steps in the maint version.
103
104=item A blead point release (BLEAD-POINT)
105
106A release with an odd version number, such as 5.15.0 or 5.15.1.
107
108This isn't for production, so it has less stability requirements than for
109other release types, and isn't preceded by RC releases. Other than that,
110it is similar to a MAINT release.
111
112=item Blead final release (BLEAD-FINAL)
113
114A release with an even version number, and subversion number == 0, such as
1155.14.0. That is to say, it's the big new release once per year.
116
117It's essentially the same procedure as for making a release candidate, but
118with a whole bunch of extra post-release steps, even more than for MAINT.
119
120=back
121
122=for checklist begin
123
124=head2 Prerequisites
125
126Before you can make an official release of perl, there are a few
127hoops you need to jump through:
128
129=head3 PAUSE account with pumpkin status
130
131Make sure you have a PAUSE account suitable for uploading a perl release.
132If you don't have a PAUSE account, then request one:
133
134    https://pause.perl.org/pause/query?ACTION=request_id
135
136Check that your account is allowed to upload perl distros: go to
137L<https://pause.perl.org/pause/authenquery?ACTION=who_pumpkin> and check that
138your PAUSE ID is listed there.  If not, ask Andreas KE<0xf6>nig to add your ID
139to the list of people allowed to upload something called perl.  You can find
140Andreas' email address at:
141
142    https://pause.perl.org/pause/query?ACTION=pause_04imprint
143
144=head3 GitHub access
145
146You will need a working C<git> installation, checkout of the perl
147git repository and perl commit bit.  For information about working
148with perl and git, see F<pod/perlgit.pod>.
149
150If you are not yet a perl committer, you won't be able to make a
151release.  You will need to have a GitHub account (if you don't have one)
152and contact the pumpking with your username to get membership of the L<<
153Perl-Release-Managers|https://github.com/orgs/Perl/teams/perl-release-managers
154>> team.
155
156=head3 web-based file share
157
158You will need to be able to share tarballs with #p5p members for
159pre-release testing, and you may wish to upload to PAUSE via URL.
160Make sure you have a way of sharing files, such as a web server or
161file-sharing service.
162
163If you use Dropbox, you can append "raw=1" as a parameter to their usual
164sharing link to allow direct download (albeit with redirects).
165
166=head3 Quotation for release announcement epigraph
167
168You will need a quotation to use as an epigraph to your release announcement.
169It will live forever (along with Perl), so make it a good one.
170
171=head3 Install the previous version of perl
172
173During the testing phase of the release you have created, you will be
174asked to compare the installed files with a previous install. Save yourself
175some time on release day, and have a (clean) install of the previous
176version ready.
177
178=head2 Building a release - advance actions
179
180The work of building a release candidate for an even numbered release
181(BLEAD-FINAL) of perl generally starts several weeks before the first
182release candidate.  Some of the following steps should be done regularly,
183but all I<must> be done in the run up to a release.
184
185=head3 dual-life CPAN module synchronisation
186
187To see which core distro versions differ from the current CPAN versions:
188
189    $ ./perl -Ilib Porting/core-cpan-diff -x -a
190
191However, this only checks whether the version recorded in
192F<Porting/Maintainers.pl> differs from the latest on CPAN.  It doesn't tell you
193if the code itself has diverged from CPAN.
194
195You can also run an actual diff of the contents of the modules, comparing core
196to CPAN, to ensure that there were no erroneous/extraneous changes that need to
197be dealt with. You do this by not passing the C<-x> option:
198
199    $ ./perl -Ilib Porting/core-cpan-diff -a -o ~/corediffs
200
201Passing C<-u cpan> will probably be helpful, since it limits the search to
202distributions with 'cpan' upstream source.  (It's OK for blead upstream to
203differ from CPAN because those dual-life releases usually come I<after> perl
204is released.)
205
206See also the C<-d> and C<-v> options for more detail (and the C<-u> option as
207mentioned above).  You'll probably want to use the C<-c cachedir> option to
208avoid repeated CPAN downloads and may want to use C<-m file:///mirror/path> if
209you made a local CPAN mirror. Note that a minicpan mirror won't actually work,
210but can provide a good first pass to quickly get a list of modules which
211definitely haven't changed, to avoid having to download absolutely everything.
212
213For a BLEAD-POINT or BLEAD-FINAL release with 'cpan' upstream, if a CPAN
214release appears to be ahead of blead, then consider updating it (or asking the
215relevant porter to do so). (However, if this is a BLEAD-FINAL release or one of
216the last BLEAD-POINT releases before it and hence blead is in some kind of
217"code freeze" state (e.g. the sequence might be "contentious changes freeze",
218then "user-visible changes freeze" and finally "full code freeze") then any
219CPAN module updates must be subject to the same restrictions, so it may not be
220possible to update all modules until after the BLEAD-FINAL release.) If blead
221contains edits to a 'cpan' upstream module, this is naughty but sometimes
222unavoidable to keep blead tests passing. Make sure the affected file has a
223CUSTOMIZED entry in F<Porting/Maintainers.pl>.
224
225If you are making a MAINT release, run C<core-cpan-diff> on both blead and
226maint, then diff the two outputs. Compare this with what you expect, and if
227necessary, fix things up. For example, you might think that both blead
228and maint are synchronised with a particular CPAN module, but one might
229have some extra changes.
230
231In any case, any cpan-first distribution that is listed as having files
232"Customized for blead" in the output of cpan-core-diff should have requests
233submitted to the maintainer(s) to make a cpan release to catch up with blead.
234
235Additionally, all files listed as "modified" but not "customized for blead"
236should have entries added under the C<CUSTOMIZED> key in
237F<Porting/Maintainers.pl>, as well as checksums updated via:
238
239    cd t; ../perl -I../lib porting/customized.t --regen
240
241=head4 Sync CPAN modules with the corresponding cpanE<sol> distro
242
243In most cases, once a new version of a distribution shipped with core has been
244uploaded to CPAN, the core version thereof can be synchronized automatically
245with the program F<Porting/sync-with-cpan>.  (But see the comments at the
246beginning of that program.  In particular, it has not yet been exercised on
247Windows as much as it has on Unix-like platforms.)
248
249If, however, F<Porting/sync-with-cpan> does not provide good results, follow
250the steps below.
251
252=over 4
253
254=item *
255
256Fetch the most recent version from CPAN.
257
258=item *
259
260Unpack the retrieved tarball. Rename the old directory; rename the new
261directory to the original name.
262
263=item *
264
265Restore any F<.gitignore> file. This can be done by issuing
266C<git checkout .gitignore> in the F<cpan/Distro> directory.
267
268=item *
269
270Remove files we do not need. That is, remove any files that match the
271entries in C<@IGNORABLE> in F<Porting/Maintainers.pl>, and anything that
272matches the C<EXCLUDED> section of the distro's entry in the C<%Modules>
273hash.
274
275=item *
276
277Restore any files mentioned in the C<CUSTOMIZED> section, using
278C<git checkout>. Make any new customizations if necessary. Also,
279restore any files that are mentioned in C<@IGNORE>, but were checked
280into the repository anyway.
281
282=item *
283
284For any new files in the distro, determine whether they are needed.
285If not, delete them, and list them in either C<EXCLUDED> or C<@IGNORABLE>.
286Otherwise, add them to C<MANIFEST>, and run C<git add> to add the files
287to the repository.
288
289=item *
290
291For any files that are gone, remove them from C<MANIFEST>, and use
292C<git rm> to tell git the files will be gone.
293
294=item *
295
296If the C<MANIFEST> file was changed in any of the previous steps, run
297C<perl Porting/manisort --output MANIFEST.sort; mv MANIFEST.sort MANIFEST>.
298
299=item *
300
301For any files that have an execute bit set, either remove the execute
302bit, or edit F<Porting/exec-bit.txt>
303
304=item *
305
306Run C<make> (or C<nmake> on Windows), see if C<perl> compiles.
307
308=item *
309
310Run the tests for the package.
311
312=item *
313
314Run the tests in F<t/porting> (C<make test_porting>).
315
316=item *
317
318Update the C<DISTRIBUTION> entry in F<Porting/Maintainers.pl>.
319
320=item *
321
322Run a full configure/build/test cycle.
323
324=item *
325
326If everything is ok, commit the changes.
327
328=back
329
330For entries with a non-simple C<FILES> section, or with a C<MAP>, you
331may have to take more steps than listed above.
332
333=head3 Ensure dual-life CPAN module stability
334
335This comes down to:
336
337   for each module that fails its regression tests on $current
338       did it fail identically on $previous?
339       if yes, "SEP" (Somebody Else's Problem, but try to make sure a
340         bug ticket is filed)
341       else work out why it failed (a bisect is useful for this)
342
343   attempt to group failure causes
344
345   for each failure cause
346       is that a regression?
347       if yes, figure out how to fix it
348           (more code? revert the code that broke it)
349       else
350           (presumably) it's relying on something un-or-under-documented
351           should the existing behaviour stay?
352               yes - goto "regression"
353               no - note it in perldelta as a significant bugfix
354               (also, try to inform the module's author)
355
356=head3 monitor smoke tests for failures
357
358Similarly, monitor the smoking of core tests, and try to fix.  See
359L<https://tux.nl/perl5/smoke/index.html>, L<https://perl5.test-smoke.org/>
360and L<http://perl.develop-help.com> for a summary. See also
361L<https://www.nntp.perl.org/group/perl.daily-build.reports/> which has
362the raw reports.
363
364Similarly, monitor the smoking of perl for compiler warnings, and try to
365fix.
366
367Additionally both L<Travis CI|https://travis-ci.org/Perl/perl5> and
368L<GitHub Actions|https://github.com/Perl/perl5/actions> smokers run
369automatically.
370
371=for checklist skip BLEAD-POINT
372
373=head3 monitor CPAN testers for failures
374
375For any release except a BLEAD-POINT: Examine the relevant analysis report(s)
376at L<http://analysis.cpantesters.org/beforemaintrelease> to see how the
377impending release is performing compared to previous releases with
378regard to building and testing CPAN modules.
379
380That page accepts a query parameter, C<pair> that takes a pair of
381colon-delimited versions to use for comparison.  For example:
382
383L<http://analysis.cpantesters.org/beforemaintrelease?pair=5.20.2:5.22.0%20RC1>
384
385=head3 update perldelta
386
387Get perldelta in a mostly finished state.
388
389Read F<Porting/how_to_write_a_perldelta.pod>, and try to make sure that
390every section it lists is, if necessary, populated and complete. Copy
391edit the whole document.
392
393You won't be able to automatically fill in the "Updated Modules" section until
394after Module::CoreList is updated (as described below in
395L<"update Module::CoreList">).
396
397=head3 Bump the version number
398
399Do not do this yet for a BLEAD-POINT release! You will do this at the end of
400the release process (after building the final tarball, tagging etc).
401
402Increase the version number (e.g. from 5.12.0 to 5.12.1).
403
404For a release candidate for a stable perl, this should happen a week or two
405before the first release candidate to allow sufficient time for testing and
406smoking with the target version built into the perl executable. For
407subsequent release candidates and the final release, it is not necessary to
408bump the version further.
409
410There is a tool to semi-automate this process:
411
412    $ ./perl -Ilib Porting/bump-perl-version -i 5.10.0 5.10.1
413
414Remember that this tool is largely just grepping for '5.10.0' or whatever,
415so it will generate false positives. Be careful not change text like
416"this was fixed in 5.10.0"!
417
418Use git status and git diff to select changes you want to keep.
419
420Be particularly careful with F<INSTALL>, which contains a mixture of
421C<5.10.0>-type strings, some of which need bumping on every release, and
422some of which need to be left unchanged.
423See below in L<"update INSTALL"> for more details.
424
425For the first RC release leading up to a BLEAD-FINAL release, update the
426description of which releases are now "officially" supported in
427F<pod/perlpolicy.pod>.
428
429When doing a BLEAD-POINT or BLEAD-FINAL release, also make sure the
430C<PERL_API_*> constants in F<patchlevel.h> are in sync with the version
431you're releasing, unless you're absolutely sure the release you're about to
432make is 100% binary compatible to an earlier release. Note: for BLEAD-POINT
433releases the bump should have already occurred at the end of the previous
434release and this is something you would have to do at the very end.
435When releasing a MAINT perl version, the C<PERL_API_*> constants C<MUST NOT>
436be changed as we aim to guarantee binary compatibility in maint branches.
437
438After editing, regenerate uconfig.h (this must be run on a system with a
439/bin/sh available):
440
441 $ perl regen/uconfig_h.pl
442
443This might not cause any new changes.
444
445You may also need to regen opcodes:
446
447 $ ./perl -Ilib regen/opcode.pl
448
449Test your changes:
450
451 $ git clean -xdf   # careful if you don't have local files to keep!
452 $ ./Configure -des -Dusedevel
453 $ make
454 $ make test
455
456Do note that at this stage, porting tests will fail. They will continue
457to fail until you've updated Module::CoreList, as described below.
458
459Commit your changes:
460
461 $ git status
462 $ git diff
463 B<review the delta carefully>
464
465 $ git commit -a -m 'Bump the perl version in various places for 5.x.y'
466
467At this point you may want to compare the commit with a previous bump to
468see if they look similar.  See commit f7cf42bb69 for an example of a
469previous version bump.
470
471When the version number is bumped, you should also update Module::CoreList
472(as described below in L<"update Module::CoreList">) to reflect the new
473version number.
474
475=head3 update INSTALL
476
477Review and update INSTALL to account for the change in version number.
478INSTALL for a BLEAD-POINT release should already contain the expected version.
479The lines in F<INSTALL> about "is not binary compatible with" may require a
480correct choice of earlier version to declare incompatibility with. These are
481in the "Changes and Incompatibilities" and "Coexistence with earlier versions
482of perl 5" sections.
483
484Be particularly careful with the section "Upgrading from 5.X.Y or earlier".
485The "X.Y" needs to be changed to the most recent version that we are
486I<not> binary compatible with.
487
488For MAINT and BLEAD-FINAL releases, this needs to refer to the last
489release in the previous development cycle (so for example, for a 5.14.x
490release, this would be 5.13.11).
491
492For BLEAD-POINT releases, it needs to refer to the previous BLEAD-POINT
493release (so for 5.15.3 this would be 5.15.2).  If the last release manager
494followed instructions, this should have already been done after the last
495blead release, so you may find nothing to do here.
496
497=head3 update AUTHORS
498
499The AUTHORS file can be updated by running C<Porting/checkAUTHORS.pl --update>
500The script detects missing authors or committers since the last release using
501a known tag provided by the C<--from=v5.X.Y> argument, and will add missing
502entries to the AUTHORS file.
503
504    $ perl Porting/checkAUTHORS.pl --update --from=v5.X.Y
505
506For MAINT and BLEAD-FINAL releases, C<v5.X.Y> needs to refer to the last
507release in the previous development cycle (so for example, for a 5.14.x
508release, this would be 5.13.11).
509
510For BLEAD-POINT releases, it needs to refer to the previous BLEAD-POINT
511release (so for 5.15.3 this would be 5.15.2).
512
513Note: It should not be harmful to use a wider range.
514
515Note: If you have uncommitted changes this could cause some warnings,
516and you might like to use the addtional argument C<--to=upstream/blead>
517to use the last known git commit by GitHub.
518
519Review the changes to the AUTHORS file, be sure you are not adding duplicate
520entries or removing any entries, then commit your changes.
521
522    $ git commit -a AUTHORS -m 'Update AUTHORS list for 5.x.y'
523
524=head3 Check copyright years
525
526Check that the copyright years are up to date by running:
527
528    $ pushd t; ../perl -I../lib porting/copyright.t --now
529
530Remedy any test failures by editing README or perl.c accordingly (search for
531the "Copyright"). If updating perl.c, check if the file's own copyright date in
532the C comment at the top needs updating, as well as the one printed by C<-v>.
533
534=head3 Check more build configurations
535
536Try running the full test suite against multiple Perl configurations. Here are
537some sets of Configure flags you can try:
538
539=over 4
540
541=item *
542
543C<-Duseshrplib -Dusesitecustomize>
544
545=item *
546
547C<-Duserelocatableinc>
548
549=item *
550
551C<-Dusethreads>
552
553=back
554
555If you have multiple compilers on your machine, you might also consider
556compiling with C<-Dcc=$other_compiler>.
557
558You can also consider pushing the repo to GitHub where Travis CI is enabled
559which would smoke different flavors of Perl for you.
560
561=head3 update perlport
562
563L<perlport> has a section currently named I<Supported Platforms> that
564indicates which platforms are known to build in the current release.
565If necessary update the list and the indicated version number.
566
567=head3 check a readonly build
568
569Even before other prep work, follow the steps in L</build the tarball> and test
570it locally.  Because a perl source tarballs sets many files read-only, it could
571test differently than tests run from the repository.  After you're sure
572permissions aren't a problem, delete the generated directory and tarballs.
573
574
575=head2 Building a release - on the day
576
577This section describes the actions required to make a release
578that are performed near to, or on the actual release day.
579
580=head3 re-check earlier actions
581
582Review all the actions in the previous section,
583L<"Building a release - advance actions"> to ensure they are all done and
584up-to-date.
585
586=head3 create a release branch
587
588For BLEAD-POINT releases, making a release from a release branch avoids the
589need to freeze blead during the release. This is less important for
590BLEAD-FINAL, MAINT, and RC releases, since blead will already be frozen in
591those cases. Create the branch by running
592
593    git checkout -b release-5.xx.yy
594
595=head3 build a clean perl
596
597Make sure you have a gitwise-clean perl directory (no modified files,
598unpushed commits etc):
599
600    $ git status
601    $ git clean -dxf
602
603then configure and build perl so that you have a Makefile and porting tools:
604
605    $ ./Configure -Dusedevel -des && make
606
607=head3 Check module versions
608
609For each Perl release since the previous release of the current branch, check
610for modules that have identical version numbers but different contents by
611running:
612
613    $ ./perl -Ilib Porting/cmpVERSION.pl --tag=v5.X.YY
614
615(This is done automatically by F<t/porting/cmp_version.t> for the previous
616release of the current branch, but not for any releases from other branches.)
617
618Any modules that fail will need a version bump, plus a nudge to the upstream
619maintainer for 'cpan' upstream modules.
620
621=head3 update Module::CoreList
622
623=head4 Bump Module::CoreList* $VERSIONs
624
625If necessary, bump C<$VERSION> (there's no need to do this
626for every RC; in RC1, bump the version to a new clean number that will
627appear in the final release, and leave as-is for the later RCs and final).
628It may also happen that C<Module::CoreList> has been modified in blead, and
629hence has a new version number already.  (But make sure it is not the same
630number as a CPAN release.)
631
632C<$Module::CoreList::Utils::VERSION> should always be equal to
633C<$Module::CoreList::VERSION>. If necessary, bump those two versions to match
634before proceeding.
635
636Once again, the files to modify are:
637
638=over 4
639
640=item *
641
642F<dist/Module-CoreList/lib/Module/CoreList.pm>
643
644=item *
645
646F<dist/Module-CoreList/lib/Module/CoreList/Utils.pm>
647
648=back
649
650=head4 Update C<Module::CoreList> with module version data for the new release.
651
652Note that if this is a MAINT release, you should run the following actions
653from the maint branch, but commit the C<CoreList.pm> changes in
654I<blead> and subsequently cherry-pick any releases since the last
655maint release and then your recent commit.  XXX need a better example
656
657[ Note that the procedure for handling Module::CoreList in maint branches
658is a bit complex, and the RMG currently don't describe a full and
659workable approach. The main issue is keeping Module::CoreList
660and its version number synchronised across all maint branches, blead and
661CPAN, while having to bump its version number for every RC release.
662See this brief p5p thread:
663
664    Message-ID: <20130311174402.GZ2294@iabyn.com>
665
666If you can devise a workable system, feel free to try it out, and to
667update the RMG accordingly!
668
669DAPM May 2013 ]
670
671F<corelist.pl> uses ftp.funet.fi to verify information about dual-lived
672modules on CPAN. It can use a full, local CPAN mirror and/or fall back
673on HTTP::Tiny to fetch package metadata remotely.
674
675(If you'd prefer to have a full CPAN mirror, see
676L<https://www.cpan.org/misc/cpan-faq.html#How_mirror_CPAN>)
677
678Change to your perl checkout, and if necessary,
679
680    $ make
681
682Then, If you have a local CPAN mirror, run:
683
684    $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror
685
686Otherwise, run:
687
688    $ ./perl -Ilib Porting/corelist.pl cpan
689
690This will chug for a while, possibly reporting various warnings about
691badly-indexed CPAN modules unrelated to the modules actually in core.
692Assuming all goes well, it will update
693F<dist/Module-CoreList/lib/Module/CoreList.pm> and possibly
694F<dist/Module-CoreList/lib/Module/CoreList/Utils.pm>.
695
696Check those files over carefully:
697
698    $ git diff dist/Module-CoreList/lib/Module/CoreList.pm
699    $ git diff dist/Module-CoreList/lib/Module/CoreList/Utils.pm
700
701=head4 Bump version in Module::CoreList F<Changes>
702
703Also edit Module::CoreList's new version number in its F<Changes> file.
704This file is F<dist/Module-CoreList/Changes>.
705(BLEAD-POINT releases should have had this done already as a post-release
706action from the last commit.)
707
708=head4 Add Module::CoreList version bump to perldelta
709
710Add a perldelta entry for the new Module::CoreList version. You only
711need to do this if you want to add notes about the changes included
712with this version of Module::CoreList. Otherwise, its version bump
713will be automatically filled in below in L</finalize perldelta>.
714
715=for checklist skip RC
716
717=head4 Update C<%Module::CoreList::released>
718
719For any release except an RC: Update this version's entry in the C<%released>
720hash with today's date.
721
722=head4 Commit Module::CoreList changes
723
724Finally, commit the new version of Module::CoreList:
725(unless this is for MAINT; in which case commit it to blead first, then
726cherry-pick it back).
727
728    $ git commit -m 'Update Module::CoreList for 5.x.y' \
729        dist/Module-CoreList/Changes \
730        dist/Module-CoreList/lib/Module/CoreList.pm \
731        dist/Module-CoreList/lib/Module/CoreList/Utils.pm
732
733=head4 Rebuild and test
734
735Build and test to get the changes into the currently built lib directory and to
736ensure all tests are passing.
737
738=head3 finalize perldelta
739
740Finalize the perldelta.  In particular, fill in the Acknowledgements
741section, which can be generated with something like:
742
743    $ perl Porting/acknowledgements.pl v5.15.0..HEAD
744
745Fill in the "New/Updated Modules" sections now that Module::CoreList is
746updated:
747
748    $ ./perl -Ilib Porting/corelist-perldelta.pl \
749        --mode=update pod/perldelta.pod
750
751For a MAINT release use something like this instead:
752
753    $ ./perl -Ilib Porting/corelist-perldelta.pl 5.020001 5.020002 \
754        --mode=update pod/perldelta.pod
755
756Ideally, also fill in a summary of the major changes to each module for which
757an entry has been added by F<corelist-perldelta.pl>.
758
759Re-read the perldelta to try to find any embarrassing typos and thinkos;
760remove any C<TODO> or C<XXX> flags; update the "Known Problems" section
761with any serious issues for which fixes are not going to happen now; and
762run through pod and spell checkers, e.g.
763
764    $ podchecker -warnings -warnings pod/perldelta.pod
765    $ spell pod/perldelta.pod
766    $ aspell list < pod/perldelta.pod | sort -u
767
768Also, you may want to generate and view an HTML version of it to check
769formatting, e.g.
770
771    $ ./perl -Ilib ext/Pod-Html/bin/pod2html pod/perldelta.pod > \
772        ~/perldelta.html
773
774You should add pod links for GitHub issue references thusly:
775
776    $ perl -p -i -e'BEGIN{undef $/}; s{(GH\s+#)(\d+)}{L<$1$2|https://github.com/Perl/perl5/issues/$2>}mg' pod/perldelta.pod
777
778If you make changes, be sure to commit them.
779
780=for checklist skip BLEAD-POINT MAINT RC
781
782=head3 remove stale perldeltas
783
784For the first RC release that is ONLY for a BLEAD-FINAL, the perldeltas
785from the BLEAD-POINT releases since the previous BLEAD-FINAL should have
786now been consolidated into the current perldelta, and hence are now just
787useless clutter.  They can be removed using:
788
789    $ git rm <file1> <file2> ...
790
791For example, for RC0 of 5.16.0:
792
793    $ cd pod
794    $ git rm perldelta515*.pod
795
796=for checklist skip BLEAD-FINAL BLEAD-POINT
797
798=head3 add recent perldeltas
799
800For the first RC for a MAINT release, copy in any recent perldeltas from
801blead that have been added since the last release on this branch. This
802should include any recent maint releases on branches older than your one,
803but not newer. For example if you're producing a 5.14.x release, copy any
804perldeltas from recent 5.10.x, 5.12.x etc maint releases, but not from
8055.16.x or higher. Remember to
806
807    $ git add <file1> <file2> ...
808
809=head3 update and commit perldelta files
810
811If you have added or removed any perldelta files via the previous two
812steps, then edit F<pod/perl.pod> to add/remove them from its table of
813contents, then run F<Porting/pod_rules.pl> to propagate your changes there
814into all the other files that mention them (including F<MANIFEST>). You'll
815need to C<git add> the files that it changes.
816
817Then build a clean perl and do a full test
818
819    $ git status
820    $ git clean -dxf
821    $ ./Configure -Dusedevel -des
822    $ make
823    $ make test
824
825Once all tests pass, commit your changes.
826
827=head3 final check of perldelta placeholders
828
829Check for any 'XXX' leftover section in the perldelta.
830Either fill them or remove these sections appropriately.
831
832    $ git grep XX pod/perldelta.pod
833
834=head3 build a clean perl
835
836If you skipped the previous step (adding/removing perldeltas),
837again, make sure you have a gitwise-clean perl directory (no modified files,
838unpushed commits etc):
839
840    $ git status
841    $ git clean -dxf
842
843then configure and build perl so that you have a Makefile and porting tools:
844
845    $ ./Configure -Dusedevel -des && make
846
847=for checklist skip BLEAD-FINAL BLEAD-POINT
848
849=head3 synchronise from blead's perlhist.pod
850
851For the first RC for a MAINT release, copy in the latest
852F<pod/perlhist.pod> from blead; this will include details of newer
853releases in all branches. In theory, blead's version should be a strict
854superset of the one in this branch, but it's probably safest to examine the
855changes first, to ensure that there's nothing in this branch that was
856forgotten from blead. An easy way to do that is with C<< git checkout -p >>,
857to selectively apply any changes from the blead version to your current
858branch:
859
860    $ git fetch origin
861    $ git checkout -p origin/blead pod/perlhist.pod
862    $ git commit -m 'sync perlhist from blead' pod/perlhist.pod
863
864=head3 update perlhist.pod
865
866Add an entry to F<pod/perlhist.pod> with the release date, e.g.:
867
868    David    5.10.1       2009-Aug-06
869
870List yourself in the left-hand column, and if this is the first release
871that you've ever done, make sure that your name is listed in the section
872entitled C<THE KEEPERS OF THE PUMPKIN>.
873
874I<If you're making a BLEAD-FINAL release>, also update the "SELECTED
875RELEASE SIZES" section with the output of
876F<Porting/perlhist_calculate.pl>.
877
878Be sure to commit your changes:
879
880    $ git commit -m 'add new release to perlhist' pod/perlhist.pod
881
882=for checklist skip BLEAD-POINT
883
884=head3 update patchlevel.h
885
886I<You MUST SKIP this step for a BLEAD-POINT release>
887
888Update F<patchlevel.h> to add a C<-RC1>-or-whatever string; or, if this is
889a final release, remove it. For example:
890
891     static const char * const local_patches[] = {
892             NULL
893    +        ,"RC1"
894     #ifdef PERL_GIT_UNCOMMITTED_CHANGES
895             ,"uncommitted-changes"
896     #endif
897
898Be sure to commit your change:
899
900    $ git commit -m 'bump version to RCnnn' patchlevel.h
901
902=head3 run makemeta to update META files
903
904    $ ./perl -Ilib Porting/makemeta
905
906Be sure to commit any changes (if applicable):
907
908    $ git status   # any changes?
909    $ git commit -m 'Update META files' META.*
910
911=head3 build, test and check a fresh perl
912
913Build perl, then make sure it passes its own test suite, and installs:
914
915    $ git clean -xdf
916    $ ./Configure -des -Dprefix=/tmp/perl-5.x.y-pretest
917
918    # or if it's an odd-numbered version:
919    $ ./Configure -des -Dusedevel -Dprefix=/tmp/perl-5.x.y-pretest
920
921    $ make test install
922
923Check that the output of C</tmp/perl-5.x.y-pretest/bin/perl -v> and
924C</tmp/perl-5.x.y-pretest/bin/perl -V> are as expected,
925especially as regards version numbers, patch and/or RC levels, and @INC
926paths. Note that as they have been built from a git working
927directory, they will still identify themselves using git tags and
928commits. (Note that for an odd-numbered version, perl will install
929itself as C<perl5.x.y>). C<perl -v> will identify itself as:
930
931 This is perl 5, version X, subversion Y (v5.X.Y (v5.X.Z-NNN-gdeadbeef))
932
933where 5.X.Z is the latest tag, NNN the number of commits since this tag,
934and C<< deadbeef >> commit of that tag.
935
936Then delete the temporary installation.
937
938=head3 create the release tag
939
940Create the tag identifying this release (e.g.):
941
942    $ git tag v5.11.0 -m 'First release of the v5.11 series!'
943
944It is B<VERY> important that from this point forward, you not push
945your git changes to the Perl master repository.  If anything goes
946wrong before you publish your newly-created tag, you can delete
947and recreate it.  Once you push your tag, we're stuck with it
948and you'll need to use a new version number for your release.
949
950=head3 build the tarball
951
952Before you run the following, you might want to install 7-Zip (the
953C<p7zip-full> package under Debian or the C<p7zip> port on MacPorts) or
954the AdvanceCOMP suite (e.g. the C<advancecomp> package under Debian,
955or the C<advancecomp> port on macports - 7-Zip on Windows is the
956same code as AdvanceCOMP, so Windows users get the smallest files
957first time). These compress about 5% smaller than gzip and bzip2.
958Over the lifetime of your distribution this will save a lot of
959people a small amount of download time and disk space, which adds
960up.
961
962In order to produce the C<xz> tarball, XZ Utils are required. The C<xz>
963utility is included with most modern UNIX-type operating systems and
964is available for Cygwin. A Windows port is available from
965L<https://tukaani.org/xz/>.
966
967B<IMPORTANT>: if you are on OS X, you must export C<COPYFILE_DISABLE=1>
968to prevent OS X resource files from being included in your tarball. After
969creating the tarball following the instructions below, inspect it to ensure
970you don't have files like F<._foobar>.
971
972Create a tarball. Use the C<-s> option to specify a suitable suffix for
973the tarball and directory name:
974
975 $ cd root/of/perl/tree
976 $ make distclean           # make sure distclean works
977 $ git clean -xdf           # make sure perl and git agree on files
978                            # git clean should not output anything!
979 $ git status --ignored     # and there's nothing lying around
980
981 $ perl Porting/makerel -x -s RC1           # for a release candidate
982 $ perl Porting/makerel -x                  # for the release itself
983
984This creates the directory F<../perl-x.y.z-RC1> or similar, copies all
985the MANIFEST files into it, sets the correct permissions on them, then
986tars it up as F<../perl-x.y.z-RC1.tar.gz>.  The C<-x> also produces a
987C<tar.xz> file.
988
989If you're getting your tarball suffixed with -uncommitted and you're sure
990your changes were all committed, you can override the suffix with:
991
992    $ perl Porting/makerel -x -s ''
993
994XXX if we go for extra tags and branches stuff, then add the extra details
995here
996
997Finally, clean up the temporary directory, e.g.
998
999    $ rm -rf ../perl-x.y.z-RC1
1000
1001=head3 test the tarball
1002
1003Once you have a tarball it's time to test the tarball (not the repository).
1004
1005=head4 Copy the tarball to a web server
1006
1007Copy the tarballs (.gz and .xz) to a web server somewhere you have access to.
1008
1009=head4 Download the tarball to another machine and unpack it
1010
1011Download the tarball to some other machine. For a release candidate,
1012you really want to test your tarball on two or more different platforms
1013and architectures.
1014
1015=head4 Ask #p5p to test the tarball on different platforms
1016
1017Once you've verified the tarball can be downloaded and unpacked,
1018ask the #p5p IRC channel on irc.perl.org for volunteers to test the
1019tarballs on whatever platforms they can.
1020
1021If you're not confident in the tarball, you can defer this step until after
1022your own tarball testing, below.
1023
1024=head4 Check that F<Configure> works
1025
1026Check that basic configuration and tests work on each test machine:
1027
1028    $ ./Configure -des && make all minitest test
1029
1030    # Or for a development release:
1031    $ ./Configure -Dusedevel -des && make all minitest test
1032
1033=head4 Run the test harness and install
1034
1035Check that the test harness and install work on each test machine:
1036
1037    $ make distclean
1038    $ ./Configure -des -Dprefix=/install/path && \
1039          make all test_harness install
1040    $ cd /install/path
1041
1042(Remember C<-Dusedevel> above, for a development release.)
1043
1044=head4 Check C<perl -v> and C<perl -V>
1045
1046Check that the output of C<perl -v> and C<perl -V> are as expected,
1047especially as regards version numbers, patch and/or RC levels, and @INC
1048paths.
1049
1050Note that the results may be different without a F<.git/> directory,
1051which is why you should test from the tarball.
1052
1053=head4 Run the Installation Verification Procedure utility
1054
1055    $ ./perl -Ilib ./utils/perlivp
1056    # Or, perhaps:
1057    $ ./perl5.x.y ./utils/perlivp5.x.y
1058    ...
1059    All tests successful.
1060    $
1061
1062=head4 Compare the installed paths to the last release
1063
1064Compare the pathnames of all installed files with those of the previous
1065release (i.e. against the last installed tarball on this branch which you
1066have previously verified using this same procedure). In particular, look
1067for files in the wrong place, or files no longer included which should be.
1068For example, suppose the about-to-be-released version is 5.10.1 and the
1069previous is 5.10.0:
1070
1071    cd installdir-5.10.0/
1072    find . -type f | perl -pe's/5\.10\.0/5.10.1/g' | sort > /tmp/f1
1073    cd installdir-5.10.1/
1074    find . -type f | sort > /tmp/f2
1075    diff -u /tmp/f[12]
1076
1077=head4 Disable C<local::lib> if it's turned on
1078
1079If you're using C<local::lib>, you should reset your environment before
1080performing these actions:
1081
1082    $ unset PERL5LIB PERL_MB_OPT PERL_LOCAL_LIB_ROOT PERL_MM_OPT
1083
1084=head4 Bootstrap the CPAN client
1085
1086Bootstrap the CPAN client on the clean install:
1087
1088    $ bin/cpan
1089
1090    # Or, perhaps:
1091    $ bin/cpan5.xx.x
1092
1093=head4 Install the Inline module with CPAN and test it
1094
1095Try installing a popular CPAN module that's reasonably complex and that
1096has dependencies; for example:
1097
1098    CPAN> install Inline::C
1099    CPAN> quit
1100
1101Check that your perl can run this:
1102
1103    $ bin/perl -Ilib -lwe "use Inline C => q[int f() { return 42;}]; print f"
1104    42
1105    $
1106
1107=head4 Make sure that perlbug works
1108
1109Test L<perlbug> with the following:
1110
1111    $ bin/perlbug
1112    ...
1113    Subject: test bug report
1114    Local perl administrator [yourself]:
1115    Editor [vi]:
1116    Module:
1117    Category [core]:
1118    Severity [low]:
1119    (edit report)
1120    Action (Send/Display/Edit/Subject/Save to File): f
1121    Name of file to save message in [perlbug.rep]:
1122    Action (Send/Display/Edit/Subject/Save to File): Q
1123
1124and carefully examine the output (in F<perlbug.rep]>), especially
1125the "Locally applied patches" section.
1126
1127=for checklist skip BLEAD-POINT
1128
1129=head3 monitor smokes
1130
1131XXX This is probably irrelevant if working on a release branch, though
1132MAINT or RC might want to push a smoke branch and wait.
1133
1134Wait for the smoke tests to catch up with the commit which this release is
1135based on (or at least the last commit of any consequence).
1136
1137Then check that the smoke tests pass (particularly on Win32). If not, go
1138back and fix things.
1139
1140Note that for I<BLEAD-POINT> releases this may not be practical. It takes a
1141long time for the smokers to catch up, especially the Win32
1142smokers. This is why we have a RC cycle for I<MAINT> and I<BLEAD-FINAL>
1143releases, but for I<BLEAD-POINT> releases sometimes the best you can do is
1144to plead with people on IRC to test stuff on their platforms, fire away,
1145and then hope for the best.
1146
1147=head3 upload to PAUSE
1148
1149Once smoking is okay, upload it to PAUSE. This is the point of no return.
1150If anything goes wrong after this point, you will need to re-prepare
1151a new release with a new minor version or RC number.
1152
1153    https://pause.perl.org/
1154
1155(Log in, then select 'Upload a file to CPAN')
1156
1157If your workstation is not connected to a high-bandwidth,
1158high-reliability connection to the Internet, you should probably use the
1159"GET URL" feature (rather than "HTTP UPLOAD") to have PAUSE retrieve the
1160new release from wherever you put it for testers to find it.  This will
1161eliminate anxious gnashing of teeth while you wait to see if your
116215 megabyte HTTP upload successfully completes across your slow, twitchy
1163cable modem.
1164
1165I<Remember>: if your upload is partially successful, you
1166may need to contact a PAUSE administrator or even bump the version of perl.
1167
1168Upload the .gz and .xz versions of the tarball.
1169
1170Note: You can also use the command-line utility to upload your tarballs, if
1171you have it configured:
1172
1173    cpan-upload perl-5.X.Y.tar.gz
1174    cpan-upload perl-5.X.Y.tar.xz
1175
1176Do not proceed any further until you are sure that your tarballs are on CPAN.
1177Check your authors directory metacpan.org to confirm that your uploads have
1178been successful.
1179
1180    https://metacpan.org/author/YOUR_PAUSE_ID
1181
1182=for checklist skip RC BLEAD-POINT
1183
1184=head3 wait for indexing
1185
1186I<You MUST SKIP this step for RC and BLEAD-POINT>
1187
1188Wait until you receive notification emails from the PAUSE indexer
1189confirming that your uploads have been received.  IMPORTANT -- you will
1190probably get an email that indexing has failed, due to module permissions.
1191This is considered normal.
1192
1193=for checklist skip BLEAD-POINT
1194
1195=head3 disarm patchlevel.h
1196
1197I<You MUST SKIP this step for BLEAD-POINT release>
1198
1199Disarm the F<patchlevel.h> change; for example,
1200
1201     static const char * const local_patches[] = {
1202             NULL
1203    -        ,"RC1"
1204     #ifdef PERL_GIT_UNCOMMITTED_CHANGES
1205             ,"uncommitted-changes"
1206     #endif
1207
1208Be sure to commit your change:
1209
1210    $ git commit -m 'disarm RCnnn bump' patchlevel.h
1211
1212=head3 announce to p5p
1213
1214Mail perl5-porters@perl.org to announce your new release, with a quote you prepared earlier.
1215Get the SHA1 digests from the PAUSE email responses.
1216
1217Use the template at Porting/release_announcement_template.txt
1218
1219Send a carbon copy to C<noc@metacpan.org>
1220
1221=head3 merge release branch back to blead
1222
1223Merge the (local) release branch back into master now, and delete it.
1224
1225    git checkout blead
1226    git pull
1227    git merge release-5.xx.yy
1228    git push
1229    git branch -d release-5.xx.yy
1230
1231Note: The merge will create a merge commit if other changes have been pushed
1232to blead while you've been working on your release branch. Do NOT rebase your
1233branch to avoid the merge commit (as you might normally do when merging a
1234small branch into blead) since doing so will invalidate the tag that you
1235created earlier.
1236
1237=head3 publish the release tag
1238
1239Now that you've shipped the new perl release to PAUSE and pushed your changes
1240to the Perl master repository, it's time to publish the tag you created
1241earlier too (e.g.):
1242
1243    $ git push origin tag v5.11.0
1244
1245=head3 update epigraphs.pod
1246
1247Add your quote to F<Porting/epigraphs.pod> and commit it.
1248You can include the customary link to the release announcement even before your
1249message reaches the web-visible archives by looking for the X-List-Archive
1250header in your message after receiving it back via perl5-porters.
1251
1252=head3 blog about your epigraph
1253
1254If you have a blog, please consider writing an entry in your blog explaining
1255why you chose that particular quote for your epigraph.
1256
1257=head3 update the link to the latest perl on perlweb
1258
1259Submit a pull request to L<https://github.com/perlorg/perlweb> to update the
1260link in F<docs/dev/perl5/index.html> to point to your release.
1261
1262=for checklist skip RC
1263
1264=head3 Release schedule
1265
1266I<You MUST SKIP this step for RC>
1267
1268Tick the entry for your release in F<Porting/release_schedule.pod>.
1269
1270=for checklist skip RC
1271
1272=head3 Module::CoreList nagging
1273
1274I<You MUST SKIP this step for RC>
1275
1276Remind the current maintainer of C<Module::CoreList> to push a new release
1277to CPAN.
1278
1279=for checklist skip RC
1280
1281=head3 new perldelta
1282
1283I<You MUST SKIP this step for RC>
1284
1285Create a new perldelta.
1286
1287=over 4
1288
1289=item *
1290
1291Confirm that you have a clean checkout with no local changes.
1292
1293=item *
1294
1295Run:
1296    perl Porting/new-perldelta.pl
1297
1298=item *
1299
1300Run the C<git add> commands it outputs to add new and modified files.
1301
1302=item *
1303
1304Verify that the build still works, by running C<./Configure> and
1305C<make test_porting>. (On Win32 use the appropriate make utility).
1306
1307=item *
1308
1309If F<t/porting/podcheck.t> spots errors in the new F<pod/perldelta.pod>,
1310run C<./perl -MTestInit t/porting/podcheck.t | less> for more detail.
1311Skip to the end of its test output to see the options it offers you.
1312
1313=item *
1314
1315When C<make test_porting> passes, commit the new perldelta.
1316
1317    git commit -m'new perldelta for 5.X.Y'
1318
1319=back
1320
1321At this point you may want to compare the commit with a previous bump to
1322see if they look similar.  See commit ba03bc34a4 for an example of a
1323previous version bump.
1324
1325=for checklist skip MAINT RC
1326
1327=head3 bump version
1328
1329I<You MUST SKIP this step for RC and MAINT>
1330
1331If this was a BLEAD-FINAL release (i.e. the first release of a new maint
1332series, 5.x.0 where x is even), then bump the version in the blead branch
1333in git, e.g. 5.12.0 to 5.13.0.
1334
1335First, add a new feature bundle to F<regen/feature.pl>, initially by just
1336copying the exiting entry, and bump the file's $VERSION (after the __END__
1337marker); e.g.
1338
1339         "5.14" => [qw(switch say state unicode_strings)],
1340    +    "5.15" => [qw(switch say state unicode_strings)],
1341
1342Run F<regen/feature.pl> to propagate the changes to F<lib/feature.pm>.
1343
1344Then follow the section L<"Bump the version number"> to bump the version
1345in the remaining files and test and commit.
1346
1347If this was a BLEAD-POINT release, then just follow the section
1348L<"Bump the version number">.
1349
1350After bumping the version, follow the section L<"update INSTALL"> to
1351ensure all version number references are correct.
1352
1353(Note: The version is NOT bumped immediately after a MAINT release in order
1354to avoid confusion and wasted time arising from bug reports relating to
1355"intermediate versions" such as 5.20.1-and-a-bit: If the report is caused
1356by a bug that gets fixed in 5.20.2 and this intermediate version already
1357calls itself 5.20.2 then much time can be wasted in figuring out why there
1358is a failure from something that "should have been fixed". If the bump is
1359late then there is a much smaller window of time for such confusing bug
1360reports to arise. (The opposite problem -- trying to figure out why there
1361*is* a bug in something calling itself 5.20.1 when in fact the bug was
1362introduced later -- shouldn't arise for MAINT releases since they should,
1363in theory, only contain bug fixes but never regressions.))
1364
1365=head3 clean build and test
1366
1367Run a clean build and test to make sure nothing obvious is broken. This is
1368very important, as commands run after this point must be run using the perl
1369executable built with the bumped version number.
1370
1371 $ git clean -xdf
1372 $ ./Configure -des -Dusedevel
1373 $ make
1374 $ make test
1375
1376In particular, F<Porting/perldelta_template.pod> is intentionally exempted
1377from podchecker tests, to avoid false positives about placeholder text.
1378However, once it's copied to F<pod/perldelta.pod> the contents can now
1379cause test failures. Problems should be resolved by doing one of the
1380following:
1381
1382=over
1383
1384=item 1
1385
1386Replace placeholder text with correct text.
1387
1388=item 2
1389
1390If the problem is from a broken placeholder link, you can add it to the
1391array C<@perldelta_ignore_links> in F<t/porting/podcheck.t>.  Lines
1392containing such links should be marked with C<XXX> so that they get
1393cleaned up before the next release.
1394
1395=item 3
1396
1397Following the instructions output by F<t/porting/podcheck.t> on how to
1398update its exceptions database.
1399
1400=back
1401
1402=head3 push commits
1403
1404Finally, push any commits done above.
1405
1406    $ git push origin ....
1407
1408=for checklist skip BLEAD-POINT MAINT RC
1409
1410=head3 create maint branch
1411
1412I<You MUST SKIP this step for RC, BLEAD-POINT, MAINT>
1413
1414If this was a BLEAD-FINAL release (i.e. the first release of a new maint
1415series, 5.x.0 where x is even), then create a new maint branch based on
1416the commit tagged as the current release.
1417
1418Assuming you're using git 1.7.x or newer:
1419
1420    $ git checkout -b maint-5.12 v5.12.0
1421    $ git push origin -u maint-5.12
1422
1423
1424=for checklist skip BLEAD-POINT MAINT RC
1425
1426=head3 make the maint branch available in the APC
1427
1428Clone the new branch into /srv/gitcommon/branches on camel so the APC will
1429receive its changes.
1430
1431    $ git clone --branch maint-5.14 /gitroot/perl.git \
1432    ?  /srv/gitcommon/branches/perl-5.14.x
1433    $ chmod -R g=u /srv/gitcommon/branches/perl-5.14.x
1434
1435And nag the sysadmins to make this directory available via rsync.
1436
1437XXX Who are the sysadmins?  Contact info?
1438
1439=for checklist skip BLEAD-POINT RC
1440
1441=head3 copy perldelta.pod to blead
1442
1443I<You MUST SKIP this step for RC, BLEAD-POINT>
1444
1445Copy the perldelta.pod for this release into blead; for example:
1446
1447 $ cd ..../blead
1448 $ cp -i ../5.10.x/pod/perldelta.pod pod/perl5101delta.pod  #for example
1449 $ git add pod/perl5101delta.pod
1450
1451Don't forget to set the NAME correctly in the new file (e.g. perl5101delta
1452rather than perldelta).
1453
1454Edit F<pod/perl.pod> to add an entry for the file, e.g.:
1455
1456    perl5101delta		Perl changes in version 5.10.1
1457
1458Then rebuild various files:
1459
1460    $ perl Porting/pod_rules.pl
1461
1462Finally, commit and push:
1463
1464    $ git commit -a -m 'add perlXXXdelta'
1465    $ git push origin ....
1466
1467=for checklist skip BLEAD-POINT
1468
1469=head3 copy perlhist.pod entries to blead
1470
1471Make sure any recent F<pod/perlhist.pod> entries are copied to
1472F<perlhist.pod> on blead.  e.g.
1473
1474    5.8.9         2008-Dec-14
1475
1476=head3 Relax!
1477
1478I<You MUST RETIRE to your preferred PUB, CAFE or SEASIDE VILLA for some
1479much-needed rest and relaxation>.
1480
1481Thanks for releasing perl!
1482
1483=head2 Building a release - the day after
1484
1485=for checklist skip BLEAD-FINAL MAINT RC
1486
1487=head3 update Module::CoreList
1488
1489I<After a BLEAD-POINT release only>
1490
1491After Module::CoreList has shipped to CPAN by the maintainer, update
1492Module::CoreList in the source so that it reflects the new blead
1493version number:
1494
1495=over 4
1496
1497=item *
1498
1499Update F<Porting/Maintainers.pl> to list the new DISTRIBUTION on CPAN,
1500which should be identical to what is currently in blead.
1501
1502=item *
1503
1504Bump the $VERSION in F<dist/Module-CoreList/lib/Module/CoreList.pm>
1505and F<dist/Module-CoreList/lib/Module/CoreList/Utils.pm>.
1506
1507=item *
1508
1509If you have a local CPAN mirror, run:
1510
1511    $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror
1512
1513Otherwise, run:
1514
1515    $ ./perl -Ilib Porting/corelist.pl cpan
1516
1517This will update F<dist/Module-CoreList/lib/Module/CoreList.pm> and
1518F<dist/Module-CoreList/lib/Module/CoreList/Utils.pm> as it did before,
1519but this time adding new sections for the next BLEAD-POINT release.
1520
1521=item *
1522
1523Add the new $Module::CoreList::VERSION to
1524F<dist/Module-CoreList/Changes>.
1525
1526=item *
1527
1528Remake perl to get your changed .pm files propagated into F<lib/> and
1529then run at least the F<dist/Module-CoreList/t/*.t> tests and the
1530test_porting makefile target to check that they're ok.
1531
1532=item *
1533
1534Run
1535
1536 $ ./perl -Ilib -MModule::CoreList \
1537    -le 'print Module::CoreList->find_version($]) ? "ok" : "not ok"'
1538
1539and check that it outputs "ok" to prove that Module::CoreList now knows
1540about blead's current version.
1541
1542=item *
1543
1544Commit and push your changes.
1545
1546=back
1547
1548=head3 check tarball availability
1549
1550Check various website entries to make sure the that tarball has appeared
1551and is properly indexed:
1552
1553=over 4
1554
1555=item *
1556
1557Check your author directory under L<https://www.cpan.org/authors/id/>
1558to ensure that the tarballs are available on the website.
1559
1560=item *
1561
1562Check F</src> on CPAN (on a fast mirror) to ensure that links to
1563the new tarballs have appeared: There should be links in F</src/5.0>
1564(which is accumulating all new versions), and (for BLEAD-FINAL and
1565MAINT only) an appropriate mention in F</src/README.html> (which describes
1566the latest versions in each stable branch, with links).
1567
1568The F</src/5.0> links should appear automatically, some hours after upload.
1569If they don't, or the F</src> description is inadequate,
1570ask Ask <ask@perl.org>.
1571
1572=item *
1573
1574Check L<https://www.cpan.org/src/> to ensure that the F</src> updates
1575have been correctly mirrored to the website.
1576If they haven't, ask Ask <ask@perl.org>.
1577
1578=item *
1579
1580Check L<https://metacpan.org> to see if it has indexed the distribution.
1581It should be visible at a URL like C<https://metacpan.org/release/DAPM/perl-5.10.1>.
1582
1583=back
1584
1585=head3 update release manager's guide
1586
1587Go over your notes from the release (you did take some, right?) and update
1588F<Porting/release_managers_guide.pod> with any fixes or information that
1589will make life easier for the next release manager.
1590
1591=for checklist end
1592
1593=head1 SOURCE
1594
1595Based on
1596L<http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2009-05/msg00608.html>,
1597plus a whole bunch of other sources, including private correspondence.
1598
1599=cut
1600
1601