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