=encoding UTF-8 =head1 release_guide.pod - guide to Rakudo releases Rakudo’s development release cycle is the third Saturday of each month. Each development release is given a sequential number and a name based on the release year and month. Older releases had code names based on an active Perl Mongers group. For releases made so far, see the list of development releases at the end of this document. =head2 Planned future releases Note that we are trying very hard to ensure there are no backward compatibility issues post version 6.c. As such, we may end up delaying some releases to ensure any compatibility issues are resolved. 2023-11-21 Rakudo #166 (jdv) (More planned dates can be generated with F). =head2 Steps to create a release (for release managers) Currently there are two tools: =over =item * L which is meant to be used together with L bot =item * L bot =back Some things are hard to automate, and you have to understand what is (and what is not) done by the tool you are using, so read on. =over 4 =item 1. Once a week or on-demand run the L to check regressions in the ecosystem modules. First, bump MoarVM and NQP if necessary. To do so you can either use a very helpful L or obtain actual values using `git describe` in appropriate repo and edit the MOAR_REVISION and NQP_REVISION files. Given you have a Blin image built and ready, run it to get results. Don't forget to remove previous results with sudo rm -rf /var/tmp/Blin-volume/ On a machine with 12-16 cores Ryzen CPU and SSD it usually takes about 2 hours to test the ecosystem. Note you need at least 32 GB of RAM for this. When the results are here, a file C is generated in the C directory. Carefully read what modules are there and manually check them for false positives. Possible false positives are: * Modules related to async sometimes have flapping tests, such as C etc. * The C module If the module installs fine on the latest Rakudo built from HEAD and failed on Blin it is likely not necessary to report it, when in doubt ask. If the module has weird failure mode (MoarVM oops, a segfault etc) then it's a good idea to report it anyway, if it fails more times than installs it's a good idea to report it too. Modify the C report to remove false positives and post it as a new Rakudo blocker ticket. Generally, any kind of breakage in modules is unwanted, but there are exceptions. Submit Pull Requests to anything that is affected and file rakudo tickets for all unwanted changes in Rakudo behavior. =over 4 =item 2. A few days before the Rakudo release, it’s a good idea to... =item * Remind people of the upcoming release, invite people to update the L or do it yourself, etc. Note that the ChangeLog is kept on the wiki so that people can easily do minor corrections, but for the release it has to be moved into C. =item * Check if any DEPRECATED code needs to be removed because the end of the deprecation cycle is reached. One way of doing this, is to grep on the YYYYMM of the release (e.g. 201412 for the 2014.12 release). If you find any occurrences, remove the code and make sure the spectest is still ok. =item * Review the issue tracker for tickets that might need resolving prior to the release, addressing them as needed. “Tickets that need resolving” is left to your discretion. Any problem that has a large impact on users is worth addressing either as a fix or as prominent documentation (the README and/or the release announcement). =item * B, especially the day before the release. Otherwise issues with MoarVM/NQP might go unnoticed for too long. =item * If it’s a month relatively early in the calendar year, double-check that the copyright date in the README file includes the current year. (It’s not necessary to update copyright dates in other files, unless you know that a given file has been modified in a year not reflected by the file’s copyright notice.) =item * If the release is nearing and you see that the state of Rakudo on HEAD is inherently unstable (less stable than the previous release, or worse than the previous release for other reasons), assess your options. Even though rakudo releases are scheduled for every month, it doesn't necessarily mean that there I be a release every month. Cancelling the release is an option. However, see if anything else can be done, like if offending commits can be reverted, or if you can make a release from an earlier state (e.g. previous release + some commits + cherry-picked important fixes). =back =item 3. Update Rakudo’s leap-second tables: perl tools/update-tai-utc.pl If a new leap second has been announced, F will be modified, so commit the new version. B be sure to double check the modifications are correct before committing. git commit src But probably there won’t be any new leap seconds, in which case the file will be unchanged. B: this program requires the perl modules L, L and L to be installed. =item 4. As the actual release date nears, use the `releasable6` IRC bot to prepare a ChangeLog. The bot resides in the C<#raku-dev> channel, call it as C to obtain a report with commits you need to log. Do not commit directly to Rakudo, but instead modify the wiki page with a draft. Ensure you have a proper list of "ignored" commits, such as merge commits, tiny ones, reverts etc. Later you will list them in a specific format in the commit message for the release bot to understand that some commits were not logged and there is no need to notify about them. As for the format, refer to previous release commits to get an inspiration of how it is done. =item 5. =item * When it’s time to cut the release, checkout a new release branch. =item * Update the release dates and names at the bottom of this file (F). Also improve these instructions if you find any steps that are missing. =item * Create a draft release announcement in docs/announce/YYYY.MM.md in markdown format. There is a helper script C that will create a basic release announcement for you based on the state of the repository and the current date. Feel free to use it to save yourself some time, but please look over its output if you decide to use it: raku tools/create-release-announcement.raku > docs/announce/YYYY.MM.md git add docs/announce/YYYY.MM.md git commit docs Ensure dates of current and next releases are correct. =item * Sometimes you need to call the contributors script and re-generate the announcement to ensure all contributors are mentioned: raku tools/contributors.raku Ensure you have all supporting repositories checked out, before running (this can be achieved by building rakudo and running a spectest). Please check the result manually for duplicates and other errors. =item 6. Ensure that a monthly MoarVM release has been completed. It is usually done by the Rakudo release manager, so good luck. Make sure that MoarVM builds on Windows and CI for MoarVM is green. It is also a good idea to look for JVM issues at this point. =item 7. While it is possible to make a release by hands, nowadays most steps are handled using the C script. Ensure you have a working Raku with C module installed, go to the directory to do a release: cd rakudo/tools/releasable While there is a single task in the script doing all the release process, it is generally a much better practice to run it step by step. =item * Prepare environment variables for the invocation, for example: TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main This means that: - Version of the release made will be set to be 2021.10 - Version of the MoarVM used will be set to be 2021.10 - Other than C<6.c> and C<6.d> errata roast branches it will be tested against master branch of roast - Branch to get Rakudo from is C - NQP branch is set to C
Be very careful and ensure all variables are spelled properly as it affects what branches will be used to push commits to =item 8. Execute Akefile stages one by one, with appropriate env variable values: =item * TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake clean TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake human-1 This will clone all appropriate repos, bump and tag for the NQP release. =item * TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake nqp This will create an NQP release. =item * TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake human-2 This will sign NQP and do bumps for Rakudo release. =item * Next step is related to Rakudo, which has more complicated process than NQP, so it recommended to run stages separately: TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake rakudo-build TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake rakudo-test TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake rakudo-inline-perl5 TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake rakudo-stress Next step is testing on errata branches. Tests here can fail in case when Rakudo behavior was changed and it affected roast, so the developer updated roast master branch, but the errata branch still checks for old behavior. TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake rakudo-stress-errata If the tests are failing, note which ones do, and investigate if there were changes to the files recently. If yes, you have to cherry-pick or port the changes to the errata branch so that in the end tests pass on errata branches. =item * Once this is done, create the artifact and test it afterwards. TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake rakudo-archive TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake rakudo-extract TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake rakudo-post-build TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake rakudo-post-test You can look at the resulting artifact unpacked in the C directory, run C and ensure mentioned version is correct. =item * If everything looks correct, tag and sign the release: TEST_JOBS=24 VERSION=2021.10 VERSION_MOAR=2021.10 BRANCH_ROAST=master BRANCH_RAKUDO=release-2021.10 BRANCH_NQP=main ake human-3 =item * There is a C target to push all the commits to NQP and Rakudo repos, it also includes uploading tarballs, but this is usually done manually: scp -P 2222 nqp/nqp-2021.10.tar.gz nqp/nqp-2021.10.tar.gz.asc rakudo.org@lavm-perl6infra-1.atikon.io:public_html/downloads/nqp scp -P 2222 rakudo-2021.10.tar.gz rakudo-2021.10.tar.gz.asc \ rakudo-2021.10.tar.gz.checksums.txt \ rakudo.org@lavm-perl6infra-1.atikon.io:public_html/downloads/rakudo/ But the Akefile has targets to do uploading, so it is possible to modify the script to automate this part. Uploading requires having rights to upload files, the best idea is to ping rba on one of Raku IRC channels and ask how to proceed. =item * Use the L script to create NQP and Rakudo Github release, refer to MoarVM release guide for the details about artifacts attachment. =item 9. Build binary packages by following the steps in C. =item 10. Don’t send out any announcements until the files are actually available per step 8 above. Copy the release announcement file to the C repository into C. Change the heading to look as follows: %% title: Announce: Rakudo compiler, Release #151 (2021.10) %% date: 2020-06-19 Commit and push the change to GitHub. =item 11. Update the Wikipedia entry at L. =item 12. You’re done! Celebrate with the appropriate amount of fun. =back =head2 Releases so far Previous releases were bundled as part of monthly Parrot releases. 2009-02-26 Rakudo #14 "Vienna" (pmichaud) 2009-03-20 Rakudo #15 "Oslo" (pmichaud) 2009-04-23 Rakudo #16 "Bratislava" (pmichaud) 2009-05-21 Rakudo #17 "Stockholm" (pmichaud) 2009-06-18 Rakudo #18 "Pittsburgh" (pmichaud) 2009-07-23 Rakudo #19 "Chicago" (moritz) 2009-08-20 Rakudo #20 "PDX" (kyle) 2009-09-17 Rakudo #21 "Seattle" (particle) 2009-10-22 Rakudo #22 "Thousand Oaks" (duff) 2009-11-19 Rakudo #23 "Lisbon" (masak) 2009-12-17 Rakudo #24 "Seoul" (chromatic) 2010-01-22 Rakudo #25 "Minneapolis" (pmichaud) 2010-02-18 Rakudo #26 "Amsterdam" (mberends) 2010-03-18 Rakudo #27 "Copenhagen" (smash) 2010-04-22 Rakudo #28 "Moscow" (moritz) 2010-05-20 Rakudo #29 "Erlangen" (colomon) 2010-06-17 Rakudo #30 "Kiev" (masak) 2010-07-22 Rakudo #31 "Atlanta" (Coke) 2010-08-19 Rakudo #32 "Pisa" (mathw) 2010-09-23 Rakudo #33 "Milan" (moritz) 2010-10-21 Rakudo #34 "Paris" (duff) 2010-11-18 Rakudo #35 "Melbourne" (masak) 2010-12-23 Rakudo #36 "New York" (smash) 2011-01-20 Rakudo #37 "BristolBath" (tadzik) 2011-02-17 Rakudo #38 "Toulouse" (arnsholt) 2011-03-17 Rakudo #39 "Orlando" (jdhore) 2011-04-21 Rakudo #40 "ZA" (duff) 2011-05-19 Rakudo #41 "Dahut" (jdhore) 2011-06-23 Rakudo #42 "Bruxelles" (jdhore) 2011-07-21 Rakudo #43 "Beijing" (mberends,moritz) 2011-09-30 Rakudo #44 "Riga" (tadzik) 2011-10-20 Rakudo #45 "Houston" (duff) 2011-11-17 Rakudo #46 "London" (tadzik) 2011-12-22 Rakudo #47 "Columbus" (moritz) 2012-01-23 Rakudo #48 "Toronto" (moritz) 2012-02-23 Rakudo #49 "SPb" (masak) 2012-03-22 Rakudo #50 "Argentina" (masak) 2012-04-19 Rakudo #51 "Brazos Valley" (Coke) 2012-04-25 2012.04.1 (moritz) 2012-05-17 Rakudo #52 "MadMongers" (tadzik) 2012-06-21 Rakudo #53 "Strasbourg" (duff) 2012-07-19 Rakudo #54 "Tallinn" (masak) 2012-08-23 Rakudo #55 "Frankfurt" (tadzik,moritz) 2012-09-20 Rakudo #56 "Perl" (masak) 2012-09-29 2012.09.1 (pmichaud) 2012-10-18 Rakudo #57 "Tokyo" (duff) 2012-11-22 Rakudo #58 "Walnut" (FROGGS) 2012-12-20 Rakudo #59 "Warszawa" (masak) 2013-01-17 Rakudo #60 "Sonoma" (isBEKaml) 2013-02-21 Rakudo #61 "drinkers" (tadzik) 2013-02-23 2013.02.1 (moritz) 2013-03-21 Rakudo #62 "Singapore" (masak) 2013-04-18 Rakudo #63 "Albany" (Coke) 2013-05-23 Rakudo #64 "Austin" (FROGGS) 2013-06-20 Rakudo #65 "Poznan" (masak) 2013-07-18 Rakudo #66 "Edinburgh" (moritz,lizmat) 2013-08-22 Rakudo #67 "Bicycle" (moritz) 2013-09-19 Rakudo #68 "Shanghai" (masak) 2013-10-17 Rakudo #69 "Roederbergweg" (Coke) 2013-11-21 Rakudo #70 "Malmö" (lizmat) 2013-12-19 Rakudo #71 "Advent" (moritz) 2014-01-23 Rakudo #72 "Plano" (masak) 2014-02-20 Rakudo #73 "Karlsruhe" (timotimo) 2014-03-20 Rakudo #74 "Adelaide" (tadzik) 2014-04-17 Rakudo #75 "Echt" (masak) 2014-05-22 Rakudo #76 "Bajor" (FROGGS) 2014-06-19 Rakudo #77 "Gdańsk" (sergot) 2014-07-17 Rakudo #78 "Sofia" (FROGGS) 2014-08-21 Rakudo #79 "Minsk" (Coke) 2014-09-18 Rakudo #80 "HongKong" (masak) 2014-10-23 Rakudo #81 "Linz" (duff) 2014-11-20 Rakudo #82 "Helsinki" (lizmat) 2014-12-18 Rakudo #83 "Cologne" (lizmat) 2014-12-19 2014.12.1 (lizmat) 2015-01-22 Rakudo #84 "Gotanda" (Coke) 2015-02-19 Rakudo #85 "Berlin" (lizmat) 2015-03-19 Rakudo #86 "Cluj" (FROGGS) 2015-04-23 Rakudo #87 "Vladivostok" (masak) 2015-05-21 Rakudo #88 "Dresden" (FROGGS) 2015-06-18 Rakudo #89 "Salt Lake" (hoelzro) 2015-07-24 Rakudo #90 "Prague" (masak) 2015-07-24 2015.07.1 (masak) 2015-07-25 2015.07.2 (moritz) 2015-09-17 Rakudo #91 "Zürich" (Coke) 2015-10-22 Rakudo #92 "Niceville" (Coke) # v6.b 2015-11-19 Rakudo #93 "Bend" (Coke) 2015-12-25 Rakudo #94 "коледа" (Coke) # v6.c 2016-02-01 Rakudo #95 "2016.01" (Coke) 2016-02-02 2016.01.1 (Coke) 2016-02-21 Rakudo #96 "2016.02" (Coke) 2016-03-23 Rakudo #97 "2016.03" (Coke) 2016-04-19 Rakudo #98 "2016.04" (Coke) 2016-05-21 Rakudo #99 "2016.05" (hoelzro) 2016-06-18 Rakudo #100 "2016.06" (Zoffix) 2016-07-16 Rakudo #101 "2016.07" (Zoffix) 2016-07-18 2016.07.1 (Zoffix) 2016-08-20 Rakudo #102 "2016.08" (Zoffix) 2016-08-20 2016.08.1 (Zoffix) 2016-09-17 Rakudo #103 "2016.09" (Zoffix + NeuralAnomaly) 2016-10-15 Rakudo #104 "2016.10" (Zoffix + NeuralAnomaly) 2016-11-19 Rakudo #105 "2016.11" (Zoffix + NeuralAnomaly) 2016-12-17 Rakudo #106 "2016.12" (Zoffix + NeuralAnomaly) 2017-01-20 Rakudo #107 "2017.01" (Zoffix + NeuralAnomaly) 2017-02-18 Rakudo #108 "2017.02" (Zoffix + NeuralAnomaly) 2017-03-18 Rakudo #109 "2017.03" (Zoffix + NeuralAnomaly) 2017-04-17 Rakudo #110 "2017.04" (Zoffix + NeuralAnomaly) 2017-04-18 2017.04.1 (Zoffix) 2017-04-18 2017.04.2 (Zoffix) 2017-04-23 2017.04.3 (Zoffix) 2017-05-20 Rakudo #111 "2017.05" (Zoffix + NeuralAnomaly) 2017-06-17 Rakudo #112 "2017.06" (Zoffix + NeuralAnomaly) 2017-07-15 Rakudo #113 "2017.07" (Zoffix + NeuralAnomaly) 2017-08-21 Rakudo #114 "2017.08" (AlexDaniel + Releasable) 2017-09-18 Rakudo #115 "2017.09" (AlexDaniel + Releasable) 2017-10-26 Rakudo #116 "2017.10" (AlexDaniel + Releasable) 2017-11-21 Rakudo #117 "2017.11" (AlexDaniel + Releasable) 2017-12-21 Rakudo #118 "2017.12" (AlexDaniel + Releasable) 2018-01-25 Rakudo #119 "2018.01" (AlexDaniel + Releasable) 2018-02-20 Rakudo #120 "2018.02" (AlexDaniel + Releasable) 2018-02-23 2018.02.1 (AlexDaniel + Releasable) 2018-03-19 Rakudo #121 "2018.03" (AlexDaniel + Releasable) 2018-04-25 Rakudo #122 "2018.04" (AlexDaniel + Releasable) 2018-04-30 2018.04.1 (AlexDaniel + Releasable) 2018-05-24 Rakudo #123 "2018.05" (AlexDaniel + Releasable) 2018-06-22 Rakudo #124 "2018.06" (AlexDaniel + Releasable) 2018-09-02 Rakudo #125 "2018.08" (AlexDaniel + Releasable) 2018-09-23 Rakudo #126 "2018.09" (AlexDaniel + Releasable) 2018-10-28 Rakudo #127 "2018.10" (AlexDaniel + Releasable) 2018-11-29 Rakudo #128 "2018.11" (AlexDaniel + Releasable) # v6.d 2018-12-21 Rakudo #129 "2018.12" (AlexDaniel + Releasable) 2019-03-07 Rakudo #130 "2019.03" (AlexDaniel + Releasable) 2019-03-17 2019.03.1 (AlexDaniel + Releasable) 2019-07-17 Rakudo #131 "2019.07" (AlexDaniel + kawaii + Releasable) 2019-07-28 2019.07.1 (AlexDaniel + Releasable) 2019-11-26 Rakudo #132 "2019.11" (AlexDaniel + Releasable) 2020-01-27 Rakudo #133 "2020.01" (Altai-man + Releasable) 2020-02-23 Rakudo #134 "2020.02" (Altai-man + Releasable) 2020-03-01 2020.02.1 (Altai-man) 2020-05-04 Rakudo #135 "2020.05" (Altai-man + Releasable) 2020-05-10 2020.05.1 (Altai-man) 2020-06-21 Rakudo #136 "2020.06" (Altai-man + Releasable) 2020-07-20 Rakudo #137 "2020.07" (Altai-man + Releasable) 2020-08-22 Rakudo #138 "2020.08" (Altai-man + Releasable) 2020-08-23 2020.08.1 (Altai-man + Releasable) 2020-08-26 2020.08.2 (Altai-man + Releasable) 2020-09-26 Rakudo #139 "2020.09" (Altai-man + Releasable) 2020-10-24 Rakudo #140 "2020.10" (Altai-man + Releasable) 2020-11-21 Rakudo #141 "2020.11" (Altai-man + Releasable) 2020-12-19 Rakudo #142 "2020.12" (Altai-man + Releasable) 2021-02-21 Rakudo #143 "2021.02" (Altai-man + Releasable) 2021-02-25 2021.02.1 (Altai-man + Releasable) 2021-03-20 Rakudo #144 "2021.03" (Altai-man + Releasable) 2021-04-24 Rakudo #145 "2021.04" (Altai-man + Releasable) 2021-05-22 Rakudo #146 "2021.05" (Altai-man + Releasable) 2021-06-19 Rakudo #147 "2021.06" (Altai-man + Releasable) 2021-07-23 Rakudo #148 "2021.07" (Altai-man + Releasable) 2021-08-21 Rakudo #149 "2021.08" (Altai-man + Releasable) 2021-09-18 Rakudo #150 "2021.09" (Altai-man + Releasable) 2021-10-23 Rakudo #151 "2021.10" (Altai-man + Releasable) 2021-12-23 Rakudo #152 "2021.12" (jdv + Releasable) 2022-02-11 Rakudo #153 "2022.02" (jdv + Releasable) 2022-03-20 Rakudo #154 "2022.03" (jdv + Releasable) 2022-04-24 Rakudo #155 "2022.04" (jdv + Releasable) 2022-06-05 Rakudo #156 "2022.06" (jdv + Releasable) 2022-07-31 Rakudo #157 "2022.07" (jdv + Releasable) 2022-12-04 Rakudo #158 "2022.12" (jdv + Releasable) 2023-02-22 Rakudo #159 "2023.02" (jdv) 2023-04-21 Rakudo #160 "2023.04" (jdv + Releasable) 2023-05-31 Rakudo #161 "2023.05" (jdv) 2023-06-26 Rakudo #162 "2023.06" (jdv) 2023-08-21 Rakudo #163 "2023.08" (jdv) 2023-09-21 Rakudo #164 "2023.09" (jdv) 2023-10-19 Rakudo #165 "2023.10" (jdv) =head1 COPYRIGHT Copyright © 2009-2022, The Perl Foundation. =cut # Local Variables: # fill-column: 100 # End: # vim: expandtab shiftwidth=4: