Releases
Semantic versioning via release-please
Release-Please tracks conventional commits on main and maintains an open PR that cuts a version when merged.
Releases are archive markers, not deploy triggers. Every merge to main deploys to prod continuously via the CI/CD pipeline — see CI/CD. Merging a release PR creates a tag (v0.4.0) and a GitHub Release that pins the image versions for traceability. The code is already live.
Flow
Commit normally
feat: bumps minor, fix: patches, feat!: or BREAKING CHANGE: bumps major. Release-Please accumulates these on its open PR.
Review the release PR
GitHub lists it as chore(main): release X.Y.Z. The diff is the generated changelog and the version bumps across pyproject.toml / package.json / VERSION.
Merge it
Release-Please creates the git tag and GitHub Release. CI's annotate-release job lists the corresponding image references in the release body.
| Commit type | Version bump |
|---|---|
fix: | patch |
feat: | minor |
feat!: or BREAKING CHANGE: | major |
chore:, docs:, refactor:, test: | none (still in changelog) |
What gets updated
VERSIONCHANGELOG.md(root and per-package)pyproject.toml/package.jsonversions across the monorepo- Git tag + GitHub Release
- Image tags (built during the tag push CI run)
Pre-releases
Edit the VERSION in the release PR to add -rc.1 before merging. Release-Please preserves the suffix.
Configuration
.github/workflows/release-please.yml.github/release-please-config.json.github/.release-please-manifest.json
Troubleshooting
No release PR appears. No version-bumping commits landed since the last release. Push a feat: or fix: commit.
Release PR stale. Close it, push any commit, Release-Please re-opens.
Skip a release. Just don't merge the PR. It accumulates the next time.