This document describes how to cut a new GitHub release and publish packages to PyPI.
Prerequisites
- Write permissions on the GitHub repo (required to draft/publish releases).
- Access to the release workflows (GitHub Actions) that build and publish to PyPI.
Before publishing a new release, ensure that the version number has been updated in pyproject.toml.
The convention followed for package versioning is:
<package>@v<major>.<minor>.<patch>(e.g.,evo-objects@v1.2.3).
-
Go to the repo Releases tab and click “Draft a new release”.
-
Create or choose a new tag to publish using the convention:
<package>@v<major>.<minor>.<patch>.-
Create a new tag if the version you’re releasing does not already exist as a Git tag in the repository.
Example: You bumpedpyproject.tomltov2025.12.17and haven’t pushed that tag yet. GitHub will create the tag on the commit you specify (usuallymain). -
Choose an existing tag if you’ve already created and pushed the tag locally (e.g.,
git tag v2025.12.17 && git push origin v2025.12.17).
In this case, just select it in the release UI.
Tip: The release workflow uses the tag to build and publish artifacts, so make sure the tag matches the version in
pyproject.toml. -
-
Select the previous tag:
- Pick the previous tag for the specific package being released (not just any repo tag).
-
Click “Generate release notes” and review:
- Where appropriate, remove change details unrelated to the package you’re releasing.
- If notes look wrong, it usually means the previous tag selection was incorrect. You can re-select the correct tag and regenerate to fix.
-
Click “Publish release”.
Publishing the release triggers the release workflow, which:
- Builds the assets and publishes them to GitHub Releases and PyPI.
- Does not bump version numbers automatically (these were updated manually earlier).
After publishing:
- The new version appears on PyPI almost immediately.
- The GitHub README on the PyPI page can take some time to refresh due to caching.
Use the generated release notes to update the CHANGELOG.md.
- Incorrect release notes: Recheck the previous tag selection and regenerate notes.
- PyPI publish failed: Verify
pyproject.tomlversions, tags, and that CI permissions are valid. - Notes too noisy: Manually curate the generated notes to only include changes for the package being released.
- Repository structure and maintainer docs: see
README.md,CONTRIBUTING.md,CHANGELOG.md. - PyPI (metapackage and sub-packages) for visibility of published versions.