release_managers_guide.pod revision 1.2
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        --type [BLEAD-POINT or MAINT or ...] > /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        --type [BLEAD-POINT or MAINT or ...] > /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 search.cpan.org pumpkin status
145
146Make sure that search.cpan.org knows that you're allowed to upload
147perl distros. Contact Graham Barr to make sure that you're on the right
148list.
149
150=head3 rt.perl.org update access
151
152Make sure you have permission to close tickets on L<http://rt.perl.org/>
153so you can respond to bug report as necessary during your stint.  If you
154don't, make an account (if you don't have one) and contact the pumpking
155with your username to get ticket-closing permission.
156
157=head3 git checkout and commit bit
158
159You will need a working C<git> installation, checkout of the perl
160git repository and perl commit bit.  For information about working
161with perl and git, see F<pod/perlgit.pod>.
162
163If you are not yet a perl committer, you won't be able to make a
164release.  Have a chat with whichever evil perl porter tried to talk
165you into the idea in the first place to figure out the best way to
166resolve the issue.
167
168=head3 git clone of https://github.com/perlorg/perlweb
169
170For updating the L<http://dev.perl.org> web pages, either a Github account or
171sweet-talking somebody with a Github account into obedience is needed. This
172is only needed on the day of the release or shortly afterwards.
173
174=head3 Quotation for release announcement epigraph
175
176You will need a quotation to use as an epigraph to your release announcement.
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 /tmp/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
231=head3 How to sync a CPAN module with a cpan/ distro
232
233=over 4
234
235=item *
236
237Fetch the most recent version from CPAN.
238
239=item *
240
241Unpack the retrieved tarball. Rename the old directory; rename the new
242directory to the original name.
243
244=item *
245
246Restore any F<.gitignore> file. This can be done by issuing
247C<git checkout .gitignore> in the F<cpan/Distro> directory.
248
249=item *
250
251Remove files we do not need. That is, remove any files that match the
252entries in C<@IGNORABLE> in F<Porting/Maintainer.pl>, and anything that
253matches the C<EXCLUDED> section of the distro's entry in the C<%Modules>
254hash.
255
256=item *
257
258Restore any files mentioned in the C<CUSTOMIZED> section, using
259C<git checkout>. Make any new customizations if necessary. Also,
260restore any files that are mentioned in C<@IGNORE>, but were checked
261into the repository anyway.
262
263=item *
264
265For any new files in the distro, determine whether they are needed.
266If not, delete them, and list them in either C<EXCLUDED> or C<@INGORE>.
267Otherwise, add them to C<MANIFEST>, and run C<git add> to add the files
268to the repository.
269
270=item *
271
272For any files that are gone, remove them from C<MANIFEST>, and use
273C<git rm> to tell git the files will be gone.
274
275=item *
276
277If the C<MANIFEST> file was changed in any of the previous steps, run
278C<perl Porting/manisort --output MANIFEST.sort; mv MANIFEST.sort MANIFEST>.
279
280=item *
281
282For any files that have an execute bit set, either remove the execute
283bit, or edit F<Porting/exec-bit.txt>
284
285=item *
286
287Run C<make> (or C<nmake> on Windows), see if C<perl> compiles.
288
289=item *
290
291Run the tests for the package.
292
293=item *
294
295Run the tests in F<t/porting>.
296
297=item *
298
299Update the C<DISTRIBUTION> entry in F<Porting/Maintainers.pl>.
300
301=item *
302
303Run a full configure/build/test cycle.
304
305=item *
306
307If everything is ok, commit the changes.
308
309=back
310
311For entries with a non-simple C<FILES> section, or with a C<MAP>, you
312may have to take more steps than listed above.
313
314F<Porting/sync-with-cpan> is a script that automates most of the steps
315above; but see the comments at the beginning of the file.  In particular,
316it has not yet been exercised on Windows, but will certainly require a set
317of Unix tools such as Cygwin, and steps that run C<make> will need to run
318C<nmake> instead.
319
320=head3 dual-life CPAN module stability
321
322Ensure dual-life CPAN modules are stable, which comes down to:
323
324   for each module that fails its regression tests on $current
325       did it fail identically on $previous?
326       if yes, "SEP" (Somebody Else's Problem)
327       else work out why it failed (a bisect is useful for this)
328
329   attempt to group failure causes
330
331   for each failure cause
332       is that a regression?
333       if yes, figure out how to fix it
334           (more code? revert the code that broke it)
335       else
336           (presumably) it's relying on something un-or-under-documented
337           should the existing behaviour stay?
338               yes - goto "regression"
339               no - note it in perldelta as a significant bugfix
340               (also, try to inform the module's author)
341
342=head3 monitor smoke tests for failures
343
344Similarly, monitor the smoking of core tests, and try to fix.  See
345L<http://doc.procura.nl/smoke/index.html> and L<http://perl5.test-smoke.org/>
346for a summary. See also
347L<http://www.nntp.perl.org/group/perl.daily-build.reports/> which has
348the raw reports.
349
350Similarly, monitor the smoking of perl for compiler warnings, and try to
351fix.
352
353=for checklist skip BLEAD-POINT
354
355=head3 monitor CPAN testers for failures
356
357For any release except a BLEAD-POINT: Examine the relevant analysis report(s)
358at http://analysis.cpantesters.org/beforemaintrelease to see how the impending
359release is performing compared to previous releases with regard to building
360and testing CPAN modules.
361
362=head3 update perldelta
363
364Get perldelta in a mostly finished state.
365
366Read  F<Porting/how_to_write_a_perldelta.pod>, and try to make sure that
367every section it lists is, if necessary, populated and complete. Copy
368edit the whole document.
369
370You won't be able to automatically fill in the "Updated Modules" section until
371after Module::CoreList is updated (as described below in
372L<"update Module::CoreList">).
373
374=head3 Bump the version number
375
376Do not do this yet for a BLEAD-POINT release! You will do this at the end of
377the release process.
378
379Increase the version number (e.g. from 5.12.0 to 5.12.1).
380
381For a release candidate for a stable perl, this should happen a week or two
382before the first release candidate to allow sufficient time for testing and
383smoking with the target version built into the perl executable. For
384subsequent release candidates and the final release, it is not necessary to
385bump the version further.
386
387There is a tool to semi-automate this process:
388
389    $ ./perl -Ilib Porting/bump-perl-version -i 5.10.0 5.10.1
390
391Remember that this tool is largely just grepping for '5.10.0' or whatever,
392so it will generate false positives. Be careful not change text like
393"this was fixed in 5.10.0"!
394
395Use git status and git diff to select changes you want to keep.
396
397Be particularly careful with F<INSTALL>, which contains a mixture of
398C<5.10.0>-type strings, some of which need bumping on every release, and
399some of which need to be left unchanged.
400See below in L<"update INSTALL"> for more details.
401
402For the first RC release leading up to a BLEAD-FINAL release, update the
403description of which releases are now "officially" supported in
404F<pod/perlpolicy.pod>.
405
406When doing a BLEAD-POINT or BLEAD-FINAL release, also make sure the
407C<PERL_API_*> constants in F<patchlevel.h> are in sync with the version
408you're releasing, unless you're absolutely sure the release you're about to
409make is 100% binary compatible to an earlier release. When releasing a MAINT
410perl version, the C<PERL_API_*> constants C<MUST NOT> be changed as we aim
411to guarantee binary compatibility in maint branches.
412
413After editing, regenerate uconfig.h (this must be run on a system with a
414/bin/sh available):
415
416    $ perl regen/uconfig_h.pl
417
418This might not cause any new changes.
419
420You may have to add stub entries in C<%Module::CoreList::version>,
421C<%Module::CoreList::deprecated> and C<%Module::CoreList::Utils::delta>.
422If so, you must up their version numbers as well.
423
424Test your changes:
425
426    $ git clean -xdf   # careful if you don't have local files to keep!
427    $ ./Configure -des -Dusedevel
428    $ make
429    $ make test
430
431Commit your changes:
432
433    $ git status
434    $ git diff
435    B<review the delta carefully>
436
437    $ git commit -a -m 'Bump the perl version in various places for 5.x.y'
438
439At this point you may want to compare the commit with a previous bump to
440see if they look similar.  See commit f7cf42bb69 for an example of a
441previous version bump.
442
443When the version number is bumped, you should also update Module::CoreList
444(as described below in L<"update Module::CoreList">) to reflect the new
445version number.
446
447=head3 update INSTALL
448
449Review and update INSTALL to account for the change in version number.
450The lines in F<INSTALL> about "is not binary compatible with" may require a
451correct choice of earlier version to declare incompatibility with. These are
452in the "Changes and Incompatibilities" and "Coexistence with earlier versions
453of perl 5" sections.
454
455Be particularly careful with the section "Upgrading from 5.X.Y or earlier".
456The "X.Y" needs to be changed to the most recent version that we are
457I<not> binary compatible with.
458
459For MAINT and BLEAD-FINAL releases, this needs to refer to the last
460release in the previous development cycle (so for example, for a 5.14.x
461release, this would be 5.13.11).
462
463For BLEAD-POINT releases, it needs to refer to the previous BLEAD-POINT
464release (so for 5.15.3 this would be 5.15.2).
465
466=head3 Check copyright years
467
468Check that the copyright years are up to date by running:
469
470    $ ./perl t/porting/copyright.t --now
471
472Remedy any test failures by editing README or perl.c accordingly (search for
473the "Copyright"). If updating perl.c, check if the file's own copyright date in
474the C comment at the top needs updating, as well as the one printed by C<-v>.
475
476=head3 Check more build configurations
477
478Try running the full test suite against multiple Perl configurations. Here are
479some sets of Configure flags you can try:
480
481=over 4
482
483=item *
484
485C<-Duseshrplib -Dusesitecustomize>
486
487=item *
488
489C<-Duserelocatableinc>
490
491=item *
492
493C<-Dusethreads>
494
495=back
496
497If you have multiple compilers on your machine, you might also consider
498compiling with C<-Dcc=$other_compiler>.
499
500=head3 update perlport
501
502L<perlport> has a section currently named I<Supported Platforms> that
503indicates which platforms are known to build in the current release.
504If necessary update the list and the indicated version number.
505
506=head3 check a readonly build
507
508Even before other prep work, follow the steps in  L<build the tarball> and test
509it locally.  Because a perl source tarballs sets many files read-only, it could
510test differently than tests run from the repository.  After you're sure
511permissions aren't a problem, delete the generated directory and tarballs.
512
513=head2 Building a release - on the day
514
515This section describes the actions required to make a release
516that are performed near to, or on the actual release day.
517
518=head3 re-check earlier actions
519
520Review all the actions in the previous section,
521L<"Building a release - advance actions"> to ensure they are all done and
522up-to-date.
523
524=head3 create a release branch
525
526For BLEAD-POINT releases, making a release from a release branch avoids the
527need to freeze blead during the release. This is less important for
528BLEAD-FINAL, MAINT, and RC releases, since blead will already be frozen in
529those cases. Create the branch by running
530
531    git checkout -b release-5.xx.yy
532
533=head3 build a clean perl
534
535Make sure you have a gitwise-clean perl directory (no modified files,
536unpushed commits etc):
537
538    $ git status
539    $ git clean -dxf
540
541then configure and build perl so that you have a Makefile and porting tools:
542
543    $ ./Configure -Dusedevel -des && make
544
545=head3 Check module versions
546
547For each Perl release since the previous release of the current branch, check
548for modules that have identical version numbers but different contents by
549running:
550
551    $ ./perl -Ilib Porting/cmpVERSION.pl --tag=v5.X.YY
552
553(This is done automatically by F<t/porting/cmp_version.t> for the previous
554release of the current branch, but not for any releases from other branches.)
555
556Any modules that fail will need a version bump, plus a nudge to the upstream
557maintainer for 'cpan' upstream modules.
558
559=head3 update Module::CoreList
560
561=head4 Bump Module::CoreList* $VERSIONs
562
563If necessary, bump C<$Module::CoreList::VERSION> (there's no need to do this
564for every RC; in RC1, bump the version to a new clean number that will
565appear in the final release, and leave as-is for the later RCs and final).
566It may also happen that C<Module::CoreList> has been modified in blead, and
567hence has a new version number already.  (But make sure it is not the same
568number as a CPAN release.)
569
570C<$Module::CoreList::TieHashDelta::VERSION> and
571C<$Module::CoreList::Utils::VERSION> should always be equal to
572C<$Module::CoreList::VERSION>. If necessary, bump those two versions to match
573before proceeding.
574
575The files to modify are: F<dist/Module-CoreList/lib/Module/CoreList.pm>,
576F<dist/Module-CoreList/lib/Module/CoreList/Utils.pm> and
577F<dist/Module-CoreList/lib/Module/CoreList/TieHashDelta.pm>.
578
579=head4 Update C<Module::CoreList> with module version data for the new release.
580
581Note that if this is a MAINT release, you should run the following actions
582from the maint branch, but commit the C<CoreList.pm> changes in
583I<blead> and subsequently cherry-pick any releases since the last
584maint release and then your recent commit.  XXX need a better example
585
586[ Note that the procedure for handling Module::CoreList in maint branches
587is a bit complex, and the RMG currently don't describe a full and
588workable approach. The main issue is keeping Module::CoreList
589and its version number synchronised across all maint branches, blead and
590CPAN, while having to bump its version number for every RC release.
591See this brief p5p thread:
592
593    Message-ID: <20130311174402.GZ2294@iabyn.com>
594
595If you can devise a workable system, feel free to try it out, and to
596update the RMG accordingly!
597
598DAPM May 2013 ]
599
600F<corelist.pl> uses ftp.funet.fi to verify information about dual-lived
601modules on CPAN. It can use a full, local CPAN mirror and/or fall back
602on HTTP::Tiny to fetch package metadata remotely.
603
604(If you'd prefer to have a full CPAN mirror, see
605http://www.cpan.org/misc/cpan-faq.html#How_mirror_CPAN)
606
607Then change to your perl checkout, and if necessary,
608
609    $ make
610
611Then, If you have a local CPAN mirror, run:
612
613    $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror
614
615Otherwise, run:
616
617    $ ./perl -Ilib Porting/corelist.pl cpan
618
619This will chug for a while, possibly reporting various warnings about
620badly-indexed CPAN modules unrelated to the modules actually in core.
621Assuming all goes well, it will update
622F<dist/Module-CoreList/lib/Module/CoreList.pm> and possibly
623F<dist/Module-CoreList/lib/Module/CoreList/Utils.pm>.
624
625Check those files over carefully:
626
627    $ git diff dist/Module-CoreList/lib/Module/CoreList.pm
628    $ git diff dist/Module-CoreList/lib/Module/CoreList/Utils.pm
629
630=head4 Bump version in Module::CoreList F<Changes>
631
632Also edit Module::CoreList's new version number in its F<Changes> file.
633
634=head4 Add Module::CoreList version bump to perldelta
635
636Add a perldelta entry for the new Module::CoreList version. You only
637need to do this if you want to add notes about the changes included
638with this version of Module::CoreList. Otherwise, its version bump
639will be automatically filled in below in L<finalize perldelta>.
640
641=for checklist skip RC
642
643=head4 Update C<%Module::CoreList::released>
644
645For any release except an RC: Update this version's entry in the C<%released>
646hash with today's date.
647
648=head4 Commit Module::CoreList changes
649
650Finally, commit the new version of Module::CoreList:
651(unless this is for MAINT; in which case commit it to blead first, then
652cherry-pick it back).
653
654    $ git commit -m 'Update Module::CoreList for 5.x.y' \
655        dist/Module-CoreList/Changes \
656        dist/Module-CoreList/lib/Module/CoreList.pm \
657        dist/Module-CoreList/lib/Module/CoreList/Utils.pm
658
659=head4 Rebuild and test
660
661Build and test to get the changes into the currently built lib directory and to
662ensure all tests are passing.
663
664=head3 finalize perldelta
665
666Finalize the perldelta.  In particular, fill in the Acknowledgements
667section, which can be generated with something like:
668
669    $ perl Porting/acknowledgements.pl v5.15.0..HEAD
670
671Fill in the "New/Updated Modules" sections now that Module::CoreList is
672updated:
673
674    $ ./perl -Ilib Porting/corelist-perldelta.pl \
675        --mode=update pod/perldelta.pod
676
677For a MAINT release use something like this instead:
678
679    $ ./perl -Ilib Porting/corelist-perldelta.pl 5.020001 5.020002 \
680        --mode=update pod/perldelta.pod
681
682Ideally, also fill in a summary of the major changes to each module for which
683an entry has been added by F<corelist-perldelta.pl>.
684
685Re-read the perldelta to try to find any embarrassing typos and thinkos;
686remove any C<TODO> or C<XXX> flags; update the "Known Problems" section
687with any serious issues for which fixes are not going to happen now; and
688run through pod and spell checkers, e.g.
689
690    $ podchecker -warnings -warnings pod/perldelta.pod
691    $ spell pod/perldelta.pod
692
693Also, you may want to generate and view an HTML version of it to check
694formatting, e.g.
695
696    $ ./perl -Ilib ext/Pod-Html/bin/pod2html pod/perldelta.pod > \
697        /tmp/perldelta.html
698
699Another good HTML preview option is http://search.cpan.org/pod2html
700
701If you make changes, be sure to commit them.
702
703=for checklist skip BLEAD-POINT MAINT RC
704
705=head3 remove stale perldeltas
706
707For the first RC release that is ONLY for a BLEAD-FINAL, the perldeltas
708from the BLEAD-POINT releases since the previous BLEAD-FINAL should have
709now been consolidated into the current perldelta, and hence are now just
710useless clutter.  They can be removed using:
711
712    $ git rm <file1> <file2> ...
713
714For example, for RC0 of 5.16.0:
715
716    $ cd pod
717    $ git rm perldelta515*.pod
718
719=for checklist skip BLEAD-FINAL BLEAD-POINT
720
721=head3 add recent perldeltas
722
723For the first RC for a MAINT release, copy in any recent perldeltas from
724blead that have been added since the last release on this branch. This
725should include any recent maint releases on branches older than your one,
726but not newer. For example if you're producing a 5.14.x release, copy any
727perldeltas from recent 5.10.x, 5.12.x etc maint releases, but not from
7285.16.x or higher. Remember to
729
730    $ git add <file1> <file2> ...
731
732=head3 update and commit perldelta files
733
734If you have added or removed any perldelta files via the previous two
735steps, then edit F<pod/perl.pod> to add/remove them from its table of
736contents, then run F<Porting/pod_rules.pl> to propagate your changes there
737into all the other files that mention them (including F<MANIFEST>). You'll
738need to C<git add> the files that it changes.
739
740Then build a clean perl and do a full test
741
742    $ git status
743    $ git clean -dxf
744    $ ./Configure -Dusedevel -des
745    $ make
746    $ make test
747
748Once all tests pass, commit your changes.
749
750=head3 build a clean perl
751
752If you skipped the previous step (adding/removing perldeltas),
753again, make sure you have a gitwise-clean perl directory (no modified files,
754unpushed commits etc):
755
756    $ git status
757    $ git clean -dxf
758
759then configure and build perl so that you have a Makefile and porting tools:
760
761    $ ./Configure -Dusedevel -des && make
762
763=for checklist skip BLEAD-FINAL BLEAD-POINT
764
765=head3 synchronise from blead's perlhist.pod
766
767For the first RC for a MAINT release, copy in the latest
768F<pod/perlhist.pod> from blead; this will include details of newer
769releases in all branches. In theory, blead's version should be a strict
770superset of the one in this branch, but it's probably safest to diff them
771first to ensure that there's nothing in this branch that was forgotten
772from blead:
773
774    $ diff pod/perlhist.pod ..../blead/pod/perlhist.pod
775    $ cp  ..../blead/pod/perlhist.pod pod/
776    $ git commit -m 'sync perlhist from blead' pod/perlhist.pod
777
778=head3 update perlhist.pod
779
780Add an entry to F<pod/perlhist.pod> with the release date, e.g.:
781
782    David    5.10.1       2009-Aug-06
783
784List yourself in the left-hand column, and if this is the first release
785that you've ever done, make sure that your name is listed in the section
786entitled C<THE KEEPERS OF THE PUMPKIN>.
787
788I<If you're making a BLEAD-FINAL release>, also update the "SELECTED
789RELEASE SIZES" section with the output of
790F<Porting/perlhist_calculate.pl>.
791
792Be sure to commit your changes:
793
794    $ git commit -m 'add new release to perlhist' pod/perlhist.pod
795
796=for checklist skip BLEAD-POINT
797
798=head3 update patchlevel.h
799
800I<You MUST SKIP this step for a BLEAD-POINT release>
801
802Update F<patchlevel.h> to add a C<-RC1>-or-whatever string; or, if this is
803a final release, remove it. For example:
804
805     static const char * const local_patches[] = {
806             NULL
807    +        ,"RC1"
808     #ifdef PERL_GIT_UNCOMMITTED_CHANGES
809             ,"uncommitted-changes"
810     #endif
811
812Be sure to commit your change:
813
814    $ git commit -m 'bump version to RCnnn' patchlevel.h
815
816=head3 run makemeta to update META files
817
818    $ ./perl -Ilib Porting/makemeta
819
820Be sure to commit any changes (if applicable):
821
822    $ git status   # any changes?
823    $ git commit -m 'Update META files' META.*
824
825=head3 build, test and check a fresh perl
826
827Build perl, then make sure it passes its own test suite, and installs:
828
829    $ git clean -xdf
830    $ ./Configure -des -Dprefix=/tmp/perl-5.x.y-pretest
831
832    # or if it's an odd-numbered version:
833    $ ./Configure -des -Dusedevel -Dprefix=/tmp/perl-5.x.y-pretest
834
835    $ make test install
836
837Check that the output of C</tmp/perl-5.x.y-pretest/bin/perl -v> and
838C</tmp/perl-5.x.y-pretest/bin/perl -V> are as expected,
839especially as regards version numbers, patch and/or RC levels, and @INC
840paths. Note that as they have been built from a git working
841directory, they will still identify themselves using git tags and
842commits. (Note that for an odd-numbered version, perl will install
843itself as C<perl5.x.y>). C<perl -v> will identify itself as:
844
845    This is perl 5, version X, subversion Y (v5.X.Y (v5.X.Z-NNN-gdeadbeef))
846
847where 5.X.Z is the latest tag, NNN the number of commits since this tag,
848and C<< deadbeef >> commit of that tag.
849
850Then delete the temporary installation.
851
852=head3 create the release tag
853
854Create the tag identifying this release (e.g.):
855
856    $ git tag v5.11.0 -m "First release of the v5.11 series!"
857
858It is B<VERY> important that from this point forward, you not push
859your git changes to the Perl master repository.  If anything goes
860wrong before you publish your newly-created tag, you can delete
861and recreate it.  Once you push your tag, we're stuck with it
862and you'll need to use a new version number for your release.
863
864=head3 build the tarball
865
866Before you run the following, you might want to install 7-Zip (the
867C<p7zip-full> package under Debian or the C<p7zip> port on MacPorts) or
868the AdvanceCOMP suite (e.g. the C<advancecomp> package under Debian,
869or the C<advancecomp> port on macports - 7-Zip on Windows is the
870same code as AdvanceCOMP, so Windows users get the smallest files
871first time). These compress about 5% smaller than gzip and bzip2.
872Over the lifetime of your distribution this will save a lot of
873people a small amount of download time and disk space, which adds
874up.
875
876Create a tarball. Use the C<-s> option to specify a suitable suffix for
877the tarball and directory name:
878
879    $ cd root/of/perl/tree
880    $ make distclean       # make sure distclean works
881    $ git clean -xdf       # make sure perl and git agree on files
882                           # git clean should not output anything!
883    $ git status           # and there's nothing lying around
884
885    $ perl Porting/makerel -b -s RC1            # for a release candidate
886    $ perl Porting/makerel -b                   # for the release itself
887
888This creates the  directory F<../perl-x.y.z-RC1> or similar, copies all
889the MANIFEST files into it, sets the correct permissions on them, then
890tars it up as F<../perl-x.y.z-RC1.tar.gz>. With C<-b>, it also creates a
891C<tar.bz2> file.
892
893If you're getting your tarball suffixed with -uncommitted and you're sure
894your changes were all committed, you can override the suffix with:
895
896    $ perl Porting/makerel -b -s ''
897
898XXX if we go for extra tags and branches stuff, then add the extra details
899here
900
901Finally, clean up the temporary directory, e.g.
902
903    $ rm -rf ../perl-x.y.z-RC1
904
905=head3 test the tarball
906
907Once you have a tarball it's time to test the tarball (not the repository).
908
909=head4 Copy the tarball to a web server
910
911Copy the tarballs (.gz and possibly .bz2) to a web server somewhere you
912have access to.
913
914=head4 Download the tarball to another machine
915
916Download the tarball to some other machine. For a release candidate,
917you really want to test your tarball on two or more different platforms
918and architectures. The #p5p IRC channel on irc.perl.org is a good place
919to find willing victims.
920
921=head4 Check that F<Configure> works
922
923Check that basic configuration and tests work on each test machine:
924
925    $ ./Configure -des && make all test
926
927    # Or for a development release:
928    $ ./Configure -Dusedevel -des && make all test
929
930=head4 Run the test harness and install
931
932Check that the test harness and install work on each test machine:
933
934    $ make distclean
935    $ ./Configure -des -Dprefix=/install/path && make all test_harness install
936    $ cd /install/path
937
938=head4 Check C<perl -v> and C<perl -V>
939
940Check that the output of C<perl -v> and C<perl -V> are as expected,
941especially as regards version numbers, patch and/or RC levels, and @INC
942paths.
943
944Note that the results may be different without a F<.git/> directory,
945which is why you should test from the tarball.
946
947=head4 Run the Installation Verification Procedure utility
948
949    $ ./perl utils/perlivp
950    ...
951    All tests successful.
952    $
953
954=head4 Compare the installed paths to the last release
955
956Compare the pathnames of all installed files with those of the previous
957release (i.e. against the last installed tarball on this branch which you
958have previously verified using this same procedure). In particular, look
959for files in the wrong place, or files no longer included which should be.
960For example, suppose the about-to-be-released version is 5.10.1 and the
961previous is 5.10.0:
962
963    cd installdir-5.10.0/
964    find . -type f | perl -pe's/5\.10\.0/5.10.1/g' | sort > /tmp/f1
965    cd installdir-5.10.1/
966    find . -type f | sort > /tmp/f2
967    diff -u /tmp/f[12]
968
969=head4 Bootstrap the CPAN client
970
971Bootstrap the CPAN client on the clean install:
972
973    $ bin/cpan
974
975    # Or, perhaps:
976    $ bin/cpan5.xx.x
977
978=head4 Install the Inline module with CPAN and test it
979
980Try installing a popular CPAN module that's reasonably complex and that
981has dependencies; for example:
982
983    CPAN> install Inline::C
984    CPAN> quit
985
986Check that your perl can run this:
987
988    $ bin/perl -lwe "use Inline C => q[int f() { return 42;}]; print f"
989    42
990    $
991
992=head4 Make sure that perlbug works
993
994Test L<perlbug> with the following:
995
996    $ bin/perlbug
997    ...
998    Subject: test bug report
999    Local perl administrator [yourself]:
1000    Editor [vi]:
1001    Module:
1002    Category [core]:
1003    Severity [low]:
1004    (edit report)
1005    Action (Send/Display/Edit/Subject/Save to File): f
1006    Name of file to save message in [perlbug.rep]:
1007    Action (Send/Display/Edit/Subject/Save to File): q
1008
1009and carefully examine the output (in F<perlbug.rep]>), especially
1010the "Locally applied patches" section. If everything appears okay, then
1011delete the file, and try it again, this time actually submitting the bug
1012report. Check that it shows up, then remember to close it!
1013
1014=for checklist skip BLEAD-POINT
1015
1016=head3 monitor smokes
1017
1018XXX This is probably irrelevant if working on a release branch, though
1019MAINT or RC might want to push a smoke branch and wait.
1020
1021Wait for the smoke tests to catch up with the commit which this release is
1022based on (or at least the last commit of any consequence).
1023
1024Then check that the smoke tests pass (particularly on Win32). If not, go
1025back and fix things.
1026
1027Note that for I<BLEAD-POINT> releases this may not be practical. It takes a
1028long time for the smokers to catch up, especially the Win32
1029smokers. This is why we have a RC cycle for I<MAINT> and I<BLEAD-FINAL>
1030releases, but for I<BLEAD-POINT> releases sometimes the best you can do is
1031to plead with people on IRC to test stuff on their platforms, fire away,
1032and then hope for the best.
1033
1034=head3 upload to PAUSE
1035
1036Once smoking is okay, upload it to PAUSE. This is the point of no return.
1037If anything goes wrong after this point, you will need to re-prepare
1038a new release with a new minor version or RC number.
1039
1040    https://pause.perl.org/
1041
1042(Login, then select 'Upload a file to CPAN')
1043
1044If your workstation is not connected to a high-bandwidth,
1045high-reliability connection to the Internet, you should probably use the
1046"GET URL" feature (rather than "HTTP UPLOAD") to have PAUSE retrieve the
1047new release from wherever you put it for testers to find it.  This will
1048eliminate anxious gnashing of teeth while you wait to see if your
104915 megabyte HTTP upload successfully completes across your slow, twitchy
1050cable modem.  You can make use of your home directory on dromedary for
1051this purpose: F<http://users.perl5.git.perl.org/~USERNAME> maps to
1052F</home/USERNAME/public_html>, where F<USERNAME> is your login account
1053on dromedary.  I<Remember>: if your upload is partially successful, you
1054may need to contact a PAUSE administrator or even bump the version of perl.
1055
1056Upload both the .gz and .bz2 versions of the tarball.
1057
1058Do not proceed any further until you are sure that your tarballs are on CPAN.
1059Check your authors directory www.cpan.org (the globally balanced "fast"
1060mirror) to confirm that your uploads have been successful.
1061
1062=for checklist skip RC BLEAD-POINT
1063
1064=head3 wait for indexing
1065
1066I<You MUST SKIP this step for RC and BLEAD-POINT>
1067
1068Wait until you receive notification emails from the PAUSE indexer
1069confirming that your uploads have been received.  IMPORTANT -- you will
1070probably get an email that indexing has failed, due to module permissions.
1071This is considered normal.
1072
1073=for checklist skip BLEAD-POINT
1074
1075=head3 disarm patchlevel.h
1076
1077I<You MUST SKIP this step for BLEAD-POINT release>
1078
1079Disarm the F<patchlevel.h> change; for example,
1080
1081     static const char * const local_patches[] = {
1082             NULL
1083    -        ,"RC1"
1084     #ifdef PERL_GIT_UNCOMMITTED_CHANGES
1085             ,"uncommitted-changes"
1086     #endif
1087
1088Be sure to commit your change:
1089
1090    $ git commit -m 'disarm RCnnn bump' patchlevel.h
1091
1092=head3 announce to p5p
1093
1094Mail p5p to announce your new release, with a quote you prepared earlier.
1095
1096Use the template at Porting/release_announcement_template.txt
1097
1098Send a carbon copy to C<noc@metacpan.org>
1099
1100=head3 merge release branch back to blead
1101
1102Merge the (local) release branch back into master now, and delete it.
1103
1104    git checkout blead
1105    git pull
1106    git merge release-5.xx.yy
1107    git push
1108    git branch -d release-5.xx.yy
1109
1110Note: The merge will create a merge commit if other changes have been pushed
1111to blead while you've been working on your release branch. Do NOT rebase your
1112branch to avoid the merge commit (as you might normally do when merging a
1113small branch into blead) since doing so will invalidate the tag that you
1114created earlier.
1115
1116=head3 publish the release tag
1117
1118Now that you've shipped the new perl release to PAUSE and pushed your changes
1119to the Perl master repository, it's time to publish the tag you created
1120earlier too (e.g.):
1121
1122    $ git push origin tag v5.11.0
1123
1124=head3 update epigraphs.pod
1125
1126Add your quote to F<Porting/epigraphs.pod> and commit it.
1127You can include the customary link to the release announcement even before your
1128message reaches the web-visible archives by looking for the X-List-Archive
1129header in your message after receiving it back via perl5-porters.
1130
1131=head3 blog about your epigraph
1132
1133If you have a blog, please consider writing an entry in your blog explaining
1134why you chose that particular quote for your epigraph.
1135
1136=for checklist skip RC
1137
1138=head3 Release schedule
1139
1140I<You MUST SKIP this step for RC>
1141
1142Tick the entry for your release in F<Porting/release_schedule.pod>.
1143
1144=for checklist skip RC
1145
1146=head3 Module::CoreList nagging
1147
1148I<You MUST SKIP this step for RC>
1149
1150Remind the current maintainer of C<Module::CoreList> to push a new release
1151to CPAN.
1152
1153=for checklist skip RC
1154
1155=head3 new perldelta
1156
1157I<You MUST SKIP this step for RC>
1158
1159Create a new perldelta.
1160
1161=over 4
1162
1163=item *
1164
1165Confirm that you have a clean checkout with no local changes.
1166
1167=item *
1168
1169Run F<Porting/new-perldelta.pl>
1170
1171=item *
1172
1173Run the C<git add> commands it outputs to add new and modified files.
1174
1175=item *
1176
1177Verify that the build still works, by running C<./Configure> and
1178C<make test_porting>. (On Win32 use the appropriate make utility).
1179
1180=item *
1181
1182If F<t/porting/podcheck.t> spots errors in the new F<pod/perldelta.pod>,
1183run C<./perl -MTestInit t/porting/podcheck.t | less> for more detail.
1184Skip to the end of its test output to see the options it offers you.
1185
1186=item *
1187
1188When C<make test_porting> passes, commit the new perldelta.
1189
1190=back
1191
1192At this point you may want to compare the commit with a previous bump to
1193see if they look similar.  See commit ba03bc34a4 for an example of a
1194previous version bump.
1195
1196=for checklist skip MAINT RC
1197
1198=head3 bump version
1199
1200I<You MUST SKIP this step for RC and MAINT>
1201
1202If this was a BLEAD-FINAL release (i.e. the first release of a new maint
1203series, 5.x.0 where x is even), then bump the version in the blead branch
1204in git, e.g. 5.12.0 to 5.13.0.
1205
1206First, add a new feature bundle to F<regen/feature.pl>, initially by just
1207copying the exiting entry, and bump the file's $VERSION (after the __END__
1208marker); e.g.
1209
1210	 "5.14" => [qw(switch say state unicode_strings)],
1211    +    "5.15" => [qw(switch say state unicode_strings)],
1212
1213Run F<regen/feature.pl> to propagate the changes to F<lib/feature.pm>.
1214
1215Then follow the section L<"Bump the version number"> to bump the version
1216in the remaining files and test and commit.
1217
1218If this was a BLEAD-POINT release, then just follow the section
1219L<"Bump the version number">.
1220
1221After bumping the version, follow the section L<"update INSTALL"> to
1222ensure all version number references are correct.
1223
1224(Note: The version is NOT bumped immediately after a MAINT release in order
1225to avoid confusion and wasted time arising from bug reports relating to
1226"intermediate versions" such as 5.20.1-and-a-bit: If the report is caused
1227by a bug that gets fixed in 5.20.2 and this intermediate version already
1228calls itself 5.20.2 then much time can be wasted in figuring out why there
1229is a failure from something that "should have been fixed". If the bump is
1230late then there is a much smaller window of time for such confusing bug
1231reports to arise. (The opposite problem -- trying to figure out why there
1232*is* a bug in something calling itself 5.20.1 when in fact the bug was
1233introduced later -- shouldn't arise for MAINT releases since they should,
1234in theory, only contain bug fixes but never regressions.))
1235
1236=head3 clean build and test
1237
1238Run a clean build and test to make sure nothing obvious is broken.
1239
1240In particular, F<Porting/perldelta_template.pod> is intentionally exempted
1241from podchecker tests, to avoid false positives about placeholder text.
1242However, once it's copied to F<pod/perldelta.pod> the contents can now
1243cause test failures. Problems should be resolved by doing one of the
1244following:
1245
1246=over
1247
1248=item 1
1249
1250Replace placeholder text with correct text.
1251
1252=item 2
1253
1254If the problem is from a broken placeholder link, you can add it to the
1255array C<@perldelta_ignore_links> in F<t/porting/podcheck.t>.  Lines
1256containing such links should be marked with C<XXX> so that they get
1257cleaned up before the next release.
1258
1259=item 3
1260
1261Following the instructions output by F<t/porting/podcheck.t> on how to
1262update its exceptions database.
1263
1264=back
1265
1266=head3 push commits
1267
1268Finally, push any commits done above.
1269
1270    $ git push origin ....
1271
1272=for checklist skip BLEAD-POINT MAINT RC
1273
1274=head3 create maint branch
1275
1276I<You MUST SKIP this step for RC, BLEAD-POINT, MAINT>
1277
1278If this was a BLEAD-FINAL release (i.e. the first release of a new maint
1279series, 5.x.0 where x is even), then create a new maint branch based on
1280the commit tagged as the current release.
1281
1282Assuming you're using git 1.7.x or newer:
1283
1284    $ git checkout -b maint-5.12 v5.12.0
1285    $ git push origin -u maint-5.12
1286
1287
1288=for checklist skip BLEAD-POINT MAINT RC
1289
1290=head3 make the maint branch available in the APC
1291
1292Clone the new branch into /srv/gitcommon/branches on camel so the APC will
1293receive its changes.
1294
1295    $ git clone --branch maint-5.14 /gitroot/perl.git \
1296    ?  /srv/gitcommon/branches/perl-5.14.x
1297    $ chmod -R g=u /srv/gitcommon/branches/perl-5.14.x
1298
1299And nag the sysadmins to make this directory available via rsync.
1300
1301XXX Who are the sysadmins?  Contact info?
1302
1303=for checklist skip BLEAD-POINT RC
1304
1305=head3 copy perldelta.pod to blead
1306
1307I<You MUST SKIP this step for RC, BLEAD-POINT>
1308
1309Copy the perldelta.pod for this release into blead; for example:
1310
1311    $ cd ..../blead
1312    $ cp -i ../5.10.x/pod/perldelta.pod pod/perl5101delta.pod  # for example
1313    $ git add pod/perl5101delta.pod
1314
1315Don't forget to set the NAME correctly in the new file (e.g. perl5101delta
1316rather than perldelta).
1317
1318Edit F<pod/perl.pod> to add an entry for the file, e.g.:
1319
1320    perl5101delta		Perl changes in version 5.10.1
1321
1322Then rebuild various files:
1323
1324    $ perl Porting/pod_rules.pl
1325
1326Finally, commit and push:
1327
1328    $ git commit -a -m 'add perlXXXdelta'
1329    $ git push origin ....
1330
1331=for checklist skip BLEAD-POINT
1332
1333=head3 copy perlhist.pod entries to blead
1334
1335Make sure any recent F<pod/perlhist.pod> entries are copied to
1336F<perlhist.pod> on blead.  e.g.
1337
1338    5.8.9         2008-Dec-14
1339
1340=head3 bump RT version number
1341
1342Log into http://rt.perl.org/ and check whether the new version is in the RT
1343fields C<Perl Version> and C<Fixed In>. The easiest way to determine this is to
1344open up any ticket for modification and check the drop downs next to the
1345C<Perl Version> and C<Fixed In> labels.
1346
1347Here, try this link: L<https://rt.perl.org/Ticket/Modify.html?id=10000>
1348
1349If the new version is not listed there, send an email to C<perlbug-admin at
1350perl.org> requesting this.
1351
1352=head3 Relax!
1353
1354I<You MUST RETIRE to your preferred PUB, CAFE or SEASIDE VILLA for some
1355much-needed rest and relaxation>.
1356
1357Thanks for releasing perl!
1358
1359=head2 Building a release - the day after
1360
1361=for checklist skip BLEAD-FINAL, MAINT, RC
1362
1363=head3 update Module::CoreList
1364
1365I<After a BLEAD-POINT release only>
1366
1367After Module::CoreList has shipped to CPAN by the maintainer, update
1368Module::CoreList in the source so that it reflects the new blead
1369version number:
1370
1371=over 4
1372
1373=item *
1374
1375Update F<Porting/Maintainers.pl> to list the new DISTRIBUTION on CPAN,
1376which should be identical to what is currently in blead.
1377
1378=item *
1379
1380Bump the $VERSION in F<dist/Module-CoreList/lib/Module/CoreList.pm>,
1381F<dist/Module-CoreList/lib/Module/CoreList/TieHashDelta.pm> and
1382F<dist/Module-CoreList/lib/Module/CoreList/Utils.pm>.
1383
1384=item *
1385
1386If you have a local CPAN mirror, run:
1387
1388    $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror
1389
1390Otherwise, run:
1391
1392    $ ./perl -Ilib Porting/corelist.pl cpan
1393
1394This will update F<dist/Module-CoreList/lib/Module/CoreList.pm> and
1395F<dist/Module-CoreList/lib/Module/CoreList/Utils.pm> as it did before,
1396but this time adding new sections for the next BLEAD-POINT release.
1397
1398=item *
1399
1400Add the new $Module::CoreList::VERSION to
1401F<dist/Module-CoreList/Changes>.
1402
1403=item *
1404
1405Update F<pod/perldelta.pod> to mention the upgrade to Module::CoreList.
1406
1407=item *
1408
1409Remake perl to get your changed .pm files propagated into F<lib/> and
1410then run at least the F<dist/Module-CoreList/t/*.t> tests and the
1411test_porting makefile target to check that they're ok.
1412
1413=item *
1414
1415Run
1416
1417    $ ./perl -Ilib -MModule::CoreList \
1418        -le 'print Module::CoreList->find_version($]) ? "ok" : "not ok"'
1419
1420and check that it outputs "ok" to prove that Module::CoreList now knows
1421about blead's current version.
1422
1423=item *
1424
1425Commit and push your changes.
1426
1427=back
1428
1429=head3 check tarball availability
1430
1431Check various website entries to make sure the that tarball has appeared
1432and is properly indexed:
1433
1434=over 4
1435
1436=item *
1437
1438Check your author directory under L<http://www.cpan.org/authors/id/>
1439to ensure that the tarballs are available on the website.
1440
1441=item *
1442
1443Check C</src> on CPAN (on a fast mirror) to ensure that links to
1444the new tarballs have appeared: There should be links in C</src/5.0>
1445(which is accumulating all new versions), and (for BLEAD-FINAL and
1446MAINT only) an appropriate mention in C</src/README.html> (which describes
1447the latest versions in each stable branch, with links).
1448
1449The C</src/5.0> links should appear automatically, some hours after upload.
1450If they don't, or the C</src> description is inadequate,
1451ask Ask <ask@perl.org>.
1452
1453=item *
1454
1455Check L<http://www.cpan.org/src/> to ensure that the C</src> updates
1456have been correctly mirrored to the website.
1457If they haven't, ask Ask <ask@perl.org>.
1458
1459=item *
1460
1461Check L<http://search.cpan.org> to see if it has indexed the distribution.
1462It should be visible at a URL like C<http://search.cpan.org/dist/perl-5.10.1/>.
1463
1464=back
1465
1466=for checklist skip RC
1467
1468=head3 update dev.perl.org
1469
1470I<You MUST SKIP this step for a RC release>
1471
1472In your C<perlweb> repository, link to the new release.  For a new
1473latest-maint release, edit F<docs/shared/tpl/stats.html>.  Otherwise,
1474edit F<docs/dev/perl5/index.html>.
1475
1476Then make a pull request to Leo Lapworth.  If this fails for some reason
1477and you cannot cajole anybody else into submitting that change, you can
1478mail Leo as last resort.
1479
1480This repository can be found on L<github|https://github.com/perlorg/perlweb>.
1481
1482=head3 update release manager's guide
1483
1484Go over your notes from the release (you did take some, right?) and update
1485F<Porting/release_managers_guide.pod> with any fixes or information that
1486will make life easier for the next release manager.
1487
1488=for checklist end
1489
1490=head1 SOURCE
1491
1492Based on
1493http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2009-05/msg00608.html,
1494plus a whole bunch of other sources, including private correspondence.
1495
1496=cut
1497
1498