The Python package version is dynamic (pyproject.toml declares dynamic = ["version"]),
so Cargo.toml is the single source of truth for the version number. Maturin reads it
at build time and applies it to the Python wheel.
- Write access to
pymc-devs/nutpie(needed to create a GitHub Release) - git-cliff installed (configuration lives in
cliff.toml)
-
Bump the version in
Cargo.toml. -
Update the changelog.
git cliff --tag vX.Y.Z -o CHANGELOG.md
-
Open a pull request.
The release prep (version bump + changelog) can be its own PR or included in a PR that also contains the fixes/features going into the release.
git checkout -b release-X.Y.Z git add Cargo.toml CHANGELOG.md git commit -m "chore(release): prepare for X.Y.Z" git push -u origin release-X.Y.Z gh pr create --title "Prepare vX.Y.Z"
If
Cargo.lockchanged as a side effect of the version bump, include it in the same commit. -
Merge the PR, then create a GitHub Release targeting
mainwith tagvX.Y.Z.Use the GitHub UI (Releases → Draft a new release) or the CLI:
gh release create vX.Y.Z --target main --generate-notes
Create the release promptly after merging so the tag lands on the merge commit rather than on something unrelated that arrives later.
-
Approve the deployment. Once CI finishes building wheels and the sdist, the
releasejob will be pending review. Apypienvironment reviewer must approve the deployment from the Actions tab. Once approved, wheels and the sdist are published to PyPI.
- Commit messages follow Conventional Commits.
git-cliffgroups the changelog based on prefixes likefeat:,fix:,chore:, etc. - Release-prep commits use
chore(release):so they are skipped in the generated changelog (seecliff.toml). - Pre-release versions (e.g.
0.17.0-alpha.1) are supported; the CI will mark the GitHub Release accordingly.