OpenRouter-rs Release
Overview
Use this skill to run the full release workflow for:
openrouter-rs (SDK)
openrouter-cli (CLI crate)
Always update versioned files/docs together before tagging.
Unified Publish Policy (Required)
Use GitHub Actions as the single publish path for both SDK and CLI releases.
- Do not run local
cargo publish as the default release path.
- Publish by pushing release tags and letting workflows perform verify/publish/release jobs.
- Local
cargo publish is emergency-only fallback.
Repository Policy And Ordering (Required)
- Assume
main is protected. Do not assume direct pushes are allowed.
- Push release prep to a release branch, open a PR to
main, and wait for required checks plus repository review policy before merging.
- If the repo policy blocks merge until review, do not treat green checks alone as sufficient.
- If releasing
openrouter-rs and openrouter-cli together, publish the SDK first when the CLI depends on the new SDK version from crates.io.
- After the SDK release is live on crates.io, rerun CLI package validation and only then push
openrouter-cli-v<version>.
Release Inputs
Collect these values first:
- Target package (
openrouter-rs or openrouter-cli)
- Target version (for example
0.6.0 or 0.1.0)
- Release date in
YYYY-MM-DD
- Summary bullets grouped by
Added, Changed, Fixed (reuse from CHANGELOG.md when possible)
Update Versioned Files (SDK: openrouter-rs)
Apply updates in this order to avoid drift.
- Update package version in
Cargo.toml.
- Update README installation snippet version (
openrouter-rs = "...").
- Update any outdated docs snippet that pins a crate version (notably
src/lib.rs doctext if present).
- Update
CHANGELOG.md:
- Move finalized items from
## [Unreleased] into a new version section.
- Create
## [<version>] - <date> with ### Added/### Changed/### Fixed headings as needed.
- Keep
## [Unreleased] at the top for next cycle.
- If
## [Unreleased] is empty for a patch release, derive concise user-visible bullets from commits merged since the previous release tag instead of shipping an empty release section.
- Update README bottom
## 📈 Release History:
- Insert a new
### Version <version> *(Latest)* section at the top of the history list.
- Remove
*(Latest)* marker from the previous latest version.
- Copy concise release bullets aligned with the changelog section.
Use references/release-targets.md to verify exact files and grep checks.
Update Versioned Files (CLI: openrouter-cli)
When target is openrouter-cli:
- Update
crates/openrouter-cli/Cargo.toml version.
- Ensure
openrouter-rs dependency has both path and version.
- Update
crates/openrouter-cli/README.md installation snippets/versioned URLs if present.
- Ensure CLI release workflow contract remains valid:
- tag pattern:
openrouter-cli-v*.*.*
- tag version matches
crates/openrouter-cli/Cargo.toml.
Validate Before Commit
Run local checks in this order:
just quality
bash .agents/skills/openrouter-rs-release/scripts/verify_release_sync.sh <sdk-version> for SDK releases
just quality-ci if you touched CLI behavior, migration docs, or CI-aligned release/test flows
cargo package --locked on a clean tree, or cargo package --locked --allow-dirty before commit, for SDK release validation
For CLI releases, also run:
cargo test -p openrouter-cli
cargo package -p openrouter-cli --locked on a clean tree, or cargo package -p openrouter-cli --locked --allow-dirty before commit
Important CLI packaging rule:
cargo package -p openrouter-cli validates against crates.io, not the workspace path dependency.
- If
crates/openrouter-cli/Cargo.toml now requires a just-bumped openrouter-rs version that is not yet published, this package step will fail until the SDK release is live on crates.io.
- In that case, validate CLI tests in the PR, merge the release prep, publish
v<sdk-version>, wait until crates.io resolves the new SDK version, then rerun CLI packaging and push openrouter-cli-v<cli-version>.
If verify_release_sync.sh reports mismatch, fix files before commit/tag.
Commit, Tag, and Publish
When all checks pass:
- Commit release prep changes on a release branch.
- Open and merge a PR to
main according to repo policy.
- Fast-forward local
main to the merged commit before tagging.
- Create and push release tag:
- SDK:
v<version>
- CLI:
openrouter-cli-v<version>
- Confirm GitHub Actions release workflow passes:
- SDK workflow:
Release
- verify job
- crates.io publish (requires
CARGO_REGISTRY_TOKEN)
- GitHub release creation
- CLI workflow:
CLI Release
- verify job
- crates.io publish (
openrouter-cli, requires CARGO_REGISTRY_TOKEN)
- binary build matrix +
SHA256SUMS
- GitHub release assets upload
Release Note Composition
Use CHANGELOG.md as the source of truth.
- Keep GitHub release notes and README bottom latest bullets semantically aligned.
- Prefer concise bullets that explain user-visible impact.
- Mention breaking changes explicitly.
Quick Execution Checklist
Source: realmorrisliu/openrouter-rs — distributed by TomeVault.
1---2name: openrouter-rs-release3description: Prepare and publish a new openrouter-rs or openrouter-cli release with consistent version updates, release notes, PR-first branch-protected workflow, and correct SDK-before-CLI sequencing when the CLI depends on a fresh SDK version. Use when asked to cut a release, bump crate versions, publish to crates.io, update changelog entries, refresh README installation versions, or update the README release history. Use when this capability is needed.4---56# OpenRouter-rs Release78## Overview910Use this skill to run the full release workflow for:11- `openrouter-rs` (SDK)12- `openrouter-cli` (CLI crate)1314Always update versioned files/docs together before tagging.1516## Unified Publish Policy (Required)1718Use GitHub Actions as the single publish path for both SDK and CLI releases.1920- Do not run local `cargo publish` as the default release path.21- Publish by pushing release tags and letting workflows perform verify/publish/release jobs.22- Local `cargo publish` is emergency-only fallback.2324## Repository Policy And Ordering (Required)2526- Assume `main` is protected. Do not assume direct pushes are allowed.27- Push release prep to a release branch, open a PR to `main`, and wait for required checks plus repository review policy before merging.28- If the repo policy blocks merge until review, do not treat green checks alone as sufficient.29- If releasing `openrouter-rs` and `openrouter-cli` together, publish the SDK first when the CLI depends on the new SDK version from crates.io.30- After the SDK release is live on crates.io, rerun CLI package validation and only then push `openrouter-cli-v<version>`.3132## Release Inputs3334Collect these values first:3536- Target package (`openrouter-rs` or `openrouter-cli`)37- Target version (for example `0.6.0` or `0.1.0`)38- Release date in `YYYY-MM-DD`39- Summary bullets grouped by `Added`, `Changed`, `Fixed` (reuse from `CHANGELOG.md` when possible)4041## Update Versioned Files (SDK: openrouter-rs)4243Apply updates in this order to avoid drift.44451. Update package version in `Cargo.toml`.462. Update README installation snippet version (`openrouter-rs = "..."`).473. Update any outdated docs snippet that pins a crate version (notably `src/lib.rs` doctext if present).484. Update `CHANGELOG.md`:49- Move finalized items from `## [Unreleased]` into a new version section.50- Create `## [<version>] - <date>` with `### Added`/`### Changed`/`### Fixed` headings as needed.51- Keep `## [Unreleased]` at the top for next cycle.52- If `## [Unreleased]` is empty for a patch release, derive concise user-visible bullets from commits merged since the previous release tag instead of shipping an empty release section.535. Update README bottom `## 📈 Release History`:54- Insert a new `### Version <version> *(Latest)*` section at the top of the history list.55- Remove `*(Latest)*` marker from the previous latest version.56- Copy concise release bullets aligned with the changelog section.5758Use [references/release-targets.md](references/release-targets.md) to verify exact files and grep checks.5960## Update Versioned Files (CLI: openrouter-cli)6162When target is `openrouter-cli`:63641. Update `crates/openrouter-cli/Cargo.toml` version.652. Ensure `openrouter-rs` dependency has both `path` and `version`.663. Update `crates/openrouter-cli/README.md` installation snippets/versioned URLs if present.674. Ensure CLI release workflow contract remains valid:68- tag pattern: `openrouter-cli-v*.*.*`69- tag version matches `crates/openrouter-cli/Cargo.toml`.7071## Validate Before Commit7273Run local checks in this order:74751. `just quality`762. `bash .agents/skills/openrouter-rs-release/scripts/verify_release_sync.sh <sdk-version>` for SDK releases773. `just quality-ci` if you touched CLI behavior, migration docs, or CI-aligned release/test flows784. `cargo package --locked` on a clean tree, or `cargo package --locked --allow-dirty` before commit, for SDK release validation7980For CLI releases, also run:81821. `cargo test -p openrouter-cli`832. `cargo package -p openrouter-cli --locked` on a clean tree, or `cargo package -p openrouter-cli --locked --allow-dirty` before commit8485Important CLI packaging rule:8687- `cargo package -p openrouter-cli` validates against crates.io, not the workspace path dependency.88- If `crates/openrouter-cli/Cargo.toml` now requires a just-bumped `openrouter-rs` version that is not yet published, this package step will fail until the SDK release is live on crates.io.89- In that case, validate CLI tests in the PR, merge the release prep, publish `v<sdk-version>`, wait until crates.io resolves the new SDK version, then rerun CLI packaging and push `openrouter-cli-v<cli-version>`.9091If `verify_release_sync.sh` reports mismatch, fix files before commit/tag.9293## Commit, Tag, and Publish9495When all checks pass:96971. Commit release prep changes on a release branch.982. Open and merge a PR to `main` according to repo policy.993. Fast-forward local `main` to the merged commit before tagging.1004. Create and push release tag:101- SDK: `v<version>`102- CLI: `openrouter-cli-v<version>`1035. Confirm GitHub Actions release workflow passes:104- SDK workflow: `Release`105- verify job106- crates.io publish (requires `CARGO_REGISTRY_TOKEN`)107- GitHub release creation108- CLI workflow: `CLI Release`109- verify job110- crates.io publish (`openrouter-cli`, requires `CARGO_REGISTRY_TOKEN`)111- binary build matrix + `SHA256SUMS`112- GitHub release assets upload113114## Release Note Composition115116Use `CHANGELOG.md` as the source of truth.117118- Keep GitHub release notes and README bottom latest bullets semantically aligned.119- Prefer concise bullets that explain user-visible impact.120- Mention breaking changes explicitly.121122## Quick Execution Checklist123124- SDK checklist:125- [ ] `Cargo.toml` version bumped126- [ ] README installation version updated127- [ ] `src/lib.rs` pinned crate snippet updated (if present)128- [ ] `CHANGELOG.md` new version section created129- [ ] README bottom Release History latest section updated130- [ ] local checks passed (`just quality`)131- [ ] version sync script passed132- [ ] SDK package validation passed133- [ ] release prep merged to `main`134- [ ] tag `v<version>` pushed135- [ ] `Release` workflow green136137- CLI checklist:138- [ ] `crates/openrouter-cli/Cargo.toml` version bumped139- [ ] CLI README install notes updated140- [ ] CLI tests passed in PR (`cargo test -p openrouter-cli`)141- [ ] SDK version is live on crates.io if CLI depends on it142- [ ] CLI package validation passed143- [ ] release prep merged to `main`144- [ ] tag `openrouter-cli-v<version>` pushed145- [ ] `CLI Release` workflow green (publish + binaries + checksums)146147---148> Source: [realmorrisliu/openrouter-rs](https://github.com/realmorrisliu/openrouter-rs) — distributed by [TomeVault](https://tomevault.io).149<!-- tomevault:4.0:skill_md:2026-06-24 -->