| name | release |
| description | Release new versions of changed packages |
/release
Release new versions of changed packages.
How releases work
This project uses release-plz for automated releases. Version is determined by conventional commits (fix: → patch, feat: → minor, feat!: → major).
Each package has its own version and changelog. release-plz opens a PR only for packages with changes since their last release. s2-cli and s2-lite are in the same version_group (released together). s2-api, s2-common, s2-storage, and s2-resource-spec are library packages for internal use (published to crates.io but no GitHub releases).
Tags are per-package: s2-cli-v{version}, s2-lite-v{version}, s2-api-v{version}, s2-common-v{version}, s2-storage-v{version}, s2-resource-spec-v{version}.
Usage
/release
Steps
-
Find the release PR
gh pr list --label release --state open
-
Identify which packages are being released
-
For each package being released, verify its changelog
-
If discrepancies found
- First, check if
release-crates is still running from a prior release. release-plz triggers on pushes to main, while release-crates triggers when a PR with the release label is merged. If a previous release PR was just merged, release-crates may still be running and hasn't created tags yet. If release-plz runs before those tags exist, the PR will have stale changelogs with duplicate entries from the previous release.
gh run list --workflow=release-crates.yml --limit 1
- If a run is in progress, wait for it to complete so tags are up to date:
gh run watch <RUN_ID> --exit-status
- Then re-trigger release-plz and wait:
gh workflow run release-plz.yml
gh run list --workflow=release-plz.yml --limit 1
gh run watch <RUN_ID> --exit-status
- Re-verify the changelog from step 3 before proceeding.
-
Dry run before merging (only for packages being released)
cargo publish -p <package-name> --dry-run
-
If changelog is correct: Merge the PR
gh pr merge <PR_NUMBER> --squash
If no release PR exists
gh workflow run release-plz.yml
Wait for the PR to be created, then verify and merge.
Notes
- Check workflow status:
gh run list --workflow=release-plz.yml
- After merge,
release-crates.yml publishes to crates.io and creates per-package git tags
- Tags like
s2-cli-v* or s2-lite-v* trigger release-cli.yml (builds binaries, Docker images, updates Homebrew)
- To override version: edit the relevant package's
Cargo.toml in the PR before merging