release-check について
jackin のメンテナー向けリリース準備確認スキルです。CI、ローカルテスト、コード品質、ドキュメントリンクなどを確認し、準備状況のレポートにまとめます。
主な機能
- 01CI 状態の確認
- 02テスト、Clippy、フォーマットの実行
- 03直接コミットとドキュメントリンクの確認
- 04TODO の鮮度確認
- 05セキュリティ例外の確認
活用シーン
- 01リリース前の準備状況の評価
- 02リリースを妨げるテストや CI の問題の特定
- 03リンク、セキュリティ例外、古いタスクの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ jackin-project/ jackin-dev --skill release-checkインストール後、Claude Code で/release-checkを入力して読み込まれたか確認します。
詳細
リリースチェック
jackin プロジェクトのリリース前検証です。一連のチェックを実行し、リリース準備状況レポートを作成します。
使用するタイミング
/releaseを実行する前- プロジェクトがリリース可能な状態か確認したいとき
- 前回のリリースチェックで見つかった問題を修正した後
プロセス
各チェックを順番に実行します。結果をリリース準備状況レポートにまとめます。
チェック 1:CI ステータス
main の最新の CI 実行が成功していることを確認します。
gh run list --workflow=ci.yml --branch=main --limit=1 --json status,conclusion --jq '.[0]'
conclusion が success でない場合は FAIL と報告して終了します。
また、前回のタグから対象パスに変更があった場合は、パス固有のワークフローも確認します。
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
# Check if docker/construct/** changed since last tag
if [ -n "$LAST_TAG" ] && [ -n "$(git diff --name-only "$LAST_TAG"..HEAD -- docker/construct/)" ]; then
gh run list --workflow=construct.yml --branch=main --limit=1 --json status,conclusion --jq '.[0]'
fi
# Check if docs/** changed since last tag
if [ -n "$LAST_TAG" ] && [ -n "$(git diff --name-only "$LAST_TAG"..HEAD -- docs/)" ]; then
gh run list --workflow=docs.yml --branch=main --limit=1 --json status,conclusion --jq '.[0]'
fi
結果を PASS、FAIL、または SKIP(対象パスに変更がない場合)として報告します。
チェック 2:ローカルテスト
cargo test --locked
テストが1つでも失敗した場合は FAIL と報告して終了します。
チェック 3:Clippy
cargo clippy -- -D warnings
clippy が警告をエラーとして報告した場合は FAIL と報告して終了します。
チェック 4:フォーマットチェック
cargo fmt --check
フォーマット違反が見つかった場合は FAIL と報告して終了します。
チェック 5:直接コミットに関する警告
前回のタグ以降のコミットから、PR によるマージコミットではないものを探します。
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -n "$LAST_TAG" ]; then
git log "$LAST_TAG"..HEAD --oneline --no-merges
fi
各コミットについて、PR に含まれていたか確認します。
gh pr list --state merged --search "<commit-sha>" --json number --jq '.[0].number'
どの PR にも関連付けられていないコミットがある場合は、一覧とともに WARN と報告します。リリースはブロックしません。
チェック 6:ドキュメントリンクの検証
docs/content/docs/ 内の壊れた内部リンクを確認します。
- Markdown ファイルを読み込み、内部リンク(相対パス、
href属性)を抽出します - リンク先のファイルが存在することを確認します
- 外部 URL は HTTP 200 を返すことを確認します(レート制限のあるドメインはスキップします)
壊れたリンクの一覧とともに PASS または WARN と報告します。
チェック 7:TODO の最新性
TODO.md と todo/ 内のすべてのファイルを読み込みます。
- すでに完了した作業に関する項目がないか確認します(該当するコミットやクローズ済みの PR を探します)
- 古くなった項目がないか確認します(最近のコミットに関連する動きがないもの)
確認結果とともに PASS または WARN と報告します。
チェック 8:セキュリティ例外
SECURITY_EXCEPTIONS.md を読み込み、内容をユーザーに提示します。
次のように質問します。「これらのセキュリティ例外は現在も有効ですか?(yes/no)」
ユーザーが no と回答した場合は REVIEW と報告します。リリース前にユーザーがファイルを更新する必要があります。
ユーザーが yes と回答した場合は PASS と報告します。
チェック 9:Docker ビルドステータス
前回のタグから Docker 関連ファイルに変更があったか確認します。
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
CONSTRUCT_CHANGED=$(git diff --name-only "$LAST_TAG"..HEAD -- docker/construct/ 2>/dev/null)
RUNTIME_CHANGED=$(git diff --name-only "$LAST_TAG"..HEAD -- docker/runtime/ 2>/dev/null)
変更があった場合は、construct.yml ワークフローが成功したことを確認します(チェック 1 ですでに確認済みです)。PASS または SKIP と報告します。
出力
構造化されたリリース準備状況レポートを提示します。
Release Readiness Report
========================
✓ CI: all workflows green
✓ Local tests: N passed, 0 failed
✓ Clippy: no warnings
✓ Format: clean
⚠ Direct commits: N commits since vX.Y.Z not from PRs
- <sha> <message>
✓ Doc links: all valid
✓ TODOs: up to date
? Security exceptions: review required (N items)
✓ Docker: builds pass (or: no changes, skipped)
Result: PASS | REVIEW NEEDED | FAIL
ブロック対象と非ブロック対象
| チェック | 失敗時の動作 |
|---|---|
| CI ステータス | BLOCK — CI が失敗している状態ではリリースできません |
| ローカルテスト | BLOCK — テストが失敗している状態ではリリースできません |
| Clippy | BLOCK — clippy エラーがある状態ではリリースできません |
| フォーマット | BLOCK — fmt 違反がある状態ではリリースできません |
| 直接コミット | WARN — 一覧を表示しますが、リリースはブロックしません |
| ドキュメントリンク | WARN — 壊れたリンクを表示しますが、リリースはブロックしません |
| TODO の最新性 | WARN — 古くなった項目を表示しますが、リリースはブロックしません |
| セキュリティ例外 | REVIEW — ユーザーに確認し、no の場合のみリリースをブロックします |
| Docker ビルド | 変更があり CI が失敗した場合は BLOCK、変更がない場合は SKIP |