Release
Prerequisites (one-time PyPI setup)
httprs uses Trusted Publishing.
How releases work
Pushing a tag matching v* triggers .github/workflows/release.yml, which runs five jobs:
| Job | Runner | What it produces |
|---|---|---|
linux |
ubuntu-latest |
manylinux wheels for x86_64 and aarch64 |
windows |
windows-latest |
Windows wheels for x86_64 and aarch64 |
macos |
macos-latest |
macOS wheels for x86_64 and aarch64 |
sdist |
ubuntu-latest |
Source distribution (.tar.gz) |
publish |
ubuntu-latest |
Downloads all artifacts, publishes to PyPI via OIDC |
The publish job only runs after all build jobs succeed.
Artifact matrix
| Platform | Architecture | Wheel tag |
|---|---|---|
| Linux (manylinux) | x86_64 | *-manylinux_*_x86_64.whl |
| Linux (manylinux) | aarch64 | *-manylinux_*_aarch64.whl |
| Windows | x86_64 | *-win_amd64.whl |
| Windows | aarch64 | *-win_arm64.whl |
| macOS | x86_64 | *-macosx_*_x86_64.whl |
| macOS | aarch64 | *-macosx_*_arm64.whl |
All wheels use the abi3-py312 stable ABI tag, so a single wheel per platform runs on Python 3.12 and all future 3.x releases without recompiling.
Cutting a release
- Bump the version in both
Cargo.tomlandpyproject.tomlto the same value (e.g.0.0.1a0). - Update
CHANGELOG.md: - Rename
[Unreleased]to the new version with today's date (e.g.[0.0.1a0] - YYYY-MM-DD). - Add a new empty
[Unreleased]section at the top. - Add a comparison link at the bottom for the new version.
- Commit:
- Tag and push: