aboutsummaryrefslogtreecommitdiff
path: root/docs/guides/release-guide.md
blob: 5bd8ce225c328a3db1beaa060d578eca1c74831f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
# Rakudo Star release guide

Rakudo Star releases are based on Rakudo compiler releases. Since some time is
often needed for module updates and testing after each Rakudo compiler release,
the timing of Star releases varies from one release to the next.

Also, while the Rakudo compiler issues monthly releases, Star releases are free
to choose a longer release cycle. Star releases are also free to choose older
releases of the compiler, NQP, or MoarVM. The goal is to balance end-user
stability needs with progress being made on the compiler, modules, and other
runtime components. Currently, Star is on a quarterly release cycle.

## Creating a release distribution

If this is your first time releasing, **read the whole guide before starting**.
That way you can ask questions and clear up and confusions before you're in the
thick of it.

If you have done this before, you might want to check for and read any changes
to this release guide since your last run.

### Clone this repository

    git clone git://gitlab.com/tyil/rakudo-star.git

If this is not your first time, you probably already have a copy of this
repository, in which case you should pull the latest changes.

    git pull origin master

### Branch out

Since all the information is stored in git, this is a great moment to create a
new branch. This will make it easier to roll back if things go horribly wrong,
and to create a merge request later on to get other people to review the
changes.

    git switch -c $VERSION-rc1

### Update all community modules

All community modules that are going to be bundled with this release need to be
made up-to-date. These are managed as submodules, so `git submodule` comes in
handy here.

    git submodule sync
    git submodule update --init --recursive
    git submodule foreach git pull origin master
    git commit -m "Update submodules"

At this point `git status` should report a clean repository.

### Set component versions

Inside the repository is a Makefile which indicates which versions of upstream
components should be used. This file can be found at `tools/star/Makefile`.
These version numbers are *usually* similar, but not necesarily. Specifically,
it is about the values for `RAKUDO_VER`, `NQP_VER`, `MOAR_VER`.

If unsure, ask for the specific value for `RAKUDO_VER` in `#raku-dev` on
`irc.freenode.net`. The `NQP_VER` can be found inside the Rakudo repository, in
`tools/build/NQP_REVISION`, and the `MOAR_VER` can be found in the NQP
repository in the `tools/build/MOAR_REVISION` file.

    $EDITOR tools/star/Makefile
    git commit -m "Bump component versions"

### Create a release announcement

For every release, an announcement should be made. These can be found in
`docs/announce`. They follow the same versioning scheme as Rakudo Star itself,
and as such, the name for the new one should have the current version number,
followed by `.md` since the announcements are in Markdown.

You should include the latest version number changes, community module changes
(updated ones, deleted ones, new ones), and any other information which might
be relevant to end-users or package maintainers.

    $EDITOR docs/announce/$VERSION.md
    git add !$
    git commit -m "Add release announcement for $VERSION"

### Bump Rakudo Star version number

The version number for Rakudo Star itself is referred to in another file,
`Makefile.in`, which needs updating.

    $EDITOR tools/build/Makefile.in.
    git commit -m "Bump Rakudo Star version"

### Publish changes

With all the prep-work done, it is time to build an actual release
distribution. This is done using GitLab CI, so all you need to do now is push
the changes back to the repository. Generally, this would be done through a
merge request, so the changes can be reviewed and approved. Luckily, you're
already using a seperate branch, so this is pretty straightforward as well.

    git push origin $VERSION-rc1

This should give you an URL to create a merge request directly, however, if it
does not, you'll have to use your `$BROWSER` to go to the repository web page,
and make one manually.

### Creating the release candidate

GitLab CI has been set up to create a new release on every branch or tag. As
such, the previous `git push` should have started a CI job to build a
distribution tarball. If it did not, please consult `#raku-dev` on
`irc.freenode.net`.

The CI setup also contains a testing phase, where the resulting tarball is
compiled and tested. If any of these steps fail, a solution must be found. The
best place to discuss options would be, again, the `#raku-dev` channel.

### Creating the official release

Once the release candidate has been approved to become an official release, the
branch can be merged into `master`. Afterwards, create a new tag for the new
release, and push it to the remote repository. GitLab CI will make a tarball
for you.

    git switch master
    git pull origin master
    git tag -s $VERSION
    git push origin $VERSION

