github-workflow-auto-fix について
GitHub Actions の CI 失敗を自動修正する仕組みを設定する Claude Code Action スキルです。リポジトリの保守担当者向けに、監視対象の選定、前提条件の確認、設定の検証を支援します。
主な機能
- 01ワークフローとシークレットの確認
- 02監視に適した CI の自動検出
- 03名前を指定した監視対象の選択
- 04設定変更のドライラン
- 05YAML と前提条件の検証
活用シーン
- 01CI 失敗の自動修正を設定
- 02修正を起動するワークフローの変更
- 03自動修正の設定要件を確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ laurigates/ claude-plugins --skill github-workflow-auto-fixインストール後、Claude Code で/github-workflow-auto-fixを入力して読み込まれたか確認します。
詳細
GitHub Workflow の自動修正
Claude Code Action を使用した、CI 失敗の自動分析と修正です。
このスキルを使う場面
| 次の場合にこのスキルを使用します... | 次の場合は別のものを使用します... |
|---|---|
| リポジトリに自動修正ワークフローを設定する | 1 つの PR のチェックを修正する(/git:fix-pr) |
| 自動修正をトリガーするワークフローをカスタマイズする | ワークフローの実行を手動で調べる(/workflow:inspect) |
| 自動修正のパターンを理解する | ワークフローを一から新規作成する(/workflow:dev) |
コンテキスト
- ワークフローの有無: !
find .github/workflows -maxdepth 1 -name 'github-workflow-auto-fix.yml' - 現在のワークフロー: !
find .github/workflows -maxdepth 1 -name '*.yml' -type f - Claude のシークレット設定: !
gh secret list
パラメーター
$ARGUMENTS から解析します:
--setup:.github/workflows/に自動修正ワークフローを作成または更新します--workflows <names>:監視対象のワークフロー名をカンマ区切りで指定します(デフォルト:CI ワークフローを自動検出)--dry-run:ファイルを書き込まず、作成される内容を表示します
実行
次のワークフロー設定プロセスを実行します:
ステップ 1:現在の状態を確認する
.github/workflows/github-workflow-auto-fix.ymlがすでに存在するか確認します- 現在のすべてのワークフローファイルと、その
name:フィールドを一覧表示します CLAUDE_CODE_OAUTH_TOKENシークレットが設定されているか確認します
ステップ 2:監視するワークフローを選択する
--workflows が指定されている場合は、それを使用します。指定されていない場合は、適切なワークフローを自動検出します:
自動修正の監視に適した候補:
- CI/テストワークフロー(lint、test、build、type-check)
- コード品質チェック(フォーマット、スタイル)
- 設定検証ワークフロー
次のワークフローは除外します(自動修正には適していません):
- リリースワークフロー(release-please、deploy)
- Claude を使用するワークフロー(再帰的なトリガーを避けるため)
- スケジュール実行される監査ワークフロー
- 再利用可能なワークフロー定義
ステップ 3:ワークフローファイルを生成する
--setup が指定されている場合、またはワークフローが存在しない場合は、.github/workflows/github-workflow-auto-fix.yml を作成します。
ワークフローの表示名は <Domain>: <Action> に従います(workflow_run によってトリガーされる修正の標準ドメインは Auto-fix: です。YAML では : がキーの区切り文字として扱われるため、値は引用符で囲みます)。workflows: の下にある文字列は、対象ワークフローの表示名と完全に一致させる必要があります。対象の name: が変更された場合は、両方を更新してください。.claude/rules/workflow-naming.md を参照してください。
name: "Auto-fix: CI failures"
on:
workflow_run:
workflows:
# List monitored workflows by display name (must match their `name:` exactly)
- "Test: Suite"
- "Plugin: Lint skills"
types: [completed]
concurrency:
group: auto-fix-${{ github.event.workflow_run.head_branch }}
cancel-in-progress: false
permissions:
contents: write
pull-requests: write
issues: write
actions: read
id-token: write
jobs:
auto-fix:
if: >-
github.event.workflow_run.conclusion == 'failure' &&
github.event.workflow_run.actor.type != 'Bot' &&
github.event.workflow_run.head_branch != 'main' &&
github.event.workflow_run.head_branch != 'master'
runs-on: ubuntu-latest
steps:
- name: Checkout failed branch
uses: actions/checkout@v4
with:
ref: ${{ github.event.workflow_run.head_branch }}
fetch-depth: 0
- name: Gather failure context
id: context
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
RUN_ID="${{ github.event.workflow_run.id }}"
gh run view "$RUN_ID" --log-failed 2>&1 | tail -500 > .auto-fix-failed-logs.txt
gh run view "$RUN_ID" --json conclusion,status,name,headBranch,headSha,jobs > .auto-fix-run-summary.json
PR_NUMBER=$(gh pr list --head "${{ github.event.workflow_run.head_branch }}" --json number --jq '.[0].number' 2>/dev/null || echo "")
echo "pr_number=$PR_NUMBER" >> "$GITHUB_OUTPUT"
echo "run_id=$RUN_ID" >> "$GITHUB_OUTPUT"
RECENT_FIX=$(git log --oneline -5 --format='%s' | grep -c 'fix:.*resolve CI failure' || true)
echo "recent_fix_count=$RECENT_FIX" >> "$GITHUB_OUTPUT"
- name: Skip if already attempted
if: steps.context.outputs.recent_fix_count != '0'
run: echo "::notice::Skipping - recent auto-fix commit exists"
- name: Analyze and fix with Claude
if: steps.context.outputs.recent_fix_count == '0'
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
direct_prompt: |
<analysis-and-fix-prompt>
additional_permissions: |
Read
Write
Edit
Grep
Glob
Bash(git *)
Bash(gh *)
ステップ 4:検証して報告する
- ワークフローの YAML が有効であることを確認します
- 監視対象のワークフローを一覧表示します
- 必須のシークレットが存在することを確認します
- 不足している前提条件があれば報告します
アーキテクチャ
workflow_run (failure)
|
v
Gather logs & context
|
v
Claude analyzes failure
|
+---+---+
| |
v v
Fixable Complex/External
| |
v v
Fix & Open issue
push with analysis
| |
v v
Comment Comment on PR
on PR linking issue
安全ガード
| ガード | 目的 |
|---|---|
actor.type != 'Bot' | ボットがトリガーするループを防止します |
head_branch != 'main' | main ブランチを直接自動修正しないようにします |
| 最近の修正チェック | 自動修正がすでに試行されている場合はスキップします |
| 並行処理グループ | ブランチごとに一度に 1 つの自動修正のみ実行します |
max-turns 30 | Claude の反復回数を制限します |
前提条件
| 要件 | 設定方法 |
|---|---|
CLAUDE_CODE_OAUTH_TOKEN | Claude Code OAuth トークンを含むリポジトリシークレット |
contents: write 権限 | ワークフローの権限に含まれています |
pull-requests: write 権限 | ワークフローの権限に含まれています |
issues: write 権限 | 複雑な失敗に関する issue を作成するために必要です |
エージェント向けの最適化
| コンテキスト | コマンド |
|---|---|
| 最近の失敗を確認する | gh run list --status failure --json name,headBranch,conclusion -L 10 |
| 失敗したログを取得する | gh run view <id> --log-failed | tail -500 |
| 実行の概要 | gh run view <id> --json conclusion,status,jobs |
| 関連する PR を見つける | gh pr list --head <branch> --json number --jq '.[0].number' |
| ワークフロー名を一覧表示する | grep -h '^name:' .github/workflows/*.yml |
コメント
Markdown 対応