GitHub Actions에서 Cursor CLI를 사용해서 CI 실패를 자동으로 수정해보자. 이 워크플로우는 실패를 분석하고, 타겟 수정을 진행하며, 빠른 PR 생성 링크와 함께 수정 브랜치를 만들어준다. 이 워크플로우는 특정 워크플로우를 이름으로 모니터링한다. 실제 CI 워크플로우 이름에 맞게 workflows 목록을 업데이트하자.
name: Auto Fix CI Failures

on:
  workflow_run:
    workflows: [Test]
    types: [completed]

permissions:
  contents: write
  pull-requests: write
  actions: read

jobs:
  attempt-fix:
    if: >-
      ${{ github.event.workflow_run.conclusion == 'failure' && github.event.workflow_run.name != 'Auto Fix CI Failures' }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install Cursor CLI
        run: |
          curl https://cursor.com/install -fsS | bash
          echo "$HOME/.cursor/bin" >> $GITHUB_PATH

      - name: Configure git identity
        run: |
          git config user.name "Cursor Agent"
          git config user.email "cursoragent@cursor.com"

      - name: Fix CI failure
        env:
          CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
          MODEL: gpt-5
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          BRANCH_PREFIX: ci-fix
        run: |
          cursor-agent -p "지금 GitHub Actions 러너에서 실행되고 있어.

          GitHub CLI는 `gh`로 사용할 수 있고 `GH_TOKEN`으로 인증되어 있어. Git도 사용 가능해. 저장소 콘텐츠에 대한 쓰기 권한이 있고 풀 리퀘스트에 댓글을 달 수 있지만, PR을 직접 생성하거나 편집하면 안 돼.

          # 컨텍스트:
          - 저장소: ${{ github.repository }}
          - 소유자: ${{ github.repository_owner }}
          - 워크플로우 실행 ID: ${{ github.event.workflow_run.id }}
          - 워크플로우 실행 URL: ${{ github.event.workflow_run.html_url }}
          - 수정 브랜치 접두사: ${{ env.BRANCH_PREFIX }}

          # 목표:
          - 실패한 PR을 기반으로 한 엔드투엔드 CI 수정 플로우를 구현해서, 별도의 지속적인 수정 브랜치를 생성하고 원래 PR 브랜치로 다시 빠른 생성 PR을 제안하는 거야.

          # 요구사항:
          1) 실패한 워크플로우 실행과 연관된 PR을 찾아서 베이스 브랜치와 헤드 브랜치를 파악해. HEAD_REF는 PR의 헤드 브랜치(기여자/원본 브랜치)로 설정해.
          2) 컨텍스트의 수정 브랜치 접두사를 사용해서 이 PR 헤드에 대한 지속적인 수정 브랜치를 관리해. 없으면 생성하고, 있으면 업데이트해서 변경사항을 origin에 푸시해.
          3) 저장소 스타일에 맞는 최소한의 타겟 수정을 통해 CI 실패를 해결해봐. 변경사항은 범위를 좁히고 안전하게 유지해.
          4) PR 생성 권한이 없어. 대신 CI 수정 내용을 간단히 설명하고 빠른 PR 생성을 위한 인라인 비교 링크를 포함한 자연스러운 PR 댓글(1-2문장)을 게시하거나 업데이트해.

          # 입력 및 규칙:
          - 실패한 PR과 브랜치를 찾기 위해 `gh api`, `gh run view`, `gh pr view`, `gh pr diff`, `gh pr list`, `gh run download`, git 명령어를 필요에 따라 사용해.
          - 중복 댓글은 피해; 이전 봇 댓글이 있으면 새 댓글 대신 기존 댓글을 업데이트해.
          - 실행 가능한 수정이 불가능하면 변경하지 말고 댓글도 게시하지 마.

          # 업데이트 시 결과물:
          - 이 PR 헤드에 대한 지속적인 수정 브랜치에 커밋 푸시.
          - 위의 인라인 비교 링크를 포함한 원래 PR에 대한 자연스러운 PR 댓글 하나.
          " --force --model "$MODEL" --output-format=text