mergegate/.github/workflows/copilot-watchdog.yml
林 駿甫 (Shunsuke Hayashi) 2d500c3654 feat(ci): add Copilot full automation pipeline
- copilot-assign.yml: GraphQL agentAssignment
- ai-review.yml: Claude Opus auto-review
- auto-merge.yml: CI + APPROVE squash merge
- decompose.yml: Issue decomposition + sub-issues

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 21:48:22 +09:00

60 lines
2.1 KiB
YAML

name: Copilot CI Watchdog
# app/copilot-swe-agent が作成した PR の CI/AI-review が
# "action_required" (0 jobs) でブロックされる構造的問題を自動修復する。
#
# 根本原因:
# GitHub が app/copilot-swe-agent を "outside collaborator" と判定し、
# pull_request トリガーのワークフローを実行前にブロックする。
# → action_required (0 jobs) となり CI/AI-review が一切動かない。
#
# 対策:
# 15分ごとに copilot/** ブランチの action_required ランを自動 rerun する。
# rerun は GITHUB_TOKEN で実行できるため人手不要。
on:
schedule:
- cron: '*/15 * * * *'
workflow_dispatch:
permissions:
actions: write
jobs:
watchdog:
name: Re-run blocked Copilot workflows
runs-on: ubuntu-latest
steps:
- name: Re-run action_required CI and AI Review runs
env:
GH_TOKEN: ${{ github.token }}
run: |
set -euo pipefail
REPO="${{ github.repository }}"
RERUN_COUNT=0
for WF in "CI" "AI Code Review"; do
echo "=== Checking: $WF ==="
IDS=$(gh run list --repo "$REPO" --workflow "$WF" --limit 20 \
--json databaseId,conclusion,headBranch,createdAt \
--jq '[group_by(.headBranch)[] | max_by(.createdAt) | select(.conclusion == "action_required" and (.headBranch | startswith("copilot/")))] | .[].databaseId' \
2>/dev/null || true)
if [ -z "$IDS" ]; then
echo " No blocked runs for \"$WF\""
continue
fi
while IFS= read -r RUN_ID; do
[ -z "$RUN_ID" ] && continue
echo " Rerunning run #$RUN_ID ($WF)..."
gh run rerun "$RUN_ID" --repo "$REPO" 2>&1 && RERUN_COUNT=$((RERUN_COUNT + 1)) || echo " -> Skipped (already running or not rerunnable)"
done <<< "$IDS"
done
echo ""
echo "Total reruns triggered: $RERUN_COUNT"
if [ "$RERUN_COUNT" -eq 0 ]; then
echo "All Copilot workflows are healthy."
fi