Releasing¶
Releases are immutable states shared by the source tree, package metadata, tag, GitHub Release, and PyPI artifacts.
One-time owner setup¶
- Create a PyPI trusted publisher for project
gnu-pass-to-csvwith ownerfbossiere, repositorygnu-pass-to-csv, workflowrelease.yml, and environmentpypi. - Create the protected GitHub
pypienvironment. No API token is required. - Apply the branch, tag, Actions, and security settings in repository-settings.md.
Release checklist¶
- Create
release/vX.Y.Zfrom currentmain. - Update the single version in
pyproject.toml, the dated changelog heading, supported-version table if needed, and examples. - Run the exact gate from
CONTRIBUTING.mdin a clean checkout. - Inspect the wheel and sdist, install the wheel in a clean environment, and
smoke-test
gnu-pass-to-csv --versionand--help. - Open a release pull request describing user-visible changes, non-goals, security-boundary impact, commands run, and observed results.
- After required CI passes and the pull request is squash-merged, create tag
vX.Y.Zfrom that exactmaincommit and push it. - The release workflow verifies the tag/version match, rebuilds and checks the artifacts, publishes them to PyPI with OIDC, and creates the GitHub Release.
- Verify the PyPI metadata, provenance, hashes, GitHub assets, and installation from a clean environment.
Never reuse or move a published version tag. Correct a release with a new patch version.