Release process¶
psc is tag-driven. Pushing a vX.Y.Z tag on main fires release.yml, which
publishes to PyPI via trusted publishing (no API tokens) and creates a
GitHub Release. The same tag deploys the docs site.
While on 0.x, minor versions may include breaking changes; from v1.0.0 the
project follows SemVer.
Checklist¶
just testgreen.just lintclean.just docs-build(strict) passes.- Roll
CHANGELOG.md: move[Unreleased]to## vX.Y.Z — YYYY-MM-DD. - Bump the version in both
pyproject.tomlandpsc/_version.py(they must agree — the release workflow validates the tag againstpsc/_version.py). - Commit on a
chore/release-X.Y.Zbranch, open a PR, merge tomain. - Tag the merge commit and push:
- Watch
release.yml: it verifies the tag is onmain, the version matches, builds the wheel + sdist, publishes to PyPI, and cuts the GitHub Release from the CHANGELOG section.
Pre-tag prerequisites (one-time)¶
- A PyPI Trusted Publisher registered for this repo +
release.yml+ no environment. Adding a workflowenvironment:would change the OIDC subject and break the binding. - GitHub Pages set to GitHub Actions as the source (the docs deploy job needs it).
Hot-fixing a tagged release¶
Never amend a tagged commit. Increment the patch version, cut a fresh release
with the fix, and add a new CHANGELOG.md entry.