This repository uses release-please for automated releases.
Individual commit messages can be written freely. However, PR titles must follow the conventional commits format - <type>(<optional scope>): <description> - this is enforced by the pr-title.yml workflow.
Supported types:
| Type | Description | Version bump |
|---|---|---|
feat |
New feature | MINOR |
fix |
Bug fix | PATCH |
perf |
Performance improvement | PATCH |
refactor |
Code refactoring | — |
docs |
Documentation only | — |
test |
Adding/updating tests | — |
ci |
CI/CD changes | — |
chore |
Maintenance tasks | — |
revert |
Revert a previous change | — |
For breaking changes - add ! after the type to trigger a MAJOR version bump, e.g. feat!: remove deprecated API
- Merge PRs to
main- merge PRs with conventional PR titles. - Draft release PR -
release-pleaseruns on every push tomainand automatically creates or updates a draft PR titledchore(main): release X.Y.Zwith an updatedCHANGELOG.md. The next version is determined from merged PR titles. - Review and merge the release PR - once the team is ready to release, review the release PR and merge it.
release-pleasethen creates the git tag (e.g.v0.2.0) and a GitHub Release with generated release notes. - Automated publish - after the tag and GitHub Release are created,
publish.ymlbuilds, smoke-tests and publishes the package to PyPI.
The package version is not hardcoded - it is derived from git tags at build time via hatch-vcs. No manual version bumping is needed.
To validate a build before an official release, trigger the publish-testpypi.yml workflow manually from the Actions tab. It runs the same build and smoke-test steps, then publishes to TestPyPI.