Use semantic version tags: vX.Y.Z.
Production releases must satisfy all of the following:
- the Git tag is
vX.Y.Z [project].versioninpyproject.tomlisX.Y.ZX.Y.Zis not already published on PyPI
Do not bump pyproject.toml and create tags as separate manual steps. Use the
release script so the version bump, commit, and tag come from the same commit:
uv run python scripts/release.py X.Y.Z
git push origin HEAD vX.Y.ZOr let the script push both:
uv run python scripts/release.py X.Y.Z --push- Clean old artifacts.
rm -rf dist/
- Build and validate the source distribution.
uv build --sdist --no-sources
- Validate sdist metadata.
uvx --from twine twine check dist/*.tar.gz
- Smoke test the sdist install path.
uv run --isolated --no-project --with dist/*.tar.gz tests/smoke_test.py
- Optionally validate a local single-interpreter wheel.
uv build --wheel --python 3.12 --no-sources
- Smoke test wheel in a clean environment.
- Install wheel from
dist/ - Import
rapidobj - Parse a small
.objfile and assertresult.ok
- Install wheel from
- Pull requests run:
pyrightsdistbuild and smoke test- Linux and Windows wheel builds for CPython
3.12,3.13, and3.14
- Version tags (
vX.Y.Z) run the release workflow:- verify that tag version,
pyproject.tomlversion, and PyPI publishability match - build the
sdist - build Linux and Windows wheel artifacts
- run metadata checks and smoke tests
- upload artifacts to GitHub Actions
- publish those exact artifacts to PyPI via Trusted Publishing
- verify that tag version,
- Run the release script from a clean working tree.
uv run python scripts/release.py X.Y.Z
- Push the release commit and tag.
git push origin HEAD vX.Y.Z
- Wait for the release workflow to finish and download the generated artifacts if needed.
- Create GitHub release from the tag and include changelog notes.
- Configure a Trusted Publisher for the repository on PyPI.
- Run the release script so
pyproject.tomland the tag are created together. - Push the resulting commit and matching version tag (
vX.Y.Z). - Wait for the
Release Artifactsworkflow to finish. - Verify the package page and an install from PyPI.