add -b option to makerel to make a .bz2 file
[p5sagit/p5-mst-13.2.git] / Porting / release_managers_guide.pod
CommitLineData
7277a900 1
2=head1 NAME
3
4release_managers_guide - Releasing a new version of perl 5.x
5
636a1918 6XXX as of Jul 2009, this file is still a work-in-progress. I think it
7contains all the actions needed to build a release, but things may have
8got skipped, and some things could do with polishing. Note that things
9change each release, there may be new things not covered here, or
10tools may need updating. DAPM
f6af4394 11
7277a900 12=head1 SYNOPSIS
13
f6af4394 14This document describes the series of tasks required - some automatic, some
15manual - to produce a perl release of some description, be that a snaphot,
16release candidate, or final release.
17
7277a900 18The release process is primarily executed by the current pumpking.
19
1aff5354 20This document both helps as a check-list for the pumpking and is
7277a900 21a base for ideas on how the various tasks could be automated or
22distributed.
23
636a1918 24The outline of a typical release cycle is as follows:
f6af4394 25
636a1918 26 (5.10.1 is released, and post-release actions have been done)
f6af4394 27
28 ...time passes...
29
30 an occasional snapshot is released, that still identifies itself as
31 5.10.1
32
33 ...time passes...
34
35 a few weeks before the release, a number of steps are performed,
36 including bumping the version to 5.10.2
636a1918 37
38 ...a few weeks passes...
f6af4394 39
40 perl-5.10.2-RC1 is released
41
42 perl-5.10.2 is released
43
44 post-release actions are performed, including creating new
45 perl5103delta.pod
46
47 ... the cycle continues ...
7277a900 48
49=head1 DETAILS
50
7277a900 51
f6af4394 52=head2 Building a snapshot
53
54A snapshot is intended to encourage in-depth testing from time-to-time,
55for example after a key point in the stabilisation of a branch. It
56requires less steps than a full release, and the version number of perl in
57the tarball will usually still be the old one.
58
59=over 4
60
61=item *
62
63As there are no regular smokes [ XXX yet - please fix?] find out about the
64state of VMS. If it's bad, think again.
65
66=item *
67
68Rebuild META.yml:
69
70 $ rm META.yml
71 $ make META.yml
72
73and commit it if it's changed.
74
75=item *
76
77Check that the manifest is sorted and correct:
78
79 $ make distclean
80 $ perl Porting/manisort
81 $ perl Porting/manicheck
82
83=item *
84
85If this is a release candidate or final release, add an entry to
86F<pod/perlhist.pod> with the current date, e.g.
87
88 5.8.9-RC1 2008-Nov-10
89
ce4f4fe2 90Make sure the correct pumpking is listed, and if this is your first time,
f6af4394 91append your name to C<THE KEEPERS OF THE PUMPKIN>.
92
93=item *
94
95Build perl, then make sure it passes its own test suite, and installs.
96
97=item *
98
99Create a tarball. Use the C<-s> option to specify a suitable suffix for
100the tarball and directory name:
101
102 $ cd root/of/perl/tree
103 $ git clean -xdf # make sure perl and git agree on files
104
85bdf03b 105 $ perl Porting/makerel -b -s `git describe` # for a snapshot
106 $ perl Porting/makerel -b -s RC1 # for a release candidate
107 $ perl Porting/makerel -b # for a final release
f6af4394 108
109This creates the directory F<../perl-x.y.z-RC1> or similar, copies all
110the MANIFEST files into it, sets the correct permissions on them,
111adds DOS line endings to some, then tars it up as
85bdf03b 112F<../perl-x.y.z-RC1.tar.gz>. With C<-b>, it also creates a C<tar.bz2> file.
f6af4394 113
114XXX if we go for extra tags and branches stuff, then add the extra details
115here
116
117=item *
118
85bdf03b 119Copy the tarballs (.gz and possibly .bz2) to a web server somewhere you
120have access to.
f6af4394 121
122=item *
123
85bdf03b 124Download the tarball to some other machine (for a release candidate, to
125two or more servers: IRC is good for this).
f6af4394 126
127=item *
128
129Check that C<./Configure -des && make all test> works in one place.
130
131=item *
132
133Check that C<./Configure ... && make all test_harness install> works.
134
135=item *
136
137Check that the output of C<perl -v> and C<perl -V> are as expected,
138especially as regards version numbers, patch and/or RC levels, and @INC
139paths. Note that the results may be different without a F<.git/> directory,
140which is why you should test from the tarball.
141
142=item *
143
144Bootstrap the CPAN client on the clean install.
145
146=item *
147
148Install CPANPLUS.
149XXX pick something new; this is now bundled
150
151=item *
152
153Bootstrap the CPANPLUS client.
154
155=item *
156
157Install an XS module.
158
159=item *
160
85bdf03b 161If all is well, announce the snapshot to p5p. (For a release candidate,
f6af4394 162instead follow the further steps described later.)
163
164=back
165
166=head2 Actions prior to the first release candidate
167
168A week or two before the first release candidate, there are some additional
169tasks you should perform (actually, some of these should be done regularly
170anyway, but they definitely need doing now):
7277a900 171
172=over 4
173
f6af4394 174=item *
175
176Check F<Maintainers.pl> for consistency; both these commands should
177produce no output:
178
179 perl Porting/Maintainers --checkmani
180 perl Porting/Maintainers --checkmani lib/ ext/
181
182=item *
183
184Ensure that dual-life CPAN modules are synchronised with CPAN. Basically,
185run the following:
186
187 ./perl -Ilib Porting/core-cpan-diff -a -o /tmp/corediffs
7277a900 188
f6af4394 189to see any inconsistencies between the core and CPAN versions of distros,
190then fix the core, or cajole CPAN authors as appropriate. See also the
191C<-d> and C<-v> options for more detail. You'll probably want to use the
192C<-c cachedir> option to avoid repeated CPAN downloads.
7277a900 193
f6af4394 194To see which core distro versions differ from the current CPAN versions:
7277a900 195
f6af4394 196 ./perl -Ilib Porting/core-cpan-diff -x -a
7277a900 197
636a1918 198if you are making a maint release, run C<core-cpan-diff> on both blead and
199maint, then diff the two outputs. Compare this with what you expect, and if
200necessary, fix things up. For example, you might think that both blead
201and maint are synchronised with a particular CPAN module, but one might
202have some extra changes.
203
f6af4394 204=item *
7277a900 205
f6af4394 206Ensure dual-life CPAN modules are stable, which comes down to:
7277a900 207
208 for each module that fails its regression tests on $current
f6af4394 209 did it fail identically on $previous?
210 if yes, "SEP" (Somebody Else's Problem)
211 else work out why it failed (a bisect is useful for this)
7277a900 212
213 attempt to group failure causes
214
215 for each failure cause
f6af4394 216 is that a regression?
217 if yes, figure out how to fix it
218 (more code? revert the code that broke it)
219 else
220 (presumably) it's relying on something un-or-under-documented
221 should the existing behaviour stay?
222 yes - goto "regression"
223 no - note it in perldelta as a significant bugfix
224 (also, try to inform the module's author)
1aff5354 225
f6af4394 226=item *
7277a900 227
f6af4394 228Similarly, monitor the smoking of core tests, and try to fix.
7277a900 229
f6af4394 230=item *
7277a900 231
636a1918 232Similarly, monitor the smoking of perl for compiler warnings, and try to
233fix.
234
235=item *
236
f6af4394 237Run F<Porting/cmpVERSION.pl> to compare the current source tree with the
238previous version to check for for modules that have identical version
239numbers but different contents, e.g.:
7277a900 240
f6af4394 241 $ cd ~/some-perl-root
242 $ ./perl -Ilib Porting/cmpVERSION.pl -xd ~/my_perl-tarballs/perl-5.10.0 .
243
244then bump the version numbers of any non-dual-life modules that have
245changed since the previous release, but which still have the old version
246number. If there is more than one maintenance branch (e.g. 5.8.x, 5.10.x),
247then compare against both.
248
249Note that some of the files listed may be generated (e.g. copied from ext/
250to lib/, or a script like lib/lib_pm.PL is run to produce lib/lib.pm);
251make sure you edit the correct file!
252
253Once all version numbers have been bumped, re-run the checks.
254
255Then run again without the -x option, to check that dual-life modules are
256also sensible.
257
258
259=item *
260
261Get perldelta in a mostly finished state.
636a1918 262Peruse F<Porting/how_to_write_a_perldelta.pod>, and try to make sure that
263every section it lists is, if necessary, populated and complete. Copy
264edit the whole document.
f6af4394 265
266=item *
267
268Bump the perl version number (e.g. from 5.10.0 to 5.10.1).
269
270There is a tool to semi-automate this process. It works in two stages.
271First, it generates a list of suggested changes, which you review and
272edit; then you feed this list back and it applies the edits. So, first
273scan the source dir looking for likely candidates:
274
275 $ Porting/bump-perl-version -s 5.10.0 5.10.1 > /tmp/scan
276
277This produces a file containing a list of suggested edits, eg:
278
279 NetWare/Makefile
280
281 89: -MODULE_DESC = "Perl 5.10.0 for NetWare"
282 +MODULE_DESC = "Perl 5.10.1 for NetWare"
283
284i.e. in the file F<NetWare/Makefile>, line 89 would be changed as shown.
285Review the file carefully, and delete any -/+ line pairs that you don't
286want changing. Remember that this tool is largely just grepping for '5.10.0'
287or whatever, so it will generate false positives. Be careful not change
288text like "this was fixed in 5.10.0"! Then run:
289
290 $ Porting/bump-perl-version -u < /tmp/scan
291
292which will update all the files shown; then commit the changes.
293
294Be particularly careful with F<INSTALL>, which contains a mixture of
295C<5.10.0>-type strings, some of which need bumping on every release, and
296some of which need to be left. Also note that this tool currently only
297performs a single change per line, so in particular, this line in
298README.vms needs special handling:
299
300 rename perl-5^.10^.1.dir perl-5_10_1.dir
7277a900 301
dc0a62a1 302
303=item *
304
305Review and update INSTALL to account for the change in version number;
306in particular, the "Coexistence with earlier versions of perl 5" section.
307
f6af4394 308=item *
7277a900 309
f6af4394 310Update the F<Changes> file to contain the git log command which would show
311all the changes in this release. You will need assume the existence of a
312not-yet created tag for the forthcoming release; e.g.
7277a900 313
f6af4394 314 git log ... perl-5.10.0..perl5.12.0
7277a900 315
f6af4394 316Due to warts in the perforce-to-git migration, some branches require extra
317exclusions to avoid other branches being pulled in. Make sure you have the
318correct incantation: replace the not-yet-created tag with C<HEAD> and see
319if git log produces roughly the right number of commits across roughly the
320right time period.
7277a900 321
dc0a62a1 322
f6af4394 323=item *
7277a900 324
f6af4394 325Check some more build configurations, e.g.
7277a900 326
f6af4394 327 -Duseshrplib -Dd_dosuid
328 make suidperl
7277a900 329
f6af4394 330Check that setuid installs works (for < 5.11.0 only).
331XXX any other configs?
7277a900 332
f6af4394 333=item *
7277a900 334
f6af4394 335Make sure you have a PAUSE account suitable for uploading a perl release.
336If you don't have a PAUSE account, then request one:
7277a900 337
f6af4394 338 https://pause.perl.org/pause/query?ACTION=request_id
7277a900 339
f6af4394 340Check that your account is allowed to upload perl distros: goto
341https://pause.perl.org/, login, then select 'upload file to CPAN'; there
342should be a "For pumpkings only: Send a CC" tickbox. If not, ask Andreas
343to add your ID to the list of people allowed to upload something called
344perl.
7277a900 345
f6af4394 346=item *
7277a900 347
f6af4394 348Update F<AUTHORS>, using the C<Porting/checkAUTHORS.pl> script, and if
349necessary, update the script to include new alias mappings.
7277a900 350
f6af4394 351XXX This script is currently broken (7/2009). It needs updating to work
352with git and a lack of Changes files.
353
354=back
355
356=head2 Building a release candidate
357
358(At this point you should already have performed the actions described in
dc0a62a1 359L</"Actions prior to the first release candidate">.) You should review
360that section to ensure that everything there has done, and to see whether
361any of those actions (such as consistency checks) need to be repeated.
f6af4394 362
363=over 4
364
365=item *
366
367Re-read the perldelta to try to find any embarrassing typos and thinkos;
368remove any C<TODO> or C<XXX> flags; and run through pod and spell
636a1918 369checkers, e.g.
370
371 podchecker -warnings -warnings pod/perl5101delta.pod
372 spell pod/perl5101delta.pod
f6af4394 373
374=item *
375
376Update patchlevel.h to add a C<-RC1>-or-whatever string; or, if this is a
377final release, remove it. [ XXX how now?? see 34813 for old way ]
378
379=item *
380
381Update C<Module::Corelist>.
210de33e 382
ce4f4fe2 383Note that if this is a maint release, you should run the following actions
210de33e 384from the maint directory, but edit the C<Corelist.pm> in I<blead> and
385subsequently cherry-pick it.
386
387First, in order to update the C<%upstream> and C<%bug_tracker> hashes,
388the C<Porting/corelist.pl> script requires you to have a local CPAN
389mirror. See http://www.cpan.org/misc/cpan-faq.html#How_mirror_CPAN for
390more details, but basically:
391
392 $ mkdir ~/cpan-mirror
393 $ rsync -av --delete ftp.funet.fi::CPAN ~/cpan-mirror/
394
395(and re-run the rsync each time you need it to be up-to-date).
396[XXX this really needs fixing to not require a whole CPAN mirror]
397
398If necessary, bump C<$VERSION> (there's no need to do this for
399every RC; in RC1, bump the version to a new clean number that will
400appear in the final release, and leave as-is for the later RCs and final).
401
402Then do
403
404 $ cd ~/perl/root; make perl
405 $ ./perl -Ilib Porting/corelist.pl ~/cpan-mirror/ > /tmp/corelist
406
407This creates a file that looks something like
408
409 5.010001 => {
410 'AnyDBM_File' => '1.00',
411 ...
412 },
413
414 %upstream = (
415 'App::Prove' => undef,
416 ...
417 );
418
419 %bug_tracker = (
420 'App::Prove' => 'http://rt.cpan.org/...',
421 ...
422 );
423
210de33e 424Cut and paste these tables into F<lib/Module/CoreList.pm>: the module
425version list should be appended as the last entry in the C<%version> hash
426(or replaced, if we've already added it for an earlier release candidate),
427while the existing C<%upstream> and C<%bug_tracker> hashes should be
428replaced with the new versions.
429
ce4f4fe2 430Edit the version number in the new C<< 'Module::CoreList' => 'X.YZ' >>
210de33e 431entry, as that is likely to reflect the previous version number.
432
433Then, add the current perl version to the C<CAVEATS> paragraph.
434
435Add or update an entry to the C<%released> hash, including today's date
436(if this is just a release candidate, set the date to '????-??-??').
437
7277a900 438
f6af4394 439=item *
440
441Follow the instructions in the section L</"Building a snapshot">, then
442carry on with the extra steps that follow here.
443
444=item *
7277a900 445
addebd58 446Disarm the patchlevel.h change [ XXX expand ]
447
448=item *
449
f6af4394 450Wait for the smoke tests to catch up with the commit which this release is
451based on (or at least the last commit of any consequence).
7277a900 452
f6af4394 453Then check that the smoke tests pass (particularly on Win32). If not, go
454back and fix things.
7277a900 455
7277a900 456
f6af4394 457=item *
7277a900 458
f6af4394 459Once smoking is okay, upload it to PAUSE. This is the point of no return.
addebd58 460You may wish to create a .bz2 version of the tarball and upload that too.
f6af4394 461
210de33e 462=item *
463
464create a tag [XXX and branches and stuff ????], e.g.:
465
466 $ git tag perl-5.10.1-RC1 -m'Release Candidate 1 of Perl 5.10.1'
467 $ git push origin tag perl-5.10.1-RC1
f6af4394 468
469=item *
470
471Mail p5p to announce it, with a quote you prepared earlier.
472
473=item *
474
475Wait 24 hours or so, then post the announcement to use.perl.org.
addebd58 476(if you don't have access rights to post news, ask someone like Rafael to
477do it for you.)
f6af4394 478
479=back
480
481
482=head2 Making a final release
483
484At this point you should have a working release candidate with few or no
485changes since.
486
487It's essentially the same procedure as for making a release candidate, but
488with a whole bunch of extra post-release steps.
489
490=over 4
7277a900 491
f6af4394 492=item *
7277a900 493
f6af4394 494Follow the same steps as for making a release candidate, then
7277a900 495
f6af4394 496=item *
7277a900 497
f6af4394 498Ask Jarkko to update http://www.cpan.org/src/README.html and
499Rafael to update http://dev.perl.org/perl5/
7277a900 500
f6af4394 501=item *
7277a900 502
f6af4394 503Create a new empty perlNNNdelta.pod file for the current release + 1;
504see F<Porting/how_to_write_a_perldelta.pod>.
505[ XXX Perhaps we should have an empty template file we can copy in. ]
7277a900 506
a2cba4bc 507In addition, edit F<pod.lst>, adding the new entry as 'D', and unmark previous
508entry as 'D', then run C<perl pod/buildtoc --build-all> to update the
509following files:
7277a900 510
f6af4394 511 MANIFEST
f6af4394 512 pod/perl.pod
a2cba4bc 513 win32/pod.mak
514 vms/descrip_mms.template
515
516(F<vms/descrip_mms.template> still needs a manual edit to bump the
517C<perldelta.pod> entry - it would be good for someone to figure out the fix.)
7277a900 518
f6af4394 519and change perlNNNdelta references to the new version in these files
7277a900 520
f6af4394 521 INSTALL
522 win32/Makefile.mk
523 win32/Makefile
524 Makefile.SH
525 README
7277a900 526
f6af4394 527Also, edit the previous delta file to change the C<NAME> from C<perldelta>
528to C<perlNNNdelta>.
7277a900 529
f6af4394 530These two lists of files probably aren't exhaustive; do a recursive grep
531on the previous filename to look for suitable candidates.
7277a900 532
f6af4394 533(see 16410843ea for an example).
7277a900 534
f6af4394 535=item *
7277a900 536
dc0a62a1 537If this was a maintenance release, then edit F<Porting/mergelog> to change
538all the C<d> (deferred) flags to C<.> (needs review).
539
540
541=item *
542
addebd58 543If this was a major release, then
544
545=over
546
547=item *
548
549bump the version, e.g. 5.12.0 to 5.13.0;
550
551=item *
552
553[ XXX probably lots more stuff to do, including perldelta,
f6af4394 554C<lib/feature.pm> ]
7277a900 555
f6af4394 556=item *
7277a900 557
addebd58 558Create a new maint branch with an empty Porting/mergelog file
559[ XXX and lots of other stuff too, probably ]
560
561=back
562
563=item *
564
f6af4394 565Copy the perlNNNdelta.pod for this release into the other branches, and
566remember to update these files on those branches too:
7277a900 567
f6af4394 568 MANIFEST
569 pod.lst
570 pod/perl.pod
571 vms/descrip_mms.template
572 win32/pod.mak
7277a900 573
f6af4394 574(see fc5be80860 for an example).
7277a900 575
f6af4394 576=item *
7277a900 577
f6af4394 578Make sure any recent F<pod/perlhist.pod> entries are copied to
579F<perlhist.pod> on other branches; typically the RC* and final entries,
580e.g.
7277a900 581
f6af4394 582 5.8.9-RC1 2008-Nov-10
583 5.8.9-RC2 2008-Dec-06
584 5.8.9 2008-Dec-14
7277a900 585
6e40fbf9 586=item *
587
588Remind the current maintainer of C<Module::CoreList> to push a new release
589to CPAN.
590
7277a900 591=back
592
593=head1 SOURCE
594
f6af4394 595Based on
596http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2009-05/msg00608.html,
597plus a whole bunch of other sources, including private correspondence.
7277a900 598
599=cut
600