1 | |
---|
2 | ================= |
---|
3 | Release Checklist |
---|
4 | ================= |
---|
5 | |
---|
6 | This release checklist specifies a series of checks that anyone engaged in |
---|
7 | releasing a version of Tahoe should follow. |
---|
8 | |
---|
9 | Any contributor can do the first part of the release preparation. Only |
---|
10 | certain contributors can perform other parts. These are the two main |
---|
11 | sections of this checklist (and could be done by different people). |
---|
12 | |
---|
13 | A final section describes how to announce the release. |
---|
14 | |
---|
15 | This checklist is based on the original instructions (in old revisions in the file |
---|
16 | `docs/how_to_make_a_tahoe-lafs_release.org`). |
---|
17 | |
---|
18 | |
---|
19 | Any Contributor |
---|
20 | =============== |
---|
21 | |
---|
22 | Anyone who can create normal PRs should be able to complete this |
---|
23 | portion of the release process. |
---|
24 | |
---|
25 | |
---|
26 | Prepare for the Release |
---|
27 | ``````````````````````` |
---|
28 | |
---|
29 | The `master` branch should always be releasable. |
---|
30 | |
---|
31 | It may be worth asking (on IRC or mailing-ist) if anything will be |
---|
32 | merged imminently (for example, "I will prepare a release this coming |
---|
33 | Tuesday if you want to get anything in"). |
---|
34 | |
---|
35 | - Create a ticket for the release in Trac |
---|
36 | - Ticket number needed in next section |
---|
37 | - Making first release? See `GPG Setup Instructions <gpg-setup.rst>`__ to make sure you can sign releases. [One time setup] |
---|
38 | |
---|
39 | Get a clean checkout |
---|
40 | ```````````````````` |
---|
41 | |
---|
42 | The release proccess involves compressing source files and putting them in formats |
---|
43 | suitable for distribution such as ``.tar.gz`` and ``zip``. That said, it's neccesary to |
---|
44 | the release process begins with a clean checkout to avoid making a release with |
---|
45 | previously generated files. |
---|
46 | |
---|
47 | - Inside the tahoe root dir run ``git clone . ../tahoe-release-x.x.x`` where (x.x.x is the release number such as 1.16.0). |
---|
48 | |
---|
49 | .. note:: |
---|
50 | The above command would create a new directory at the same level as your original clone named ``tahoe-release-x.x.x``. You can name this folder however you want but it would be a good |
---|
51 | practice to give it the release name. You MAY also discard this directory once the release |
---|
52 | process is complete. |
---|
53 | |
---|
54 | Get into the release directory and install dependencies by running |
---|
55 | |
---|
56 | - cd ../tahoe-release-x.x.x (assuming you are still in your original clone) |
---|
57 | - python -m venv venv |
---|
58 | - ./venv/bin/pip install --editable .[test] |
---|
59 | |
---|
60 | |
---|
61 | Create Branch and Apply Updates |
---|
62 | ``````````````````````````````` |
---|
63 | |
---|
64 | - Create a branch for the release/candidate (e.g. ``XXXX.release-1.16.0``) |
---|
65 | - run tox -e news to produce a new NEWS.txt file (this does a commit) |
---|
66 | - create the news for the release |
---|
67 | |
---|
68 | - newsfragments/<ticket number>.minor |
---|
69 | - commit it |
---|
70 | |
---|
71 | - manually fix NEWS.txt |
---|
72 | |
---|
73 | - proper title for latest release ("Release 1.16.0" instead of "Release ...post1432") |
---|
74 | - double-check date (maybe release will be in the future) |
---|
75 | - spot-check the release notes (these come from the newsfragments |
---|
76 | files though so don't do heavy editing) |
---|
77 | - commit these changes |
---|
78 | |
---|
79 | - update "relnotes.txt" |
---|
80 | |
---|
81 | - update all mentions of ``1.16.0`` to new and higher release version for example ``1.16.1`` |
---|
82 | - update "previous release" statement and date |
---|
83 | - summarize major changes |
---|
84 | - commit it |
---|
85 | |
---|
86 | - update "nix/tahoe-lafs.nix" |
---|
87 | |
---|
88 | - change the value given for `version` from `OLD.post1` to `NEW.post1` |
---|
89 | |
---|
90 | - update "docs/known_issues.rst" if appropriate |
---|
91 | - Push the branch to github |
---|
92 | - Create a (draft) PR; this should trigger CI (note that github |
---|
93 | doesn't let you create a PR without some changes on the branch so |
---|
94 | running + committing the NEWS.txt file achieves that without changing |
---|
95 | any code) |
---|
96 | - Confirm CI runs successfully on all platforms |
---|
97 | |
---|
98 | |
---|
99 | Create Release Candidate |
---|
100 | ```````````````````````` |
---|
101 | |
---|
102 | Before "officially" tagging any release, we will make a |
---|
103 | release-candidate available. So there will be at least 1.15.0rc0 (for |
---|
104 | example). If there are any problems, an rc1 or rc2 etc may also be |
---|
105 | released. Anyone can sign these releases (ideally they'd be signed |
---|
106 | "officially" as well, but it's better to get them out than to wait for |
---|
107 | that). |
---|
108 | |
---|
109 | Typically expert users will be the ones testing release candidates and |
---|
110 | they will need to evaluate which contributors' signatures they trust. |
---|
111 | |
---|
112 | - (all steps above are completed) |
---|
113 | - sign the release |
---|
114 | |
---|
115 | - git tag -s -u 0xE34E62D06D0E69CFCA4179FFBDE0D31D68666A7A -m "release Tahoe-LAFS-1.16.0rc0" tahoe-lafs-1.16.0rc0 |
---|
116 | |
---|
117 | .. note:: |
---|
118 | - Replace the key-id above with your own, which can simply be your email if it's attached to your fingerprint. |
---|
119 | - Don't forget to put the correct tag message and name. In this example, the tag message is "release Tahoe-LAFS-1.16.0rc0" and the tag name is ``tahoe-lafs-1.16.0rc0`` |
---|
120 | |
---|
121 | - build all code locally |
---|
122 | |
---|
123 | - these should all pass: |
---|
124 | |
---|
125 | - tox -e py37,codechecks,docs,integration |
---|
126 | |
---|
127 | - these can fail (ideally they should not of course): |
---|
128 | |
---|
129 | - tox -e deprecations,upcoming-deprecations |
---|
130 | |
---|
131 | - clone to a clean, local checkout (to avoid extra files being included in the release) |
---|
132 | |
---|
133 | - cd /tmp |
---|
134 | - git clone /home/meejah/src/tahoe-lafs |
---|
135 | |
---|
136 | - build tarballs |
---|
137 | |
---|
138 | - tox -e tarballs |
---|
139 | - Confirm that release tarballs exist by runnig: |
---|
140 | |
---|
141 | - ls dist/ | grep 1.16.0rc0 |
---|
142 | |
---|
143 | - inspect and test the tarballs |
---|
144 | |
---|
145 | - install each in a fresh virtualenv |
---|
146 | - run `tahoe` command |
---|
147 | |
---|
148 | - when satisfied, sign the tarballs: |
---|
149 | |
---|
150 | - gpg --pinentry=loopback --armor -u 0xE34E62D06D0E69CFCA4179FFBDE0D31D68666A7A --detach-sign dist/tahoe_lafs-1.16.0rc0-py2.py3-none-any.whl |
---|
151 | - gpg --pinentry=loopback --armor --detach-sign dist/tahoe_lafs-1.16.0rc0.tar.gz |
---|
152 | |
---|
153 | |
---|
154 | Privileged Contributor |
---|
155 | ====================== |
---|
156 | |
---|
157 | Steps in this portion require special access to keys or |
---|
158 | infrastructure. For example, **access to tahoe-lafs.org** to upload |
---|
159 | binaries or edit HTML. |
---|
160 | |
---|
161 | |
---|
162 | Hack Tahoe-LAFS |
---|
163 | ``````````````` |
---|
164 | |
---|
165 | Did anyone contribute a hack since the last release? If so, then |
---|
166 | https://tahoe-lafs.org/hacktahoelafs/ needs to be updated. |
---|
167 | |
---|
168 | |
---|
169 | Sign Git Tag |
---|
170 | ```````````` |
---|
171 | |
---|
172 | - git tag -s -u 0xE34E62D06D0E69CFCA4179FFBDE0D31D68666A7A -m "release Tahoe-LAFS-X.Y.Z" tahoe-lafs-X.Y.Z |
---|
173 | |
---|
174 | |
---|
175 | Upload Artifacts |
---|
176 | ```````````````` |
---|
177 | |
---|
178 | Any release-candidate or actual release plus signature (.asc file) |
---|
179 | need to be uploaded to https://tahoe-lafs.org in `~source/downloads` |
---|
180 | |
---|
181 | - secure-copy all release artifacts to the download area on the |
---|
182 | tahoe-lafs.org host machine. `~source/downloads` on there maps to |
---|
183 | https://tahoe-lafs.org/downloads/ on the Web: |
---|
184 | |
---|
185 | - scp dist/*1.15.0* username@tahoe-lafs.org:/home/source/downloads |
---|
186 | |
---|
187 | - the following developers have access to do this: |
---|
188 | |
---|
189 | - exarkun |
---|
190 | - meejah |
---|
191 | - warner |
---|
192 | |
---|
193 | Push the signed tag to the main repository: |
---|
194 | |
---|
195 | - git push origin tahoe-lafs-1.17.1 |
---|
196 | |
---|
197 | For the actual release, the tarball and signature files need to be |
---|
198 | uploaded to PyPI as well. |
---|
199 | |
---|
200 | - ls dist/*1.19.0* |
---|
201 | - twine upload --username __token__ --password `cat SECRET-pypi-tahoe-publish-token` dist/*1.19.0* |
---|
202 | |
---|
203 | The following developers have access to do this: |
---|
204 | |
---|
205 | - warner |
---|
206 | - meejah |
---|
207 | - exarkun (partial?) |
---|
208 | |
---|
209 | |
---|
210 | Announcing the Release Candidate |
---|
211 | ```````````````````````````````` |
---|
212 | |
---|
213 | The release-candidate should be announced by posting to the |
---|
214 | mailing-list (tahoe-dev@lists.tahoe-lafs.org). For example: |
---|
215 | https://lists.tahoe-lafs.org/pipermail/tahoe-dev/2020-October/009978.html |
---|
216 | |
---|
217 | |
---|
218 | Is The Release Done Yet? |
---|
219 | ```````````````````````` |
---|
220 | |
---|
221 | If anyone reports a problem with a release-candidate then a new |
---|
222 | release-candidate should be made once a fix has been merged to |
---|
223 | master. Repeat the above instructions with `rc1` or `rc2` or whatever |
---|
224 | is appropriate. |
---|
225 | |
---|
226 | Once a release-candidate has marinated for some time then it can be |
---|
227 | made into a the actual release. |
---|
228 | |
---|
229 | The actual release follows the same steps as above, with some differences: |
---|
230 | |
---|
231 | - there is no "-rcX" on the end of release names |
---|
232 | - the release is uploaded to PyPI (using Twine) |
---|
233 | - the version is tagged in Git (ideally using "the tahoe release key" |
---|
234 | but can be done with any of the authorized core developers' personal |
---|
235 | key) |
---|
236 | - the release-candidate branches must be merged back to master after |
---|
237 | the release is official (e.g. causing newsfragments to be deleted on |
---|
238 | master, etc) |
---|
239 | |
---|
240 | |
---|
241 | Announcing the Release |
---|
242 | ---------------------- |
---|
243 | |
---|
244 | |
---|
245 | mailing-lists |
---|
246 | ````````````` |
---|
247 | |
---|
248 | A new Tahoe release is traditionally announced on our mailing-list |
---|
249 | (tahoe-dev@tahoe-lafs.org). The former version of these instructions |
---|
250 | also announced the release on the following other lists: |
---|
251 | |
---|
252 | - tahoe-announce@tahoe-lafs.org |
---|
253 | - twisted-python@twistedmatrix.com |
---|
254 | - liberationtech@lists.stanford.edu |
---|
255 | - lwn@lwn.net |
---|
256 | - p2p-hackers@lists.zooko.com |
---|
257 | - python-list@python.org |
---|
258 | - http://listcultures.org/pipermail/p2presearch_listcultures.org/ |
---|
259 | - cryptopp-users@googlegroups.com |
---|
260 | |
---|
261 | |
---|
262 | wiki |
---|
263 | ```` |
---|
264 | |
---|
265 | Edit the "News" section of the front page of https://tahoe-lafs.org |
---|
266 | with a link to the mailing-list archive of the announcement message. |
---|