mcpField
G
github-workflow-auto-fix

github-workflow-auto-fix

github.com/laurigatesクラウド・DevOps5938 回インストール1 日前に更新
リポジトリ

github-workflow-auto-fix について

GitHub Actions の CI 失敗を自動修正する仕組みを設定する Claude Code Action スキルです。リポジトリの保守担当者向けに、監視対象の選定、前提条件の確認、設定の検証を支援します。

主な機能

  1. 01ワークフローとシークレットの確認
  2. 02監視に適した CI の自動検出
  3. 03名前を指定した監視対象の選択
  4. 04設定変更のドライラン
  5. 05YAML と前提条件の検証

活用シーン

  1. 01CI 失敗の自動修正を設定
  2. 02修正を起動するワークフローの変更
  3. 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:現在の状態を確認する
  1. .github/workflows/github-workflow-auto-fix.yml がすでに存在するか確認します
  2. 現在のすべてのワークフローファイルと、その name: フィールドを一覧表示します
  3. 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:検証して報告する
  1. ワークフローの YAML が有効であることを確認します
  2. 監視対象のワークフローを一覧表示します
  3. 必須のシークレットが存在することを確認します
  4. 不足している前提条件があれば報告します

アーキテクチャ

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 30Claude の反復回数を制限します

前提条件

要件設定方法
CLAUDE_CODE_OAUTH_TOKENClaude 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

コメント