The `-s` option for `git tag` makes you sign this particular tag with your PGP
key. All tags must be signed, so if you lack a PGP key, you should [strongly
consider to get yourself one](https://fedoraproject.org/wiki/Creating_GPG_Keys).

### Publishing the official release

Once GitLab CI has built and tested the final image, you can download it as an
artifact from the job. The job is of stage "Package, and name "Tarball".
Downloading the artifacts will get you a zip file with the tarball inside of
it. Extract the zipfile to some temporary location. Next, create a PGP
signature and checksums for it, to allow other people to verify they got the
right thing.

For checksumming, a small utility can be found in the `bin` directory,
`mkchecksum`, which will generate a number or checksum formats for a given
file.

    cd -- "$(mktemp -d)"
    wget "$ARTIFACTS_URL"
    unzip download
    cd work/release
    gpg --armor --detach-sig *.tar.gz
    mkchecksum *.tar.gz > rakudo-star-$VERSION.tar.gz.checksum.txt

Lastly, the three files you have right now should be uploaded to the remote
server hosting official releases.

TODO: I currently don't have any information on this step yet!

    If you don't have permission to do this step, please ask one of the core
    devs (pmichaud, jnthn, masak, PerlJam/perlpilot, tadzik, or moritz) on
    C<#perl6> to do it for you.

### Announce the new release

Now that a new release has been made, you're *technically* done. However, it
would be much appreciated if you also announce to the rest of the world that a
new release has been published. The most important place would be `rakudo.org`.

#### rakudo.org
The sources of this site can be found in the
[`perl6/rakudo.org`](https://github.com/perl6/rakudo.org repository on GitHub).
It contains a small script to make this easier, called
`push-latest-rakudo-star-announcement.p6`. You will need to have a working
`perl6` in your `$PATH`, and have the `WWW` module installed.

    cd -- "$(mktemp -d)"
    git clone git@github.com:perl6/rakudo.org .
    ./push-latest-rakudo-star-announcement.p6 $VERSION

You will also have to bump versions manually in C<templates/files.html.ep> in
the rakudo.org repo.

#### Other places of importance

There are more places around the 'net that should be informed of the new
release. These are not all documented, so you may have to ask around to get
access.

- http://perl6.org/
- perl6-users@perl.org
- perl6-language@perl.org
- perl6-compiler@perl.org
- http://en.wikipedia.org/wiki/Rakudo_Perl_6 (latest release date is mentioned in the main text)
- http://en.wikipedia.org/wiki/Perl_6

You should actively ask others to advertise the release as well. This includes
their social media accounts and blogs. Notable places include:

- http://blogs.perl.org/
- [Perl 6 Facebook Page](https://www.facebook.com/groups/1595443877388632/)
- Reddit: [r/perl](https://www.reddit.com/r/perl/),
  [r/rakulang](https://www.reddit.com/r/rakulang/),
  [r/programming](https://www.reddit.com/r/programming/)
- [Hacker News](https://news.ycombinator.com/news)
- Twitter: [@rakudoperl](https://twitter.com/rakudoperl)

### Give yourself some credit

Add this release and your name to the list of releases at the end of this
document, to eternalize your fame. This may also help other people interested
in making releases to find people to help them when any issues arrive.

    $EDITOR docs/guides/release-guide.md

You may want to commit and push this file as well, of course.

**You're done!** Celebrate with the appropriate amount of fun.

## Rakudo Star release list

- `2019.03`: hankache, clarkema
- `2018.10`: stmuk
- `2018.06`: stmuk
- `2018.04`: stmuk
- `2018.01`: stmuk
- `2017.10`: stmuk
- `2017.07`: stmuk
- `2017.04`: stmuk
- `2017.01`: stmuk
- `2016.11`: stmuk
- `2016.10`: stmuk
- `2016.07`: stmuk
- `2016.04`: stmuk
- `2016.01`: FROGGS
- `2015.11`: moritz
- `2015.09`: moritz
- `2015.07`: moritz
- `2015.06`: FROGGS
- `2015.03`: moritz
- `2015.02`: moritz
- `2015.01`: moritz
- `2014.12`: moritz
- `2014.09`: FROGGS
- `2014.08`: FROGGS
- `2014.04`: jnthn
- `2014.03`: FROGGS
- `2014.01`: tadzik
- `2013.12`: lue
- `2013.11`: moritz
- `2013.10`: lue
- `2013.09`: moritz
- `2013.08`: moritz
- `2013.05`: pmichaud
- `2013.02`: moritz
- `2013.01`: moritz
- `2012.12`: moritz
- `2012.11`: moritz
- `2012.10`: jnthn
- `2012.09`: pmichaud
- `2012.08`: pmichaud
- `2012.07`: pmichaud
- `2012.06`: moritz
- `2012.05`: moritz
- `2012.04`: moritz
- `2012.02`: jnthn
- `2012.01`: jnthn
- `2011.07`: pmichaud
- `2011.04`: pmichaud
- `2011.01`: pmichaud
- `2010.12`: pmichaud
- `2010.11`: pmichaud
- `2010.10`: pmichaud
- `2010.09`: pmichaud
- `2010.08`: pmichaud
- `2010.07`: pmichaud