This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Update Maintainers.pl for the CGI.pm update.
[perl5.git] / Porting / release_managers_guide.pod
CommitLineData
49781f4a
AB
1=encoding utf8
2
7277a900
GS
3=head1 NAME
4
5release_managers_guide - Releasing a new version of perl 5.x
6
dc0a4df9
DM
7Note that things change at each release, so there may be new things not
8covered here, or tools may need updating.
9
c78277ad
DR
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.
f6af4394 23
0056d3d2
DR
24 perl Porting/make-rmg-checklist --html \
25 --type [BLEAD-POINT or MAINT or ...] > /tmp/rmg.html
26
7277a900
GS
27=head1 SYNOPSIS
28
f6af4394 29This document describes the series of tasks required - some automatic, some
dc0a4df9
DM
30manual - to produce a perl release of some description, be that a release
31candidate, or final, numbered release of maint or blead.
f6af4394 32
8c35d285 33The release process has traditionally been executed by the current
ee76d676
JV
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.
7277a900 37
8c35d285
JV
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.
7277a900 41
da571fa1 42The checklist of a typical release cycle is as follows:
f6af4394 43
636a1918 44 (5.10.1 is released, and post-release actions have been done)
f6af4394
DM
45
46 ...time passes...
47
f6af4394
DM
48 a few weeks before the release, a number of steps are performed,
49 including bumping the version to 5.10.2
636a1918
DM
50
51 ...a few weeks passes...
46743ef7 52
f6af4394
DM
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
c5b87fed 58 perldelta.pod
f6af4394
DM
59
60 ... the cycle continues ...
7277a900 61
dc0a4df9 62
7277a900
GS
63=head1 DETAILS
64
6a958a95
DM
65Some of the tasks described below apply to all four types of
66release of Perl. (blead, RC, final release of maint, final
8c35d285
JV
67release of blead). Some of these tasks apply only to a subset
68of these release types. If a step does not apply to a given
69type of release, you will see a notation to that effect at
70the beginning of the step.
71
dc0a4df9 72
8c35d285
JV
73=head2 Release types
74
75=over 4
76
8c35d285
JV
77=item Release Candidate (RC)
78
d60a1044
DM
79A release candidate is an attempt to produce a tarball that is a close as
80possible to the final release. Indeed, unless critical faults are found
81during the RC testing, the final release will be identical to the RC
82barring a few minor fixups (updating the release date in F<perlhist.pod>,
83removing the RC status from F<patchlevel.h>, etc). If faults are found,
84then the fixes should be put into a new release candidate, never directly
85into a final release.
8c35d285 86
6a958a95
DM
87
88=item Stable/Maint release (MAINT).
89
90A release with an even version number, and subversion number > 0, such as
915.14.1 or 5.14.2.
8c35d285
JV
92
93At this point you should have a working release candidate with few or no
94changes since.
95
96It's essentially the same procedure as for making a release candidate, but
97with a whole bunch of extra post-release steps.
98
6a958a95
DM
99=item A blead point release (BLEAD-POINT)
100
101A release with an odd version number, such as 5.15.0 or 5.15.1.
102
103This isn't for production, so it has less stability requirements than for
104other release types, and isn't preceded by RC releases. Other than that,
105it is similar to a MAINT release.
106
107=item Blead final release (BLEAD-FINAL)
108
109A release with an even version number, and subversion number == 0, such as
dc0a4df9 1105.14.0. That is to say, it's the big new release once per year.
8c35d285
JV
111
112It's essentially the same procedure as for making a release candidate, but
6a958a95 113with a whole bunch of extra post-release steps, even more than for MAINT.
8c35d285
JV
114
115=back
7277a900 116
da571fa1 117=for checklist begin
dc0a4df9 118
fd838dcf
JV
119=head2 Prerequisites
120
121Before you can make an official release of perl, there are a few
122hoops you need to jump through:
123
00c28750 124=head3 PAUSE account with pumpkin status
8c35d285 125
fd838dcf
JV
126Make sure you have a PAUSE account suitable for uploading a perl release.
127If you don't have a PAUSE account, then request one:
128
129 https://pause.perl.org/pause/query?ACTION=request_id
130
9a3b7d40
FR
131Check that your account is allowed to upload perl distros: go to
132L<https://pause.perl.org/pause/authenquery?ACTION=who_pumpkin> and check that
133your PAUSE ID is listed there. If not, ask Andreas KE<0xf6>nig to add your ID
134to the list of people allowed to upload something called perl. You can find
135Andreas' email address at:
4d2c8158 136
fd838dcf
JV
137 https://pause.perl.org/pause/query?ACTION=pause_04imprint
138
00c28750 139=head3 search.cpan.org pumpkin status
fdabea7a
JV
140
141Make sure that search.cpan.org knows that you're allowed to upload
142perl distros. Contact Graham Barr to make sure that you're on the right
143list.
144
da571fa1 145=head3 git checkout and commit bit
fd838dcf
JV
146
147You will need a working C<git> installation, checkout of the perl
148git repository and perl commit bit. For information about working
c222ef46 149with perl and git, see F<pod/perlgit.pod>.
fd838dcf
JV
150
151If you are not yet a perl committer, you won't be able to make a
152release. Have a chat with whichever evil perl porter tried to talk
153you into the idea in the first place to figure out the best way to
154resolve the issue.
155
da571fa1 156=for checklist skip RC
f6af4394 157
da571fa1 158=head3 Quotation for release announcement epigraph
f6af4394 159
b1288acc 160I<SKIP this step for RC>
f6af4394 161
6a958a95 162For all except an RC release of perl, you will need a quotation
b1288acc 163to use as an epigraph to your release announcement.
46743ef7 164
2e831dfd 165=head2 Building a release - advance actions
8c35d285
JV
166
167The work of building a release candidate for a numbered release of
168perl generally starts several weeks before the first release candidate.
52a66c2c
DM
169Some of the following steps should be done regularly, but all I<must> be
170done in the run up to a release.
7277a900 171
7277a900 172
dc0a4df9 173=head3 dual-life CPAN module synchronisation
f6af4394 174
f6af4394
DM
175Ensure that dual-life CPAN modules are synchronised with CPAN. Basically,
176run the following:
177
db3f805e 178 $ ./perl -Ilib Porting/core-cpan-diff -a -o /tmp/corediffs
7277a900 179
f6af4394
DM
180to see any inconsistencies between the core and CPAN versions of distros,
181then fix the core, or cajole CPAN authors as appropriate. See also the
182C<-d> and C<-v> options for more detail. You'll probably want to use the
04dbb930
DG
183C<-c cachedir> option to avoid repeated CPAN downloads and may want to
184use C<-m file:///mirror/path> if you made a local CPAN mirror.
7277a900 185
f6af4394 186To see which core distro versions differ from the current CPAN versions:
7277a900 187
db3f805e 188 $ ./perl -Ilib Porting/core-cpan-diff -x -a
7277a900 189
6a958a95 190If you are making a MAINT release, run C<core-cpan-diff> on both blead and
636a1918
DM
191maint, then diff the two outputs. Compare this with what you expect, and if
192necessary, fix things up. For example, you might think that both blead
193and maint are synchronised with a particular CPAN module, but one might
194have some extra changes.
195
dc0a4df9
DM
196
197=head3 dual-life CPAN module stability
7277a900 198
f6af4394 199Ensure dual-life CPAN modules are stable, which comes down to:
7277a900
GS
200
201 for each module that fails its regression tests on $current
f6af4394
DM
202 did it fail identically on $previous?
203 if yes, "SEP" (Somebody Else's Problem)
204 else work out why it failed (a bisect is useful for this)
7277a900
GS
205
206 attempt to group failure causes
207
208 for each failure cause
f6af4394
DM
209 is that a regression?
210 if yes, figure out how to fix it
211 (more code? revert the code that broke it)
212 else
213 (presumably) it's relying on something un-or-under-documented
214 should the existing behaviour stay?
215 yes - goto "regression"
216 no - note it in perldelta as a significant bugfix
217 (also, try to inform the module's author)
1aff5354 218
dc0a4df9 219
00c28750 220=head3 monitor smoke tests for failures
7277a900 221
5157df7a
AB
222Similarly, monitor the smoking of core tests, and try to fix. See
223L<http://doc.procura.nl/smoke/index.html> for a summary. See also
224L<http://www.nntp.perl.org/group/perl.daily-build.reports/> which has
225the raw reports.
7277a900 226
636a1918
DM
227Similarly, monitor the smoking of perl for compiler warnings, and try to
228fix.
229
dc0a4df9 230
00c28750 231=head3 update perldelta
636a1918 232
f6af4394 233Get perldelta in a mostly finished state.
db3f805e 234
04c2c53e 235Read F<Porting/how_to_write_a_perldelta.pod>, and try to make sure that
636a1918
DM
236every section it lists is, if necessary, populated and complete. Copy
237edit the whole document.
f6af4394 238
f6af4394 239
dc0a4df9
DM
240=head3 Bump the version number
241
242Increase the version number (e.g. from 5.12.0 to 5.12.1).
04dbb930 243
6a958a95 244For a BLEAD-POINT release, this can happen on the day of the release. For a
04dbb930
DG
245release candidate for a stable perl, this should happen a week or two
246before the first release candidate to allow sufficient time for testing and
247smoking with the target version built into the perl executable. For
248subsequent release candidates and the final release, it it not necessary to
249bump the version further.
f6af4394 250
8b2227e6 251There is a tool to semi-automate this process:
f6af4394 252
8b2227e6 253 $ ./perl -Ilib Porting/bump-perl-version -i 5.10.0 5.10.1
f6af4394 254
8b2227e6
LB
255Remember that this tool is largely just grepping for '5.10.0' or whatever,
256so it will generate false positives. Be careful not change text like
257"this was fixed in 5.10.0"!
ceb7f800 258
8b2227e6 259Use git status and git diff to select changes you want to keep.
ceb7f800 260
f6af4394
DM
261Be particularly careful with F<INSTALL>, which contains a mixture of
262C<5.10.0>-type strings, some of which need bumping on every release, and
e03f126c
Z
263some of which need to be left unchanged.
264The line in F<INSTALL> about "is binary incompatible with" requires a
265correct choice of earlier version to declare incompatibility with.
266
6a958a95
DM
267When doing a BLEAD-POINT or BLEAD-FINAL release, also make sure the
268C<PERL_API_*> constants in F<patchlevel.h> are in sync with the version
269you're releasing, unless you're
e43cb88f 270absolutely sure the release you're about to make is 100% binary compatible
6a958a95 271to an earlier release. When releasing a MAINT perl version, the C<PERL_API_*>
e43cb88f
TM
272constants C<MUST NOT> be changed as we aim to guarantee binary compatibility
273in maint branches.
45ce9531 274
17163f85
DM
275After editing, regenerate uconfig.h (this must be run on a system with a
276/bin/sh available):
22be9667 277
17163f85 278 $ perl regen/uconfig_h.pl
22be9667
JV
279
280Test your changes:
281
17163f85 282 $ git clean -xdf # careful if you don't have local files to keep!
22be9667
JV
283 $ ./Configure -des -Dusedevel
284 $ make
285 $ make test
286
54356a6f
JV
287Commit your changes:
288
04abd20e 289 $ git status
e91bd5c0
LB
290 $ git diff
291 B<review the delta carefully>
54356a6f
JV
292
293 $ git commit -a -m 'Bump the perl version in various places for 5.x.y'
dc0a62a1 294
21768cb3
FC
295At this point you may want to compare the commit with a previous bump to
296see if they look similar. See commit 8891dd8d for an example of a
297previous version bump.
298
dc0a4df9
DM
299When the version number is bumped, you should also update Module::CoreList
300(as described below in L<"update Module::CoreList">) to reflect the new
81fc59ef
DG
301version number.
302
dc0a4df9
DM
303
304=head3 update INSTALL
dc0a62a1
DM
305
306Review and update INSTALL to account for the change in version number;
307in particular, the "Coexistence with earlier versions of perl 5" section.
308
6a958a95
DM
309Be particularly careful with the section "Upgrading from 5.X.Y or earlier".
310The "X.Y" needs to be changed to the most recent version that we are
311I<not> binary compatible with.
312
313For MAINT and BLEAD-FINAL releases, this needs to refer to the last
314release in the previous development cycle (so for example, for a 5.14.x
315release, this would be 5.13.11).
316
317For BLEAD-POINT releases, it needs to refer to the previous BLEAD-POINT
318release (so for 5.15.3 this would be 5.15.2).
319
dc0a4df9 320=head3 Check more build configurations
b82efa27 321
a65c7ffd 322Check some more build configurations.
52a66c2c
DM
323
324 $ sh Configure -Dprefix=/tmp/perl-5.x.y -Uinstallusrbinperl \
a65c7ffd 325 -Duseshrplib -Dusesitecustomize
52a66c2c 326 $ make
a65c7ffd 327 $ make test
7277a900 328
52a66c2c 329XXX think of other configurations that need testing.
7277a900 330
dc0a4df9
DM
331
332=head3 update perlport
7277a900 333
347f5124
RGS
334L<perlport> has a section currently named I<Supported Platforms> that
335indicates which platforms are known to build in the current release.
336If necessary update the list and the indicated version number.
337
6a958a95
DM
338
339
2e831dfd
DM
340=head2 Building a release - on the day
341
b1288acc
DM
342This section describes the actions required to make a release
343that are performed on the actual day.
2e831dfd 344
2e831dfd 345
dc0a4df9 346=head3 re-check earlier actions
2e831dfd 347
dc0a4df9 348Review all the actions in the previous section,
2e831dfd
DM
349L<"Building a release - advance actions"> to ensure they are all done and
350up-to-date.
351
dc0a4df9
DM
352
353=head3 bump version number
8c35d285 354
6a958a95
DM
355For a BLEAD-POINT release, if you did not bump the perl version number as
356part of I<advance actions>, do that now.
04dbb930 357
dc0a4df9
DM
358
359=head3 finalize perldelta
04dbb930 360
04dbb930 361Finalize the perldelta. In particular, fill in the Acknowledgements
548e9a3a 362section, which can be generated with something like:
38195a8c 363
548e9a3a 364 $ perl Porting/acknowledgements.pl v5.15.0..HEAD
ef86391b 365
a0db33fe
DM
366Re-read the perldelta to try to find any embarrassing typos and thinkos;
367remove any C<TODO> or C<XXX> flags; update the "Known Problems" section
368with any serious issues for which fixes are not going to happen now; and
369run through pod and spell checkers, e.g.
2e831dfd 370
c5b87fed
FR
371 $ podchecker -warnings -warnings pod/perldelta.pod
372 $ spell pod/perldelta.pod
2e831dfd 373
a0db33fe
DM
374Also, you may want to generate and view an HTML version of it to check
375formatting, e.g.
2e831dfd 376
3f894c2d 377 $ ./perl -Ilib ext/Pod-Html/bin/pod2html pod/perldelta.pod > /tmp/perldelta.html
2e831dfd 378
38195a8c
DG
379Another good HTML preview option is http://search.cpan.org/pod2html
380
381If you make changes, be sure to commit them.
382
da571fa1
DR
383=for checklist skip BLEAD-POINT MAINT RC
384
a03432f2
KW
385=head3 remove stale perldeltas
386
387For the first RC release that is ONLY for a BLEAD-FINAL, the perldeltas
388from the BLEAD-POINT releases since the previous BLEAD_FINAL should have
389now been consolidated into the current perldelta, and hence are now just
390useless clutter. They can be removed using:
391
392 $ git rm <file1> <file2> ...
393
394For example, for RC0 of 5.16.0:
395
396 $ cd pod
397 $ git rm perldelta515*.pod
398
ace68858
NC
399All mention to them should also be removed. Edit F<pod/perl.pod> to remove
400them from its table of contents, then run F<Porting/pod_rules.pl> to
401propagate your changes there into all the other files that mention them
402(including F<MANIFEST>). You'll need to C<git add> the files that it changes.
a03432f2
KW
403
404Then build a clean perl and do a full test
405
406 $ git status
407 $ git clean -dxf
408 $ ./Configure -Dusedevel -des
409 $ make
410 $ make test
411
412Once all tests pass, commit your changes.
dc0a4df9
DM
413
414=head3 build a clean perl
8c35d285 415
a03432f2
KW
416If you skipped the previous step (removing the stale perldeltas)
417make sure you have a gitwise-clean perl directory (no modified files,
a0db33fe 418unpushed commits etc):
8c35d285 419
a0db33fe 420 $ git status
24c5e187 421 $ git clean -dxf
8c35d285 422
dc0a4df9 423then configure and build perl so that you have a Makefile and porting tools:
8c35d285 424
52a66c2c 425 $ ./Configure -Dusedevel -des && make
8c35d285 426
dc0a4df9 427=head3 update Module::CoreList
8c35d285 428
1bac61bb 429Update C<Module::CoreList> with module version data for the new release.
bfadf2ba 430
6a958a95 431Note that if this is a MAINT release, you should run the following actions
1bac61bb 432from the maint branch, but commit the C<CoreList.pm> changes in
a9d1f3db
LB
433I<blead> and subsequently cherry-pick any releases since the last
434maint release and then your recent commit. XXX need a better example
bfadf2ba 435
a0db33fe 436F<corelist.pl> uses ftp.funet.fi to verify information about dual-lived
bfadf2ba 437modules on CPAN. It can use a full, local CPAN mirror or fall back
e8c01f92
SH
438to C<wget> or C<curl> to fetch only package metadata remotely. (If you're
439on Win32, then installing Cygwin is one way to have commands like C<wget>
440and C<curl> available.)
bfadf2ba
JV
441
442(If you'd prefer to have a full CPAN mirror, see
443http://www.cpan.org/misc/cpan-faq.html#How_mirror_CPAN)
444
a0db33fe 445Then change to your perl checkout, and if necessary,
bfadf2ba 446
595f83ae 447 $ make
bfadf2ba 448
cacc980b 449If this is not the first update for this version (e.g. if it was updated
81fc59ef 450when the version number was originally bumped), first edit
d5bddf6e 451F<dist/Module-CoreList/lib/Module/CoreList.pm> to delete the existing
2ce7d676
RGS
452entries for this version from the C<%released> and C<%version> hashes:
453they will have a key like C<5.010001> for 5.10.1.
52a66c2c
DM
454
455XXX the edit-in-place functionality of Porting/corelist.pl should
456be fixed to handle this automatically.
457
bf8ea215 458Then, If you have a local CPAN mirror, run:
bfadf2ba 459
bfadf2ba
JV
460 $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror
461
462Otherwise, run:
463
bfadf2ba
JV
464 $ ./perl -Ilib Porting/corelist.pl cpan
465
52a66c2c 466This will chug for a while, possibly reporting various warnings about
2a720090 467badly-indexed CPAN modules unrelated to the modules actually in core.
2ce7d676 468Assuming all goes well, it will update
d5bddf6e 469F<dist/Module-CoreList/lib/Module/CoreList.pm>.
bfadf2ba
JV
470
471Check that file over carefully:
472
d5bddf6e 473 $ git diff dist/Module-CoreList/lib/Module/CoreList.pm
bfadf2ba 474
da571fa1
DR
475=head4 Bump C<$Module::CoreList::VERSION>
476
00c28750 477If necessary, bump C<$Module::CoreList::VERSION> (there's no need to do this for
bfadf2ba
JV
478every RC; in RC1, bump the version to a new clean number that will
479appear in the final release, and leave as-is for the later RCs and final).
9709cbd8
FC
480It may also happen that C<Module::CoreList> has been modified in blead, and
481hence has a new version number already. (But make sure it is not the same
482number as a CPAN release.)
bfadf2ba
JV
483
484Edit the version number in the new C<< 'Module::CoreList' => 'X.YZ' >>
485entry, as that is likely to reflect the previous version number.
486
00c28750
DR
487=head4 Bump version in Module::CoreList F<Changes>
488
cb9af4c0
AB
489Also edit Module::CoreList's new version number in its F<Changes>
490file.
e8c01f92 491
00c28750
DR
492=head4 Add Module::CoreList version bump to perldelta
493
70855f8b
FC
494Add a perldelta entry for the new Module::CoreList version.
495
da571fa1
DR
496=for checklist skip RC
497
498=head4 Update C<%Module::CoreList::release> and C<CAVEATS>
499
a0db33fe 500In addition, if this is a final release (rather than a release candidate):
bfadf2ba
JV
501
502=over 4
503
504=item *
505
506Update this version's entry in the C<%released> hash with today's date.
507
508=item *
509
510Make sure that the script has correctly updated the C<CAVEATS> section
511
512=back
513
00c28750
DR
514=head4 Commit Module::CoreList changes
515
bfadf2ba 516Finally, commit the new version of Module::CoreList:
6a958a95 517(unless this is for MAINT; in which case commit it to blead first, then
a0db33fe 518cherry-pick it back).
bfadf2ba 519
770cf6ff 520 $ git commit -m 'Update Module::CoreList for 5.x.y' dist/Module-CoreList/lib/Module/CoreList.pm
bfadf2ba 521
da571fa1 522=for checklist skip RC
dc0a4df9 523
dc0a4df9 524=head3 update perlhist.pod
a0db33fe 525
e8a7a70e 526I<You MUST SKIP this step for a RC release>
a0db33fe 527
e8a7a70e
JV
528Add an entry to F<pod/perlhist.pod> with the release date, e.g.:
529
530 David 5.10.1 2009-Aug-06
a0db33fe
DM
531
532Make sure that the correct pumpking is listed in the left-hand column, and
533if this is the first release under the stewardship of a new pumpking, make
534sure that his or her name is listed in the section entitled
535C<THE KEEPERS OF THE PUMPKIN>.
536
537Be sure to commit your changes:
538
539 $ git commit -m 'add new release to perlhist' pod/perlhist.pod
8c35d285 540
da571fa1 541=for checklist skip BLEAD-POINT
dc0a4df9
DM
542
543=head3 update patchlevel.h
8c35d285 544
6a958a95 545I<You MUST SKIP this step for a BLEAD-POINT release>
d7eb1120 546
a42352ee
DM
547Update F<patchlevel.h> to add a C<-RC1>-or-whatever string; or, if this is
548a final release, remove it. For example:
d7eb1120
DM
549
550 static const char * const local_patches[] = {
551 NULL
552 + ,"RC1"
553 PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */
554
555Be sure to commit your change:
556
557 $ git commit -m 'bump version to RCnnn' patchlevel.h
558
dc0a4df9
DM
559
560=head3 build, test and check a fresh perl
d7eb1120 561
a0db33fe
DM
562Build perl, then make sure it passes its own test suite, and installs:
563
564 $ git clean -xdf
a42352ee
DM
565 $ ./Configure -des -Dprefix=/tmp/perl-5.x.y-pretest
566
567 # or if it's an odd-numbered version:
a0db33fe 568 $ ./Configure -des -Dusedevel -Dprefix=/tmp/perl-5.x.y-pretest
a42352ee 569
a0db33fe
DM
570 $ make test install
571
52a66c2c
DM
572Check that the output of C</tmp/perl-5.x.y-pretest/bin/perl -v> and
573C</tmp/perl-5.x.y-pretest/bin/perl -V> are as expected,
a0db33fe 574especially as regards version numbers, patch and/or RC levels, and @INC
52a66c2c
DM
575paths. Note that as they have been been built from a git working
576directory, they will still identify themselves using git tags and
577commits.
578
579Then delete the temporary installation.
580
dc0a4df9
DM
581
582=head3 push the work so far
52a66c2c 583
a0db33fe
DM
584Push all your recent commits:
585
586 $ git push origin ....
587
96054f12 588
dc0a4df9 589=head3 tag the release
96054f12 590
e8c01f92 591Tag the release (e.g.):
96054f12 592
b6d23947 593 $ git tag v5.11.0 -m "First release of the v5.11 series!"
e8c01f92 594
6a958a95 595It is B<VERY> important that from this point forward, you not push
f662f3b7
JV
596your git changes to the Perl master repository. If anything goes
597wrong before you publish your newly-created tag, you can delete
598and recreate it. Once you push your tag, we're stuck with it
599and you'll need to use a new version number for your release.
600
dc0a4df9
DM
601
602=head3 build the tarball
a0db33fe 603
0dcf3caa 604Before you run the following, you might want to install 7-Zip (the
0dcb816b 605C<p7zip-full> package under Debian or the C<p7zip> port on MacPorts) or
0dcf3caa
LB
606the AdvanceCOMP suite (e.g. the C<advancecomp> package under Debian,
607or the C<advancecomp> port on macports - 7-Zip on Windows is the
608same code as AdvanceCOMP, so Windows users get the smallest files
609first time). These compress about 5% smaller than gzip and bzip2.
610Over the lifetime of your distribution this will save a lot of
611people a small amount of download time and disk space, which adds
612up.
613
8c35d285
JV
614Create a tarball. Use the C<-s> option to specify a suitable suffix for
615the tarball and directory name:
616
617 $ cd root/of/perl/tree
618 $ make distclean
75a012fe
DM
619 $ git clean -xdf # make sure perl and git agree on files
620 $ git status # and there's nothing lying around
8c35d285 621
8c35d285
JV
622 $ perl Porting/makerel -b -s RC1 # for a release candidate
623 $ perl Porting/makerel -b # for a final release
624
625This creates the directory F<../perl-x.y.z-RC1> or similar, copies all
626the MANIFEST files into it, sets the correct permissions on them,
627adds DOS line endings to some, then tars it up as
628F<../perl-x.y.z-RC1.tar.gz>. With C<-b>, it also creates a C<tar.bz2> file.
629
6480287f
MT
630If you're getting your tarball suffixed with -uncommitted and you're sure
631your changes were all committed, you can override the suffix with:
632
633 $ perl Porting/makerel -b -s ''
96054f12 634
8c35d285
JV
635XXX if we go for extra tags and branches stuff, then add the extra details
636here
637
dc0a4df9 638Finally, clean up the temporary directory, e.g.
a42352ee
DM
639
640 $ rm -rf ../perl-x.y.z-RC1
641
dc0a4df9
DM
642
643=head3 test the tarball
644
00c28750 645Once you have a tarball it's time to test the tarball (not the repository).
dc0a4df9 646
00c28750 647=head4 Copy the tarball to a web server
a42352ee 648
8c35d285
JV
649Copy the tarballs (.gz and possibly .bz2) to a web server somewhere you
650have access to.
651
00c28750 652=head4 Download the tarball to another machine
8c35d285
JV
653
654Download the tarball to some other machine. For a release candidate,
655you really want to test your tarball on two or more different platforms
656and architectures. The #p5p IRC channel on irc.perl.org is a good place
657to find willing victims.
658
00c28750 659=head4 Check that F<Configure> works
8c35d285
JV
660
661Check that basic configuration and tests work on each test machine:
662
663 $ ./Configure -des && make all test
f6af4394 664
00c28750 665=head4 Run the test harness and install
f6af4394 666
8c35d285
JV
667Check that the test harness and install work on each test machine:
668
a42352ee 669 $ make distclean
8c35d285 670 $ ./Configure -des -Dprefix=/install/path && make all test_harness install
a42352ee 671 $ cd /install/path
8c35d285 672
00c28750 673=head4 Check C<perl -v> and C<perl -V>
8c35d285
JV
674
675Check that the output of C<perl -v> and C<perl -V> are as expected,
676especially as regards version numbers, patch and/or RC levels, and @INC
677paths.
678
679Note that the results may be different without a F<.git/> directory,
680which is why you should test from the tarball.
681
00c28750 682=head4 Run the Installation Verification Procedure utility
459fc3ca 683
9651cacc 684 $ ./perl utils/perlivp
459fc3ca
DM
685 ...
686 All tests successful.
687 $
688
00c28750 689=head4 Compare the installed paths to the last release
459fc3ca 690
d60a1044
DM
691Compare the pathnames of all installed files with those of the previous
692release (i.e. against the last installed tarball on this branch which you
693have previously verified using this same procedure). In particular, look
694for files in the wrong place, or files no longer included which should be.
695For example, suppose the about-to-be-released version is 5.10.1 and the
696previous is 5.10.0:
697
698 cd installdir-5.10.0/
699 find . -type f | perl -pe's/5\.10\.0/5.10.1/g' | sort > /tmp/f1
700 cd installdir-5.10.1/
701 find . -type f | sort > /tmp/f2
702 diff -u /tmp/f[12]
703
00c28750 704=head4 Test the CPAN client
d60a1044 705
8c35d285
JV
706Bootstrap the CPAN client on the clean install:
707
16c60e4e 708 $ bin/perl -MCPAN -e "shell"
8c35d285 709
16c60e4e
AB
710If you're running this on Win32 you probably also need a set of Unix
711command-line tools available for CPAN to function correctly without
e8c01f92
SH
712Perl alternatives like LWP installed. Cygwin is an obvious choice.)
713
00c28750 714=head4 Install the Inline module and test it
8c35d285 715
a42352ee
DM
716Try installing a popular CPAN module that's reasonably complex and that
717has dependencies; for example:
8c35d285 718
a42352ee
DM
719 CPAN> install Inline
720 CPAN> quit
8c35d285
JV
721
722Check that your perl can run this:
723
16c60e4e 724 $ bin/perl -lwe "use Inline C => q[int f() { return 42;}]; print f"
a42352ee
DM
725 42
726 $
8c35d285 727
00c28750 728=head4 Bootstrap the CPANPLUS client
8c35d285
JV
729
730Bootstrap the CPANPLUS client on the clean install:
731
75a012fe 732 $ bin/cpanp
8c35d285 733
e8c01f92
SH
734(Again, on Win32 you'll need something like Cygwin installed, but make sure
735that you don't end up with its various F<bin/cpan*> programs being found on
736the PATH before those of the Perl that you're trying to test.)
737
00c28750 738=head4 Install the DBI module with CPANPLUS
8c35d285 739
a42352ee
DM
740 CPAN Terminal> i DBI
741 CPAN Terminal> quit
742 $ bin/perl -MDBI -e 1
75a012fe 743 $
8c35d285 744
00c28750 745=head4 Make sure that perlbug works
8c35d285 746
00c28750 747Test L<perlbug> with the following:
47b1f096 748
a14438df 749 $ bin/perlbug
47b1f096
DM
750 ...
751 Subject: test bug report
752 Local perl administrator [yourself]:
753 Editor [vi]:
754 Module:
755 Category [core]:
756 Severity [low]:
757 (edit report)
758 Action (Send/Display/Edit/Subject/Save to File): f
759 Name of file to save message in [perlbug.rep]:
760 Action (Send/Display/Edit/Subject/Save to File): q
761
762and carefully examine the output (in F<perlbug.rep]>), especially
763the "Locally applied patches" section. If everything appears okay, then
75a012fe
DM
764delete the file, and try it again, this time actually submitting the bug
765report. Check that it shows up, then remember to close it!
47b1f096 766
da571fa1 767=for checklist skip BLEAD-POINT
dc0a4df9
DM
768
769=head3 monitor smokes
47b1f096 770
f6af4394
DM
771Wait for the smoke tests to catch up with the commit which this release is
772based on (or at least the last commit of any consequence).
7277a900 773
f6af4394
DM
774Then check that the smoke tests pass (particularly on Win32). If not, go
775back and fix things.
7277a900 776
6a958a95 777Note that for I<BLEAD-POINT> releases this may not be practical. It takes a
1eefd7d5 778long time for the smokers to catch up, especially the Win32
6a958a95
DM
779smokers. This is why we have a RC cycle for I<MAINT> and I<BLEAD-FINAL>
780releases, but for I<BLEAD-POINT> releases sometimes the best you can do is
781to plead with people on IRC to test stuff on their platforms, fire away,
782and then hope for the best.
7277a900 783
dc0a4df9
DM
784
785=head3 upload to PAUSE
7277a900 786
f6af4394 787Once smoking is okay, upload it to PAUSE. This is the point of no return.
db3f805e
JV
788If anything goes wrong after this point, you will need to re-prepare
789a new release with a new minor version or RC number.
790
a14438df
DM
791 https://pause.perl.org/
792
793(Login, then select 'Upload a file to CPAN')
794
45924287
RS
795If your workstation is not connected to a high-bandwidth,
796high-reliability connection to the Internet, you should probably use the
797"GET URL" feature (rather than "HTTP UPLOAD") to have PAUSE retrieve the
798new release from wherever you put it for testers to find it. This will
799eliminate anxious gnashing of teeth while you wait to see if your
80015 megabyte HTTP upload successfully completes across your slow, twitchy
c27b4e97
SH
801cable modem. You can make use of your home directory on dromedary for
802this purpose: F<http://users.perl5.git.perl.org/~USERNAME> maps to
803F</home/USERNAME/public_html>, where F<USERNAME> is your login account
804on dromedary. I<Remember>: if your upload is partially successful, you
805may need to contact a PAUSE administrator or even bump the version of perl.
45924287 806
a42352ee 807Upload both the .gz and .bz2 versions of the tarball.
f6af4394 808
38195a8c
DG
809Do not proceed any further until you are sure that your tarballs are on
810CPAN. Check your authors directory on one of the "fast" CPAN mirrors
b28f69c2 811(e.g., cpan.hexten.net
38195a8c 812or cpan.cpantesters.org) to confirm that your uploads have been successful.
c27b4e97 813
00c28750
DR
814=for checklist skip RC
815
816=head3 wait for indexing
817
76526317
FR
818I<You MUST SKIP this step for RC>
819
820Wait until you receive notification emails from the PAUSE indexer
821confirming that your uploads have been received. IMPORTANT -- you will
822probably get an email that indexing has failed, due to module permissions.
823This is considered normal.
824
dc0a4df9
DM
825
826=head3 publish tag
210de33e 827
f662f3b7 828Now that you've shipped the new perl release to PAUSE, it's
e8c01f92 829time to publish the tag you created earlier to the public git repo (e.g.):
f662f3b7
JV
830
831 $ git push origin tag v5.11.0
f6af4394 832
da571fa1 833=for checklist skip BLEAD-POINT
dc0a4df9
DM
834
835=head3 disarm patchlevel.h
f6af4394 836
6a958a95 837I<You MUST SKIP this step for BLEAD-POINT release>
113f3f4c 838
a42352ee 839Disarm the F<patchlevel.h> change; for example,
d7eb1120
DM
840
841 static const char * const local_patches[] = {
842 NULL
843 - ,"RC1"
844 PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */
845
846Be sure to commit your change:
847
848 $ git commit -m 'disarm RCnnn bump' patchlevel.h
a14438df 849 $ git push origin ....
d7eb1120 850
2e831dfd 851
dc0a4df9
DM
852
853=head3 announce to p5p
2e831dfd 854
db3f805e 855Mail p5p to announce your new release, with a quote you prepared earlier.
f6af4394 856
098d30ef 857Use the template at Porting/release_announcement_template.txt
dc0a4df9
DM
858
859=head3 update epigraphs.pod
f6af4394 860
85531b0a 861Add your quote to F<Porting/epigraphs.pod> and commit it.
606d51b7
Z
862Your release announcement will probably not have reached the web-visible
863archives yet, so you won't be able to include the customary link to the
864release announcement yet.
dc0a4df9 865
b02b3ec7
DR
866=head3 blog about your epigraph
867
868If you have a blog, please consider writing an entry in your blog explaining
869why you chose that particular quote for your epigraph.
870
da571fa1
DR
871=for checklist skip RC
872
dc0a4df9 873=head3 Module::CoreList nagging
85531b0a 874
bc4c40f2 875I<You MUST SKIP this step for RC>
8c35d285 876
75a012fe
DM
877Remind the current maintainer of C<Module::CoreList> to push a new release
878to CPAN.
7277a900 879
da571fa1 880=for checklist skip RC
dc0a4df9
DM
881
882=head3 new perldelta
a2cba4bc 883
bc4c40f2 884I<You MUST SKIP this step for RC>
7277a900 885
bcfe7366 886Create a new perldelta.
5ef3945b 887
bcfe7366 888=over 4
8e967a1c 889
bcfe7366 890=item *
8e967a1c 891
bcfe7366 892Confirm that you have a clean checkout with no local changes.
c5b87fed 893
bcfe7366 894=item *
17163f85 895
bcfe7366 896Run F<Porting/new-perldelta.pl>
8e967a1c 897
bcfe7366 898=item *
17163f85 899
bcfe7366 900Run the C<git add> commands it outputs to add new and modified files.
7277a900 901
bcfe7366 902=item *
7277a900 903
bcfe7366 904Verify that the build still works, by running C<./Configure> and
fd76d40d
SH
905C<make test_porting>. (On Win32, run C<nmake> and
906C<nmake test TEST_FILES="porting\*.t ..\lib\diagnostics.t">.)
17163f85 907
bcfe7366 908=item *
17163f85 909
bcfe7366
NC
910If F<t/porting/podcheck.t> spots errors in the new F<pod/perldelta.pod>,
911run C<./perl -MTestInit t/porting/podcheck.t | less> for more detail.
912Skip to the end of its test output to see the options it offers you.
57433fbf 913
bcfe7366 914=item *
75a012fe 915
bcfe7366 916When C<make test_porting> passes, commit the new perldelta.
75a012fe 917
bcfe7366 918=back
75a012fe 919
21768cb3 920At this point you may want to compare the commit with a previous bump to
fd76d40d 921see if they look similar. See commit e3c71926d3 for an example of a
75a012fe 922previous version bump.
57433fbf 923
da571fa1 924=for checklist skip BLEAD-POINT MAINT RC
dc0a4df9
DM
925
926=head3 bump version
57433fbf 927
6a958a95 928I<You MUST SKIP this step for RC, BLEAD-POINT, MAINT>
dc0a62a1 929
6a958a95
DM
930If this was a BLEAD-FINAL release (i.e. the first release of a new maint
931series, 5.x.0 where x is even), then bump the version in the blead branch
932in git, e.g. 5.12.0 to 5.13.0.
17163f85 933
6d5e92cd
FC
934First, add a new feature bundle to F<regen/feature.pl>, initially by just
935copying the exiting entry, and bump the file's $VERSION (after the __END__
936marker); e.g.
17163f85
DM
937
938 "5.14" => [qw(switch say state unicode_strings)],
939 + "5.15" => [qw(switch say state unicode_strings)],
addebd58 940
57fef7cc
FC
941Run F<regen/feature.pl> to propagate the changes to F<lib/feature.pm>.
942
dc0a4df9
DM
943Then follow the section L<"Bump the version number"> to bump the version
944in the remaining files and test and commit.
17163f85 945
17163f85 946
d5c37431
NC
947=head3 clean build and test
948
949Run a clean build and test to make sure nothing obvious is broken.
950
951In particular, F<Porting/perldelta_template.pod> is intentionally exempted
952from podchecker tests, to avoid false positives about placeholder text.
953However, once it's copied to F<pod/perldelta.pod> the contents can now
ef4474b5
KW
954cause test failures. Problems should resolved by doing one of the
955following:
956
957=over
958
959=item 1
960
961Replace placeholder text with correct text.
962
963=item 2
964
965If the problem is from a broken placeholder link, you can add it to the
966array C<@perldelta_ignore_links> in F<t/porting/podcheck.t>. Lines
967containing such links should be marked with C<XXX> so that they get
968cleaned up before the next release.
969
970=item 3
971
972Following the instructions output by F<t/porting/podcheck.t> on how to
973update its exceptions database.
974
975=back
d5c37431 976
dc0a4df9
DM
977=head3 push commits
978
979Finally, push any commits done above.
980
981 $ git push origin ....
982
da571fa1 983=for checklist skip BLEAD-POINT MAINT RC
dc0a4df9
DM
984
985=head3 create maint branch
17163f85 986
6a958a95 987I<You MUST SKIP this step for RC, BLEAD-POINT, MAINT>
17163f85 988
6a958a95
DM
989If this was a BLEAD-FINAL release (i.e. the first release of a new maint
990series, 5.x.0 where x is even), then create a new maint branch based on
991the commit tagged as the current release.
7277a900 992
233ca920
JV
993Assuming you're using git 1.7.x or newer:
994
17163f85 995 $ git checkout -b maint-5.12 v5.12.0
233ca920 996 $ git push origin -u maint-5.12
addebd58 997
dc0a4df9 998
da571fa1
DR
999=for checklist skip BLEAD-POINT MAINT RC
1000
d5722260
DK
1001=head3 make the maint branch available in the APC
1002
1003Clone the new branch into /srv/gitcommon/branches on camel so the APC will
1004receive its changes.
1005
07697565 1006 $ git clone --branch maint-5.14 /gitroot/perl.git \
d5722260 1007 ? /srv/gitcommon/branches/perl-5.14.x
07697565 1008 $ chmod -R g=u /srv/gitcommon/branches/perl-5.14.x
d5722260
DK
1009
1010And nag the sysadmins to make this directory available via rsync.
1011
da571fa1 1012=for checklist skip BLEAD-POINT RC
d5722260 1013
dc0a4df9 1014=head3 copy perldelta.pod to other branches
addebd58 1015
6a958a95 1016I<You MUST SKIP this step for RC, BLEAD-POINT>
8c35d285 1017
c5b87fed 1018Copy the perldelta.pod for this release into the other branches; for
75a012fe 1019example:
7277a900 1020
c5b87fed 1021 $ cp -i ../5.10.x/pod/perldelta.pod pod/perl5101delta.pod # for example
75a012fe
DM
1022 $ git add pod/perl5101delta.pod
1023
0aef0fe5 1024Edit F<pod/perl.pod> to add an entry for the file, e.g.:
75a012fe
DM
1025
1026 perl5101delta Perl changes in version 5.10.1
bc4c40f2 1027
75a012fe 1028Then rebuild various files:
7277a900 1029
75a012fe
DM
1030 $ perl pod/buildtoc --build-all
1031
1032Finally, commit:
1033
1034 $ git commit -a -m 'add perlXXXdelta'
7277a900 1035
dc0a4df9
DM
1036
1037=head3 update perlhist.pod in other branches
7277a900 1038
f6af4394 1039Make sure any recent F<pod/perlhist.pod> entries are copied to
e8a7a70e 1040F<perlhist.pod> on other branches
f6af4394 1041e.g.
7277a900 1042
f6af4394 1043 5.8.9 2008-Dec-14
7277a900 1044
dc0a4df9
DM
1045
1046=head3 bump RT version number
6e40fbf9 1047
7c139051
DR
1048Log into http://rt.perl.org/ and check whether the new version is in the RT
1049fields C<Perl Version> and C<Fixed In>. The easiest way to determine this is
1050to go to L<https://rt.perl.org/rt3/Search/Build.html> and click on the drop
1051downs next to the C<Perl Version> and C<Fixed In> labels.
1052
1053If the new version is not listed there, send an email to C<perlbug-admin at
1054perl.org> requesting this.
dc0a4df9
DM
1055
1056=head3 Relax!
a3738a12 1057
bc4c40f2
JV
1058I<You MUST RETIRE to your preferred PUB, CAFE or SEASIDE VILLA for some
1059much-needed rest and relaxation>.
8c35d285
JV
1060
1061Thanks for releasing perl!
1062
7277a900 1063
b28f69c2
Z
1064=head2 Building a release - the day after
1065
606d51b7
Z
1066=head3 link announcement in epigraphs.pod
1067
1068Add, to your quote to F<Porting/epigraphs.pod>, a link to the release
1069announcement in the web-visible mailing list archive. Commit it.
1070
dc0a4df9
DM
1071=head3 check tarball availability
1072
1073Check various website entries to make sure the that tarball has appeared
1074and is properly indexed:
1075
b28f69c2
Z
1076=over 4
1077
1078=item *
1079
98df743a
Z
1080Check your author directory under L<http://www.cpan.org/authors/id/>
1081to ensure that the tarballs are available on the website.
b28f69c2
Z
1082
1083=item *
1084
98df743a
Z
1085Check C</src> on CPAN (on a fast mirror) to ensure that links to
1086the new tarballs have appeared. There should be links in C</src/5.0>
1087(which is accumulating all new versions), links in C</src> (which shows
1088only the latest version on each branch), and an appropriate mention in
1089C</src/README.html> (which describes the latest versions).
1090
1091These links should appear automatically, some hours after upload.
1092If they don't, or the C<README.html> description is inadequate,
1093ask Ask <ask@perl.org>.
b28f69c2
Z
1094
1095=item *
1096
98df743a
Z
1097Check L<http://www.cpan.org/src/> to ensure that the C</src> updates
1098have been correctly mirrored to the website.
1099If they haven't, ask Ask <ask@perl.org>.
1100
1101=item *
b28f69c2 1102
98df743a
Z
1103Check L<http://search.cpan.org> to see if it has indexed the distribution.
1104It should be visible at a URL like C<http://search.cpan.org/dist/perl-5.10.1/>.
b28f69c2 1105
dc0a4df9 1106=back
b28f69c2 1107
e7b51df1 1108=for checklist skip RC
dc0a4df9
DM
1109
1110=head3 update dev.perl.org
1111
e7b51df1 1112I<You MUST SKIP this step for a RC release>
98df743a 1113
493620de
DR
1114Ask Leo Lapworth to update the front page of L<http://dev.perl.org/perl5/> to
1115link to this new release. If you're feeling ambitious, you can fork
1116L<https://github.com/perlorg/perlweb> and edit the
1117F<docs/dev/perl5/index.html> file, then make a pull request.
b28f69c2 1118
da571fa1 1119=for checklist end
b28f69c2 1120
7277a900
GS
1121=head1 SOURCE
1122
f6af4394
DM
1123Based on
1124http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2009-05/msg00608.html,
1125plus a whole bunch of other sources, including private correspondence.
7277a900
GS
1126
1127=cut
1128