How to Make a Tahoe-LAFS Release

Any developer with push priveleges can do most of these steps, but a
"Release Maintainer" is required for some signing operations -- these
steps are marked with (Release Maintainer). Currently, the following
people are Release Maintainers:

  - Brian Warner (https://github.com/warner)


* select features/PRs for new release [0/2]
  - [ ] made sure they are tagged/labeled
  - [ ] merged all release PRs

* basic quality checks [0/3]
  - [ ] all travis CI checks pass
  - [ ] all appveyor checks pass
  - [ ] all buildbot workers pass their checks

* freeze master branch [0/]
  - [ ] announced the freeze of the master branch on IRC (i.e. non-release PRs won't be merged until after release)

* sync documentation [0/7]
  - [ ] NEWS.rst: summarize user-visible changes, aim for one page of text
  - [ ] added final release name and date to top-most item in NEWS.rst
  - [ ] updated relnotes.txt
  - [ ] updated CREDITS
  - [ ] updated docs/known_issues.rst
  - [ ] docs/INSTALL.rst only points to current tahoe-lafs-X.Y.Z.tar.gz source code file
  - [ ] updated https://tahoe-lafs.org/hacktahoelafs/

* sign + build the tag [0/8]

  - [ ] code passes all checks / tests (i.e. all CI is green)
  - [ ] documentation is ready (see above)
  - [ ] (Release Maintainer): git tag -s -u 0xE34E62D06D0E69CFCA4179FFBDE0D31D68666A7A -m "release Tahoe-LAFS-X.Y.Z" tahoe-lafs-X.Y.Z
  - [ ] build code locally:
     tox -e py27,codechecks,coverage,deprecations,docs,integration,upcoming-deprecations
  - [ ] created tarballs (they'll be in dist/ for later comparison)
     tox -e tarballs
  - [ ] release version is reporting itself as intended version
     ls dist/
  - [ ] 'git pull' doesn't pull anything
  - [ ] pushed tag to trigger buildslaves
     git push official master TAGNAME
  - [ ] confirmed Dockerhub built successfully:
     https://hub.docker.com/r/tahoelafs/base/builds/

* sign the release artifacts [0/8]

  - [ ] (Release Maintainer): pushed signed tag (should trigger Buildbot builders)
  - [ ] Buildbot workers built all artifacts successfully
  - [ ] downloaded upstream tarballs+wheels
  - [ ] announce on IRC that master is unlocked
  - [ ] compared upstream tarballs+wheels against local copies
  - [ ] (Release Maintainer): signed each upstream artifacts with "gpg -ba -u 0xE34E62D06D0E69CFCA4179FFBDE0D31D68666A7A FILE"
  - [ ] added to relnotes.txt: [0/3]
    - [ ] prefix with SHA256 of tarballs
    - [ ] release pubkey
    - [ ] git revision hash
  - [ ] GPG-signed the release email with release key (write to
        relnotes.txt.asc) Ideally this is a Release Maintainer, but could
        be any developer

* publish release artifacts [0/9]

  - [ ] uploaded to PyPI via: twine upload dist/*
  - [ ] uploaded *.asc to org ~source/downloads/
  - [ ] test install works properly: pip install tahoe-lafs
  - [ ] copied the release tarballs and signatures to tahoe-lafs.org: ~source/downloads/
  - [ ] moved old release out of ~source/downloads (to downloads/old/?)
  - [ ] ensured readthedocs.org updated
  - [ ] uploaded wheels to https://tahoe-lafs.org/deps/
  - [ ] uploaded release to https://github.com/tahoe-lafs/tahoe-lafs/releases

* check release downloads [0/]

  - [ ] test PyPI via: pip install tahoe-lafs
  - [ ] https://github.com/tahoe-lafs/tahoe-lafs/releases
  - [ ] https://tahoe-lafs.org/downloads/
  - [ ] https://tahoe-lafs.org/deps/

* document release in trac [0/]

  - [ ] closed the Milestone on the trac Roadmap

* unfreeze master branch [0/]

  - [ ] announced on IRC that new PRs will be looked at/merged

* announce new release [0/]

  - [ ] sent release email and relnotes.txt.asc to tahoe-announce@tahoe-lafs.org
  - [ ] sent release email and relnotes.txt.asc to tahoe-dev@tahoe-lafs.org
  - [ ] updated Wiki front page: version on download link, News column
  - [ ] updated Wiki "Doc": parade of release notes (with rev of NEWS.rst)
  - [ ] make an "announcement of new release" on freshmeat (XXX still a thing?)
  - [ ] make an "announcement of new release" on launchpad
  - [ ] tweeted as @tahoelafs
  - [ ] emailed relnotes.txt.asc to below listed mailing-lists/organizations
  - [ ] also announce release to (trimmed from previous version of this doc):
      - twisted-python@twistedmatrix.com
      - liberationtech@lists.stanford.edu
      - lwn@lwn.net
      - p2p-hackers@lists.zooko.com
      - python-list@python.org
      - http://listcultures.org/pipermail/p2presearch_listcultures.org/
      - cryptopp-users@googlegroups.com
      - (others?)
