AgentSkillsCN

pr-merge

从创建 Pull Request 到代码审查、问题修复、合并,全程执行自动化的重复流程。将“提交→推送→创建 Pull Request→代码审查→修改→重新审查→合并”这一工作流以单条命令完成。

SKILL.md
--- frontmatter
name: pr-merge
description: "PR 생성부터 코드 리뷰, 이슈 수정, 머지까지 자동화된 반복 사이클을 실행합니다. 커밋→푸시→PR 생성→코드 리뷰→수정→재리뷰→머지 워크플로우를 단일 명령으로 처리합니다."
argument-hint: "[max-iterations] [--no-review] [--draft] [--patch|--minor|--major]"
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion, Task

ASTRA PR Review & Merge Workflow

커밋부터 코드 리뷰, 이슈 수정, 머지까지 전체 사이클을 자동화합니다. 리뷰 → 수정 → 재리뷰 반복 사이클을 최대 반복 횟수까지 자동 실행합니다.

Execution Procedure

Step 1: 사전 검증

$ARGUMENTS를 파싱하여 옵션을 결정한다:

  • max-iterations: 숫자 인자 → 최대 리뷰 반복 횟수 (기본값: 3)
  • --no-review: 코드 리뷰 없이 커밋→푸시→PR 생성→머지만 실행
  • --draft: PR을 Draft 상태로 생성
  • --patch / --minor / --major: 버전 범프 유형 (기본값: --patch)

다음 사전 조건을 검증한다:

  1. 브랜치 확인: 현재 브랜치가 main 또는 master가 아닌지 확인한다. main/master에서 실행 시 경고를 출력하고 중단한다.
  2. gh CLI 인증: gh auth status를 실행하여 GitHub CLI 인증 상태를 확인한다. 인증되지 않은 경우 gh auth login을 안내하고 중단한다.
  3. 클린 상태 확인: git status로 현재 상태를 파악한다 (커밋되지 않은 변경사항, 스테이징된 파일 등).

Step 1.5: main 동기화

원격 main 브랜치의 최신 변경사항을 현재 브랜치에 동기화한다:

code
git fetch origin main
git merge origin/main
  • 충돌 없음: 다음 단계로 진행
  • 충돌 발생: 충돌 파일 목록을 출력하고, 사용자에게 수동 해결을 안내한 후 중단한다. 자동 충돌 해결은 시도하지 않는다.

Step 2: 커밋 & 푸시

미커밋 변경사항을 처리한다:

  1. git status로 변경사항을 확인한다.
  2. 변경사항이 있으면 변경 내용 요약을 사용자에게 보여주고 AskUserQuestion으로 커밋 진행 여부를 확인한다.
  3. 사용자 확인 후:
    • 변경된 파일을 git add로 스테이징 (민감 파일 .env, credentials 등 제외)
    • git diff --staged로 스테이징된 변경사항 분석
    • git log로 최근 커밋 메시지 스타일 확인
    • 변경사항을 분석하여 커밋 메시지 작성 후 git commit 실행
  4. git push -u origin {branch-name}으로 원격에 푸시한다.

변경사항이 없으면 이 단계를 건너뛴다.

Step 3: PR 생성

기존 PR이 있는지 확인하고, 없으면 새로 생성한다:

  1. gh pr list --head {branch-name} --state open으로 기존 PR 확인
  2. 기존 PR이 있으면: PR URL을 출력하고 Step 4로 진행
  3. 기존 PR이 없으면: ASTRA 템플릿으로 PR 생성
bash
gh pr create --title "{PR 제목}" --body "$(cat <<'EOF'
## Summary
- {변경사항 요약 1}
- {변경사항 요약 2}

## Test plan
- [ ] 코드 리뷰 통과
- [ ] 테스트 실행 확인

🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"
  • --draft 옵션이 지정된 경우 --draft 플래그 추가
  • PR 제목은 70자 이내로 작성
  • PR URL을 출력한다

Step 4: 코드 리뷰

--no-review 옵션이 지정된 경우 이 단계를 건너뛰고 Step 7로 진행한다.

feature-dev:code-reviewer Task 에이전트를 스폰하여 코드 리뷰를 실행한다:

code
Task tool (subagent_type: "feature-dev:code-reviewer")
- PR의 변경사항을 기준으로 코드 리뷰 실행
- 버그, 로직 오류, 보안 취약점, 코드 품질 이슈를 분석

리뷰 결과를 다음 4단계로 분류하여 출력한다:

심각도설명예시
Critical즉시 수정 필수, 프로덕션 장애 위험SQL injection, null 참조, 데이터 손실
High수정 권장, 중요 버그 또는 보안 이슈미처리 예외, 인증 우회 가능성
Medium코드 품질 개선, 기능에는 영향 없음중복 코드, 비효율 로직, 불명확한 네이밍
Low스타일/컨벤션, 선택적 개선포매팅, 주석 누락, 미사용 import

