Skip to content
Adrian Sampson edited this page Aug 19, 2021 · 42 revisions

This is a to-do list for every new release. Many steps can be automated with the extras/release.py script.

Prepare

  1. Fix/close any bugs labeled blocker

Finalize

  1. Run all the tests: tox -p all
  2. Check manually that setup.py looks up to date (dependencies, version number, packages, etc).
  3. Add a human-readable summary paragraph to the top of the changelog. Clean up any changelog typos.
  4. Datestamp the changelog: release.py datestamp
  5. Commit the finalized changelog: git commit -a

Release

  1. Run release.py prep. This will:
    • Tag the revision: git tag v1.X.Y
    • Build the source distribution: python setup.py sdist
    • Generate the changelog as a Markdown doc for upload as a GitHub release in a file called changelog.md.
    • Bump the version number in setup.py, __version__ in __init__.py, docs/conf.py, and docs/changelog.rst.
  2. Look around to make sure everything looks good. Then, commit the new bumped version: git commit -a
  3. Run release.py publish. This will:
    • Push to GitHub: git push ; git push --tags
    • Upload the release: twine upload ...
  4. Run GITHUB_TOKEN=... release.py ghrelease to create a GitHub release with the generated Markdown changelog. This requires the github-release command-line tool and an access token.

This is also a good time to tag and release the other libraries in the beets ecosystem if they've seen any updates. Specifically, this includes pyacoustid, audioread, Confuse, and MediaFile.

Announcement

  1. Announce on Twitter (@b33ts).
  2. Announce on Discourse.
  3. Email mailing list.

The distro packages have their own maintainers. Non-exhaustive list: