GitHub Actions에서 Cursor CLI를 사용하여 저장소의 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
이 페이지가 도움이 되었나요?