Making a release#

A release takes two pull requests, one on each side of publishing it. The version in pyproject.toml is already the one being released, since the previous release’s post-release pull request set it.

1. Build the changelog#

On a pre_release branch, assemble the changelog entries into CHANGELOG.md, with the release version and the day you will publish it:

towncrier build --version 2.0.0-beta4 --date "October 6th, 2026"

This writes a dated # v2.0.0-beta4 (October 6th, 2026) section at the top of CHANGELOG.md and deletes the entry files it read. Commit both, open a pull request titled Pre-Release 2.0.0-beta4, and read the assembled section to check the entries hold up as a list. Run towncrier build --draft --version 2.0.0-beta4 first to preview it without touching any files.

The pull request adds no changelog entry of its own, so the detect-changelog-entry check fails on it; that check is not required to merge.

2. Publish#

Merge the pull request, then publish a GitHub release tagged v2.0.0-beta4 at that merge commit, so the release holds exactly the entries the build read. Use the new CHANGELOG.md section as the release notes. Publishing the release runs auto-publish.yml, which builds the package from the tagged commit and uploads it to PyPI.

3. Bump the version#

On a post_release branch, bump version in pyproject.toml to the next version and open a pull request titled Post-Release 2.0.0-beta4. Every run records the GuPPy version that produced it in GuPPyParamtersUsed.json, so the bump makes runs made from main report the version in development rather than the one already released.