SKILL.md
Cargo Release Workflow
Rust/Cargoプロジェクトのリリース手順を実行するスキル。
引数
| 引数 | 必須 | 説明 |
|---|---|---|
| version | Yes | リリースするバージョン(例: 0.2.0) |
使用例
/cargo-release 0.2.0
実行フロー
Phase 1: 事前確認
- 引数検証
- バージョン引数が指定されていることを確認 - semver形式(X.Y.Z)であることを確認
- 現在のバージョン確認
``bash grep '^version' Cargo.toml ``
- git状態確認
``bash git status --porcelain `` - ワーキングディレクトリがクリーンでない場合は警告して中断
- 既存タグ一覧確認
``bash git tag --list 'v*' --sort=-version:refname | head -10 `` - 同じバージョンのタグが既に存在する場合は中断
Phase 2: バージョン更新
- Cargo.tomlのバージョン更新
``bash # Cargo.toml の version = "X.Y.Z" を更新 ``
- Cargo.lockの更新
``bash cargo check ``
- テスト実行
``bash cargo test `` - 失敗した場合は中断
Phase 3: コミット & プッシュ
- 変更をコミット
``bash git add Cargo.toml Cargo.lock git commit -m "chore: bump version to {version}" ``
- mainブランチにプッシュ
``bash git push origin main ``
Phase 4: リリースワークフロー起動
- バンプコミットのSHA取得
``bash BUMP_SHA=$(git rev-parse HEAD) ``
- ワークフロー起動
``bash gh workflow run release.yml -f version={version} -f bumpsha=$BUMPSHA ``
- 進捗確認用コマンドを表示
`` gh run list --workflow=release.yml --limit 1 gh run watch <run-id> `` - ワークフローがtest/build/release/publishを自動実行 - 失敗時はバンプコミットのrevert PRが自動作成される(マージは手動)
前提条件
ghCLIがインストール・認証済み- mainブランチにいること
- ワーキングディレクトリがクリーンであること
- リポジトリに
CARGOREGISTRYTOKENシークレットが設定済み(crates.io publish用)
注意事項
- ワークフローが失敗した場合、バンプコミットのrevert PR(
revert-bump-v{version}ブランチ)が自動作成される(ただしHEADが移動していない場合のみ)。mainのルールセットがPR必須のためワークフローからは直接pushできず、マージはユーザーの手動操作 cargo publishの失敗ではrollbackされない(GitHub Releaseは成功済みのため)
エラー時のリカバリ
validate/test/build/release の失敗
- rollbackジョブがrevert PRの作成とタグ/リリース削除を自動実行する
- fix-forwardする場合(原因を修正して同じバージョンで再リリース): revert PRをクローズし、修正をmainに反映後、新HEADのSHAで
gh workflow run release.yml -f version={version} -f bumpsha=$(git rev-parse HEAD)を再実行(bumpshaはorigin/mainのHEADであれば、バンプコミット自体でなくてよい) - リリースを取りやめる場合: revert PRをマージしてバンプを打ち消し、原因修正後にPhase 2 からやり直す
publish のみ失敗(GitHub Release は成功済み)
- 推奨: GitHub Actions UI から "Re-run failed jobs" で
publishジョブのみ再実行 - 手動: ローカルで
cargo publish -p octorusを実行(CARGOREGISTRYTOKENが必要) - 注意:
gh workflow runでの再実行はタグ重複バリデーションで失敗するため使用不可
ネットワークエラー(ワークフロー起動自体の失敗)
gh workflow run release.yml -f version={version} -f bumpsha=$BUMPSHAで再試行