| name | release |
| description | Release a single metriken workspace crate — bump its version, update the changelog, tag, and (gated) publish to crates.io |
metriken is a multi-crate workspace with independently versioned and
tagged crates (metriken, metriken-core, metriken-derive,
metriken-exposition, metriken-query). There is no release automation
(CI is build/test only) — releases are manual, per-crate. Tags follow
<crate>-v<version> (e.g. metriken-query-v0.11.1).
This skill releases one crate. To release several, run it once per crate,
lowest in the dependency graph first (see "Inter-crate deps" below).
Arguments
/release <crate> <level> — e.g. /release metriken-query patch.
<crate>: one of the workspace members.
<level>: patch | minor | major, or an explicit version X.Y.Z.
If either is missing, ask.
Steps
-
Prerequisites:
- On
main, clean working tree, up to date with origin/main.
git fetch origin
git branch --show-current
git status --porcelain
git rev-parse HEAD; git rev-parse origin/main
-
Checks for the crate being released:
cargo clippy -p <crate> --all-features -- -D warnings
cargo test -p <crate> --all-features
cargo fmt -p <crate> -- --check
(Whole-workspace --all-features clippy trips a pre-existing
histogram::percentiles deprecation in metriken-exposition; scope to
the crate.)
-
Determine the new version (cargo-release computes it; strips any
pre-release suffix):
cargo release version <level> -p <crate> --dry-run
-
Inter-crate deps. If the crate is depended on by others in the
workspace (e.g. metriken-exposition ← metriken-query), releasing it
may require bumping the dependents' required version. Check:
grep -rn "<crate>" */Cargo.toml
Release dependencies before dependents.
-
Create a release branch (metriken uses PRs; don't push to main directly):
git checkout -b release/<crate>-v<new-version>
-
Bump the version:
cargo release version <level> -p <crate> --execute --no-confirm
Sync Cargo.lock:
cargo update -p <crate> --precise <new-version>
-
Update CHANGELOG.md: move the crate's ### <crate> <new-version>
block out of ## Unreleased into a dated released section, and leave a
fresh empty ## Unreleased for that crate. Ask the user to review the
changelog before continuing.
-
Commit + push + PR:
git add -A
git commit -m "release: <crate> v<new-version>"
git push -u origin release/<crate>-v<new-version>
gh pr create --repo iopsystems/metriken --head release/<crate>-v<new-version> \
--title "release: <crate> v<new-version>" --body "…"
Include the Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> trailer on the commit.
-
After the PR merges to main — tag and publish. There is no
automation; these steps are manual and cargo publish is IRREVERSIBLE.
Notes
- Tag format is exactly
<crate>-v<version> — match the existing tags
(git tag --sort=-creatordate).
- Never force-push or amend.
- If
cargo-release isn't installed: cargo install cargo-release.
- Publishing order matters: a dependent crate won't publish until the
dependency version it requires is already on crates.io.