watch-ci について
codervisor/leanspec リポジトリの現在の HEAD コミットに対する GitHub Actions CI を監視するスキルです。curl で GitHub REST API を呼び出し、該当する実行を特定してジョブを追跡し、失敗ログを取得します。
主な機能
- 01コミット SHA でワークフロー実行を特定
- 02完了までジョブ状態をポーリング
- 03失敗したジョブのログを取得
- 04全体とジョブ別の結果を報告
活用シーン
- 01現在のブランチのコミットの CI を追跡
- 02Node.js と Rust のジョブ完了を待機
- 03失敗したジョブのステップとログを確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ codervisor/ leanspec --skill watch-ciインストール後、Claude Code で/watch-ciを入力して読み込まれたか確認します。
詳細
CI の監視
すべてのジョブが完了するまで、現在の HEAD コミットの GitHub Actions CI パイプラインをポーリングします。
環境
Claude VM では gh CLI を利用できません。curl 経由で GitHub REST API を使用してください。
リポジトリは codervisor/leanspec です。
手順
-
現在のコミット SHA とブランチを取得します:
SHA=$(git rev-parse HEAD) BRANCH=$(git branch --show-current) echo "Watching CI for commit $SHA on branch $BRANCH" -
正確に同じコミットに一致するワークフロー実行を探します。API は実行を新しい順に返すため、
head_shaで絞り込みます。実行がまだ表示されない場合(GitHub では数秒かかることがあります)は、10 秒待って最大 5 回再試行します:curl -sH "Accept: application/vnd.github+json" \ "https://api.github.com/repos/codervisor/lean-spec/actions/runs?branch=$BRANCH&head_sha=$SHA&per_page=1" \ | python3 -c " import json, sys data = json.load(sys.stdin) runs = data.get('workflow_runs', []) if not runs: print('NO_RUNS'); sys.exit() r = runs[0] print(f'RUN_ID={r[\"id\"]}') print(f'Status: {r[\"status\"]} Conclusion: {r.get(\"conclusion\") or \"pending\"} Commit: {r[\"head_sha\"][:8]}')" -
すべてのジョブが完了するまで、ジョブをポーリングします(Rust のビルドには約 8~10 分かかるため、60 秒ごとに確認します):
curl -sH "Accept: application/vnd.github+json" \ "https://api.github.com/repos/codervisor/lean-spec/actions/runs/$RUN_ID/jobs" \ | python3 -c " import json, sys data = json.load(sys.stdin) for j in data.get('jobs', []): steps = [s for s in j.get('steps', []) if s['status'] == 'in_progress'] step_info = f' -> {steps[0][\"name\"]}' if steps else '' print(f'{j[\"name\"]:40} {j[\"status\"]:12} {j.get(\"conclusion\") or \"\"}{step_info}')" -
失敗した場合は、原因を調査するために失敗したジョブのログを取得します:
curl -sH "Accept: application/vnd.github+json" \ "https://api.github.com/repos/codervisor/lean-spec/actions/runs/$RUN_ID/jobs" \ | python3 -c " import json, sys data = json.load(sys.stdin) for j in data.get('jobs', []): if j.get('conclusion') == 'failure': print(f'FAILED: {j[\"name\"]} (id: {j[\"id\"]})') for s in j.get('steps', []): if s.get('conclusion') == 'failure': print(f' Step: {s[\"name\"]}')"
CI の構成
- node(約 2 分):pnpm のインストール、ビルド、型チェック、テスト
- rust(約 8~10 分、node に依存):cargo fmt、clippy、ビルド、テスト、TS バインディングのエクスポート
報告
各ポーリングのサイクルで、ユーザーに簡潔な状況を報告します。完了したら、以下を要約します:
- 全体の結果(成功/失敗)
- ジョブごとの結果
- 失敗した場合:失敗したステップと関連するエラー出力
コメント
Markdown 対応