You release a package by merging a pull request. Pick a repository that publishes (see what each repository publishes) and start with a development version. It reaches TestPyPI, the release's attached files and, for a repository that requests it, the library index, but not the MIP index or production PyPI.
gh workflow run prepare-release.yml --repo PyDevices/<repository> -f version=X.Y.Z.dev1Within a minute the repository has a pull request named Release X.Y.Z.dev1
on a release/vX.Y.Z.dev1 branch. It changes VERSION and adds a section to
CHANGELOG.md. Check the version, read the changelog section, wait for CI,
then merge it.
Merging tags vX.Y.Z.dev1, creates the GitHub Release, and starts the
publish run. When the run finishes, the package is on TestPyPI and the
release's row in RELEASE_HEALTH.md shows each
stage's outcome with a link to the run.
The release guide covers a final release, a retry and the manual fallback, and the release chain explains why each step exists.