Release Checklistï
This release checklist specifies a series of checks that anyone engaged in releasing a version of Tahoe should follow.
Any contributor can do the first part of the release preparation. Only certain contributors can perform other parts. These are the two main sections of this checklist (and could be done by different people).
A final section describes how to announce the release.
This checklist is based on the original instructions (in old revisions in the file docs/how_to_make_a_tahoe-lafs_release.org).
Any Contributorï
Anyone who can create normal PRs should be able to complete this portion of the release process.
Prepare for the Releaseï
The master branch should always be releasable.
It may be worth asking (on IRC or mailing-ist) if anything will be merged imminently (for example, âI will prepare a release this coming Tuesday if you want to get anything inâ).
Create a ticket for the release in Trac
Ticket number needed in next section
Making first release? See GPG Setup Instructions to make sure you can sign releases. [One time setup]
Get a clean checkoutï
The release proccess involves compressing source files and putting them in formats
suitable for distribution such as .tar.gz
and zip
. That said, itâs neccesary to
the release process begins with a clean checkout to avoid making a release with
previously generated files.
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).
Note
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
practice to give it the release name. You MAY also discard this directory once the release
process is complete.
Get into the release directory and install dependencies by running
cd ../tahoe-release-x.x.x (assuming you are still in your original clone)
python -m venv venv
./venv/bin/pip install âeditable .[test]
Create Branch and Apply Updatesï
Create a branch for the release/candidate (e.g.
XXXX.release-1.16.0
)run tox -e news to produce a new NEWS.txt file (this does a commit)
create the news for the release
newsfragments/<ticket number>.minor
commit it
manually fix NEWS.txt
proper title for latest release (âRelease 1.16.0â instead of âRelease âŠpost1432â)
double-check date (maybe release will be in the future)
spot-check the release notes (these come from the newsfragments files though so donât do heavy editing)
commit these changes
update ârelnotes.txtâ
update all mentions of
1.16.0
to new and higher release version for example1.16.1
update âprevious releaseâ statement and date
summarize major changes
commit it
update ânix/tahoe-lafs.nixâ
change the value given for version from OLD.post1 to NEW.post1
update âdocs/known_issues.rstâ if appropriate
Push the branch to github
Create a (draft) PR; this should trigger CI (note that github doesnât let you create a PR without some changes on the branch so running + committing the NEWS.txt file achieves that without changing any code)
Confirm CI runs successfully on all platforms
Create Release Candidateï
Before âofficiallyâ tagging any release, we will make a release-candidate available. So there will be at least 1.15.0rc0 (for example). If there are any problems, an rc1 or rc2 etc may also be released. Anyone can sign these releases (ideally theyâd be signed âofficiallyâ as well, but itâs better to get them out than to wait for that).
Typically expert users will be the ones testing release candidates and they will need to evaluate which contributorsâ signatures they trust.
(all steps above are completed)
sign the release
git tag -s -u 0xE34E62D06D0E69CFCA4179FFBDE0D31D68666A7A -m ârelease Tahoe-LAFS-1.16.0rc0â tahoe-lafs-1.16.0rc0
Note
Replace the key-id above with your own, which can simply be your email if itâs attached to your fingerprint.
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
build all code locally
these should all pass:
tox -e py37,codechecks,docs,integration
these can fail (ideally they should not of course):
tox -e deprecations,upcoming-deprecations
clone to a clean, local checkout (to avoid extra files being included in the release)
cd /tmp
git clone /home/meejah/src/tahoe-lafs
build tarballs
tox -e tarballs
Confirm that release tarballs exist by runnig:
ls dist/ | grep 1.16.0rc0
inspect and test the tarballs
install each in a fresh virtualenv
run tahoe command
when satisfied, sign the tarballs:
gpg âpinentry=loopback âarmor -u 0xE34E62D06D0E69CFCA4179FFBDE0D31D68666A7A âdetach-sign dist/tahoe_lafs-1.16.0rc0-py2.py3-none-any.whl
gpg âpinentry=loopback âarmor âdetach-sign dist/tahoe_lafs-1.16.0rc0.tar.gz
Privileged Contributorï
Steps in this portion require special access to keys or infrastructure. For example, access to tahoe-lafs.org to upload binaries or edit HTML.
Hack Tahoe-LAFSï
Did anyone contribute a hack since the last release? If so, then https://tahoe-lafs.org/hacktahoelafs/ needs to be updated.
Sign Git Tagï
git tag -s -u 0xE34E62D06D0E69CFCA4179FFBDE0D31D68666A7A -m ârelease Tahoe-LAFS-X.Y.Zâ tahoe-lafs-X.Y.Z
Upload Artifactsï
Any release-candidate or actual release plus signature (.asc file) need to be uploaded to https://tahoe-lafs.org in ~source/downloads
secure-copy all release artifacts to the download area on the tahoe-lafs.org host machine. ~source/downloads on there maps to https://tahoe-lafs.org/downloads/ on the Web:
scp dist/1.15.0 username@tahoe-lafs.org:/home/source/downloads
the following developers have access to do this:
exarkun
meejah
warner
Push the signed tag to the main repository:
git push origin tahoe-lafs-1.17.1
For the actual release, the tarball and signature files need to be uploaded to PyPI as well.
ls dist/1.19.0
twine upload âusername __token__ âpassword cat SECRET-pypi-tahoe-publish-token dist/1.19.0
The following developers have access to do this:
warner
meejah
exarkun (partial?)
Announcing the Release Candidateï
The release-candidate should be announced by posting to the mailing-list (tahoe-dev@lists.tahoe-lafs.org). For example: https://lists.tahoe-lafs.org/pipermail/tahoe-dev/2020-October/009978.html
Is The Release Done Yet?ï
If anyone reports a problem with a release-candidate then a new release-candidate should be made once a fix has been merged to master. Repeat the above instructions with rc1 or rc2 or whatever is appropriate.
Once a release-candidate has marinated for some time then it can be made into a the actual release.
The actual release follows the same steps as above, with some differences:
there is no â-rcXâ on the end of release names
the release is uploaded to PyPI (using Twine)
the version is tagged in Git (ideally using âthe tahoe release keyâ but can be done with any of the authorized core developersâ personal key)
the release-candidate branches must be merged back to master after the release is official (e.g. causing newsfragments to be deleted on master, etc)
Announcing the Releaseï
mailing-listsï
A new Tahoe release is traditionally announced on our mailing-list (tahoe-dev@tahoe-lafs.org). The former version of these instructions also announced the release on the following other lists:
wikiï
Edit the âNewsâ section of the front page of https://tahoe-lafs.org with a link to the mailing-list archive of the announcement message.