Step 4.5: 리뷰 결과 판정

리뷰 결과를 바탕으로 다음 행동을 결정한다:

  • Critical + High = 0건: 리뷰 통과 → Step 7로 진행
  • Critical + High > 0건 AND 반복 횟수 < MAX: 이슈 수정 필요 → Step 5로 진행
  • 반복 횟수 = MAX에 도달: AskUserQuestion으로 사용자에게 선택지를 제공
    • (a) 추가 반복 허용 (MAX 증가)
    • (b) 남은 이슈를 무시하고 머지 진행 (단, Critical 이슈가 있으면 이 선택지는 제공하지 않음)
    • (c) 워크플로우 중단

머지 차단 조건: Critical 이슈가 1건이라도 남아있으면 머지를 진행할 수 없다.

Step 5: 이슈 수정

Step 4에서 발견된 Critical 및 High 이슈를 수정한다:

  1. 이슈 목록을 사용자에게 표시한다.
  2. AskUserQuestion으로 자동 수정 진행 여부를 확인한다.
  3. 사용자 확인 후, 각 이슈를 순서대로 수정한다:
    • 해당 파일을 읽고 이슈 위치를 파악
    • Edit tool로 코드 수정
    • 수정 내용 요약 출력
  4. 프로젝트에 테스트가 설정되어 있으면 테스트를 실행하여 수정이 기존 기능을 깨뜨리지 않았는지 확인한다.

Step 6: 재커밋 & 푸시

수정사항을 커밋하고 푸시한 뒤 재리뷰한다:

  1. 수정된 파일을 git add로 스테이징
  2. git commit — 메시지는 "fix: address code review issues (iteration {N})" 형식
  3. git push로 원격에 푸시
  4. Step 4로 복귀하여 재리뷰 실행

Step 7: 버전 업데이트

.claude-plugin/plugin.json 파일이 존재하는 플러그인 프로젝트에서만 실행한다.

  1. .claude-plugin/plugin.json.claude-plugin/marketplace.json의 존재 여부를 확인한다.
  2. 파일이 존재하면 --patch / --minor / --major 옵션에 따라 SemVer 버전을 범프한다:
    • --patch (기본값): x.y.zx.y.z+1
    • --minor: x.y.zx.y+1.0
    • --major: x.y.zx+1.0.0
  3. 두 파일 모두 동일한 버전으로 업데이트한다.
  4. 버전 변경을 커밋하고 푸시한다: "chore: bump version to {new-version}"
  5. 파일이 존재하지 않으면 이 단계를 건너뛴다.

Step 8: PR 머지

PR을 머지한다:

  1. AskUserQuestion으로 사용자에게 최종 머지 확인을 요청한다.
    • PR URL, 리뷰 결과 요약 (통과 여부, 반복 횟수), 변경 파일 수를 표시
  2. 사용자 확인 후:
    • Draft PR인 경우 먼저 gh pr ready로 Ready 상태로 변경
    • gh pr merge --merge --delete-branch로 머지 실행

Step 9: 정리

머지 후 로컬 환경을 정리한다:

  1. git checkout main으로 main 브랜치로 전환
  2. git pull로 최신 상태 동기화
  3. 머지된 로컬 브랜치 삭제: git branch -d {branch-name}
  4. 최종 요약을 출력한다:
code
## PR Review & Merge 완료

### 결과 요약
- PR: {PR URL}
- 리뷰 반복: {N}회
- 수정된 이슈: Critical {n}건, High {n}건
- 버전: {old-version} → {new-version} (해당 시)
- 상태: ✅ 머지 완료

### 변경사항
- {커밋 요약 1}
- {커밋 요약 2}

Quick Run Examples

code
# 기본 실행 (최대 3회 리뷰 반복)
/pr-merge

# 리뷰 반복 최대 5회
/pr-merge 5

# 코드 리뷰 없이 빠른 머지
/pr-merge --no-review

# Draft PR로 생성 후 리뷰
/pr-merge --draft

# minor 버전 범프와 함께 실행
/pr-merge --minor

# 옵션 조합
/pr-merge 5 --minor --draft

Notes

  • main/master 브랜치에서는 실행할 수 없다.
  • Critical 이슈가 남아있으면 머지가 차단된다.
  • 충돌 발생 시 자동 해결을 시도하지 않고, 사용자에게 안내 후 중단한다.
  • 버전 범프는 .claude-plugin/plugin.json이 존재하는 프로젝트에서만 실행된다.
  • 커밋, 자동 수정, 머지 전에는 반드시 사용자 확인을 거친다.