Releasing
August 25, 2026 ยท View on GitHub
django-bakery uses Semantic Versioning and
Keep a Changelog. The package version
is derived from Git tags by setuptools-scm; do not edit a version file.
Release tags use the v<version> form, such as v0.14.0, while the package
version remains 0.14.0.
Release checklist
- Review the user-facing changes in
CHANGELOG.md. - Move the release entries from
Unreleasedinto a dated version section. - Choose a major, minor, or patch version according to Semantic Versioning.
- Run
make check,make test,make docs-check, andmake verify. - Build and inspect the distributions with
make build. - Obtain explicit human approval for the version and release.
- Merge the approved release pull request.
- With explicit human approval, create the
v<version>tag (for example,v0.14.0) on the merge commit to trigger the package publication workflow. - Confirm the expected release appears on PyPI.
- Create the GitHub Release from the existing tag, with concise notes from the matching changelog section.
- Confirm the documentation workflow deployed the matching site.
Agents may prepare release notes and run validation, but must not create tags, GitHub releases, documentation deployments, or package publications without explicit human approval.
Verify a tag and GitHub Release
After the release pull request merges, verify that the tag points to its merge commit before publishing:
VERSION=0.14.0
TAG="v$VERSION"
EXPECTED_COMMIT=<release-commit>
git fetch origin --tags
test "$(git rev-parse "${TAG}^{commit}")" = "$EXPECTED_COMMIT"
With approval and after the package publication succeeds, create a release from that existing tag:
gh release create "$TAG" \
--verify-tag \
--title "$VERSION" \
--notes-file release-notes.md
Verify that it is public and uses the expected tag:
test "$(gh release view "$TAG" --json tagName --jq .tagName)" = "$TAG"
test "$(gh release view "$TAG" --json isDraft,isPrerelease \
--jq '(.isDraft == false and .isPrerelease == false)')" = "true"
test "$(git rev-parse "${TAG}^{commit}")" = "$EXPECTED_COMMIT"
Use the repository's GitHub Actions configuration for the authoritative publication and documentation deployment steps. Never bypass its approval requirements with a local upload.