AgentSkillsCN

pr-green

使 Pull Request 变为绿色的技能。一次性解决 CI 检查失败问题,并批量修复与 PR 关联的 Issue 并将其关闭。包括分析 GitHub Actions 的 CI 日志、运行本地 CI(`./scripts/ci-check.sh`)、定位并修复错误根源、清除 PR 评论及关联 Issue。修复后的 Issue 在确认后予以关闭。还支持循环模式(`/loop 5 /pr-green`),自动反复监控、修复并推送 CI。触发条件:“让 PR 变为绿色”、“通过 CI 解决”、“修复 CI 错误”、“解决 PR 的 issue”、“修复 PR”、“CI 下降”、“测试失败”、“修正 PR 的评审意见”、“使 PR 可合并”等与 PR 修复及 CI 解决相关的请求。即使未指定 PR 编号,也会自动从当前分支检测并响应。

SKILL.md
--- frontmatter
name: pr-green
description: >
  Pull Request をグリーンにするスキル。CI チェックの失敗解消と、PR に紐づく Issue の
  修正・クローズを一括で実行する。GitHub Actions の CI ログ分析、ローカル CI
  (`./scripts/ci-check.sh`)の実行、エラーの根本原因特定と修正、PR コメントや
  リンクされた Issue の解消を含む。解消した Issue は確認後にクローズする。
  ループモード(`/loop 5 /pr-green`)にも対応し、自律的に CI 監視・修正・プッシュを繰り返す。
  トリガー:「PR をグリーンにして」「CI を通して」「CI エラーを直して」
  「PR の issue を解消して」「PR を修正して」「CI が落ちている」「テストが失敗している」
  「PR のレビュー指摘を直して」「PR を mergeable にして」
  といった PR 修正・CI 解消関連リクエストで起動。PR 番号が指定されなくても、
  現在のブランチから自動検出して対応する。

PR Green スキル

PR の CI チェック失敗と紐づく Issue を解消し、PR をマージ可能な状態にする。

動作モード

モード起動方法振る舞い
対話モード/pr-green or 「CI を直して」状況報告→ユーザー確認→修正→確認→プッシュ
ループモード/loop 5 /pr-green自律的に監視・修正・コミット・プッシュ。問題なければ即終了

/loop 経由で呼ばれた場合はループモードとして動作する。判断がつかない場合は対話モードとする。

モード別の振る舞いの違い

判断ポイント対話モードループモード
状況サマリー詳細に表示し確認を取る問題がある場合のみ簡潔に表示
修正前の確認ユーザーに方針確認確認なしで修正を開始
コミット・プッシュユーザー確認後自動
Issue クローズ一覧提示→承認後クローズ自動クローズ(コメント付き)
問題なしの場合「すべてグリーンです」と報告何も出力せず即終了
結果報告詳細な修正レポート修正した場合のみ簡潔に報告
判断困難な問題ユーザーに相談スキップして報告

ワークフロー

ステップ 0: PR の特定

引数で PR 番号が指定されていればそれを使う。指定がなければ現在のブランチから自動検出する。

bash
gh pr view --json number,title,state,statusCheckRollup,url,headRefName

PR が見つからない場合は報告して終了する。

ステップ 1: 状況の把握

1a. CI チェックの状態確認

bash
gh pr checks <number>

# 失敗した CI の詳細ログ(run-id は checks 結果から特定)
gh run view <run-id> --log-failed

1b. PR に紐づく Issue の確認

PR レビューコメント(CodeRabbit 等のボットレビュー含む):

bash
gh api repos/{owner}/{repo}/pulls/<number>/reviews --jq '.[] | select(.state != "APPROVED") | {user: .user.login, state: .state, body: .body}'
gh api repos/{owner}/{repo}/pulls/<number>/comments --jq '.[] | {user: .user.login, body: .body, path: .path, line: .line, created_at: .created_at}'

PR にリンクされた Issue:

bash
gh pr view <number> --json closingIssuesReferences --jq '.closingIssuesReferences[] | {number, title}'

1c. 早期終了判定(ループモード)

以下の条件をすべて満たす場合は何もせず即終了する:

  • CI チェックがすべて成功(PASS)または実行中(PENDING)
  • 未対応のレビューコメントがない
  • リンクされた Issue がすべてクローズ済み

CI が実行中(PENDING)の場合も即終了 — 次のループ周回で結果を確認する。

1d. 状況サマリー(対話モードのみ)

対話モードでは状況サマリーを表示し、対応方針の確認を取る。

ステップ 2: CI エラーの解消

CI エラーを分類し、優先度順に対応する。

優先度エラー種別再現コマンド
1コンパイルエラーエラーメッセージから直接特定
2lint / fmt./scripts/ci-check.sh ai lint, ./scripts/ci-check.sh ai dylint
3テスト失敗./scripts/ci-check.sh ai unit-test, ./scripts/ci-check.sh ai integration-test
4clippy./scripts/ci-check.sh ai clippy
5doc テスト./scripts/ci-check.sh ai doc

各エラーに対して:再現→分析→修正→同じコマンドで検証。

ステップ 3: PR の Issue 解消

3a. レビューコメントへの対応

指摘箇所のコードを読み、指摘に沿って修正する。

3b. リンクされた Issue への対応

Issue 本文から対象コード・問題・期待動作を抽出し、修正・検証する。

3c. 解消済み Issue のクローズ

bash
gh issue close <number> --comment "$(cat <<'EOF'
## 解決確認

- PR: #<pr-number>
- 修正内容: <具体的な修正の説明>
- 確認方法: <テスト結果やコード確認の根拠>

本 PR の修正により解消されたためクローズします。
EOF
)"

対話モードではクローズ前にユーザー承認を取る。ループモードでは自動クローズする。

ステップ 4: コミット・ローカル検証・プッシュ

修正した箇所に関連するチェックのみローカルで再実行する。 フルチェックはローカルでは実行しない — CI に任せる。

対話モードではコミット・プッシュ前にユーザー確認を取る。ループモードでは自動で行う。

プッシュ後の CI 結果は、次のループ周回(ループモード)または gh pr checks --watch(対話モード)で確認する。

ステップ 5: 結果報告

対話モード: 修正内容・Issue 対応・残存事項の詳細レポート。

ループモード: 修正があった場合のみ簡潔に1行報告。修正なし(早期終了)の場合は出力なし。

完了条件

  • CIエラーがないこと
  • PRについたコメント/issueが解決できていること
  • ボーイスカウトルールを適用すること