## PR 생성 Git 변경 분석기반의 자동 PR 생성으로 효율적인 Pull Request 워크플로를 실현합니다. ### 사용법 ```bash # 변경 분석을 통한 자동 PR 생성 git add . && git commit -m "feat: 사용자 인증 기능 구현" "변경 내용을 분석해서 적절한 설명문과 라벨로 Draft PR 을 생성하세요" # 기존 템플릿 유지하며 업데이트 cp .github/PULL_REQUEST_TEMPLATE.md pr_body.md "템플릿 구조를 완전히 유지하고 변경 내용을 보완하세요" # 단계적 품질 향상 gh pr ready "품질 확인 완료 후 Ready for Review 로 변경하세요" ``` ### 기본 예시 ```bash # 1. 브랜치 생성과 커밋 git checkout main && git pull git checkout -b feat-user-profile git add . && git commit -m "feat: 사용자 프로필 기능 구현" git push -u origin feat-user-profile # 2. PR 생성 "다음 순서로 PR 을 생성해주세요: 1. git diff --cached 로 변경 내용을 확인 2. .github/PULL_REQUEST_TEMPLATE.md 를 사용해서 설명문 작성 3. 변경 내용에서 적절한 라벨을 최대 3 개 선택 4. Draft PR 로 생성 (HTML 코멘트 유지)" # 3. CI 확인 후 Ready 화 "CI 가 통과하면 PR 을 Ready for Review 로 변경하세요" ``` ### 실행 절차 #### 1. 브랜치 생성 ```bash # 가이드라인을 준수한 네이밍 규칙: {type}-{subject} git checkout main git pull git checkout -b feat-user-authentication # 브랜치 확인 (현재 브랜치명 표시) git branch --show-current ``` #### 2. 커밋 ```bash # 변경사항 스테이징 git add . # 가이드라인을 준수한 커밋 메시지 git commit -m "feat: 사용자 인증 API 구현" ``` #### 3. 리모트에 Push ```bash # 첫 번째 Push (upstream 설정) git push -u origin feat-user-authentication # 두 번째부터 git push ``` #### 4. 자동 분석을 통한 Draft PR 생성 **Step 1: 변경 내용 분석** ```bash # 파일 변경 사항 취득 (스테이지된 변경 확인) git diff --cached --name-only # 내용 분석 (최대 1000 행) git diff --cached | head -1000 ``` **Step 2: 설명문 자동 생성** ```bash # 템플릿 처리 우선순위 # 1. 기존 PR 설명 (완전 보존) # 2. .github/PULL_REQUEST_TEMPLATE.md # 3. 기본 템플릿 cp .github/PULL_REQUEST_TEMPLATE.md pr_body.md # HTML 코멘트·구분선을 유지하며 빈 섹션만 보완 ``` **Step 3: 라벨 자동 선택** ```bash # 사용 가능한 라벨 취득 (비대화형) ".github/labels.yml 또는 GitHub 저장소에서 사용 가능한 라벨을 취득해서, 변경 내용에 기반해 적절한 라벨을 자동 선택하세요" # 패턴 매칭을 통한 자동 선택 (최대 3 개) # - 문서: *.md, docs/ → documentation|docs # - 테스트: test, spec → test|testing # - 버그 수정: fix|bug → bug|fix # - 새 기능: feat|feature → feature|enhancement ``` **Step 4: GitHub API 로 PR 생성 (HTML 코멘트 유지)** ```bash # PR 생성 "다음 정보로 Draft PR 을 생성해주세요: - 제목: 커밋 메시지에서 자동 생성 - 설명문: .github/PULL_REQUEST_TEMPLATE.md 를 사용해서 적절히 작성 - 라벨: 변경 내용에서 자동 선택 (최대 3 개) - 기본 브랜치: main - HTML 코멘트는 완전히 보존" ``` **방법 B: GitHub MCP (폴백)** ```javascript // HTML 코멘트 유지하며 PR 생성 mcp_github_create_pull_request({ owner: "organization", repo: "repository", base: "main", head: "feat-user-authentication", title: "feat: 사용자 인증 구현", body: prBodyContent, // HTML 코멘트를 포함한 전체 내용 draft: true, maintainer_can_modify: true, }); ``` ### 자동 라벨 선택 시스템 #### 파일 패턴 기반 판정 - **문서**: `*.md`, `README`, `docs/` → `documentation|docs|doc` - **테스트**: `test`, `spec` → `test|testing` - **CI/CD**: `.github/`, `*.yml`, `Dockerfile` → `ci|build|infra|ops` - **의존성**: `package.json`, `pubspec.yaml` → `dependencies|deps` #### 변경 내용 기반 판정 - **버그 수정**: `fix|bug|error|crash|수정` → `bug|fix` - **새 기능**: `feat|feature|add|implement|새기능|구현` → `feature|enhancement|feat` - **리팩터링**: `refactor|clean|리팩터링` → `refactor|cleanup|clean` - **성능**: `performance|perf|optimize` → `performance|perf` - **보안**: `security|secure` → `security` #### 제약 사항 - **최대 3 개까지**: 자동 선택의 상한 - **기존 라벨만**: 신규 생성 금지 - **부분 매치**: 키워드 포함을 통한 판정 ### 프로젝트 가이드라인 #### 기본 자세 1. **반드시 Draft 로 시작**: 모든 PR 은 Draft 상태로 생성 2. **단계적 품질 향상**: Phase 1 (기본 구현) → Phase 2 (테스트 추가) → Phase 3 (문서 업데이트) 3. **적절한 라벨**: 최대 3 종류의 라벨을 반드시 부여 4. **템플릿 사용**: `.github/PULL_REQUEST_TEMPLATE.md`를 반드시 사용 5. **한국어 스페이스**: 한국어와 반각 영숫자 사이에 반드시 반각 스페이스 #### 브랜치 네이밍 규칙 ```text {type}-{subject} 예시: - feat-user-profile - fix-login-error - refactor-api-client ``` #### 커밋 메시지 ```text {type}: {description} 예시: - feat: 사용자 인증 API 구현 - fix: 로그인 오류 수정 - docs: README 업데이트 ``` ### 템플릿 처리 시스템 #### 처리 우선순위 1. **기존 PR 설명**: 이미 기술된 내용을 **완전히 보존** 2. **프로젝트 템플릿**: `.github/PULL_REQUEST_TEMPLATE.md` 구조 유지 3. **기본 템플릿**: 위가 존재하지 않는 경우 #### 기존 내용 보존 규칙 - **한 글자도 변경하지 않음**: 이미 기술된 내용 - **빈 섹션만 보완**: 플레이스홀더 부분을 변경 내용으로 채움 - **기능적 코멘트 유지**: `` 등을 유지 - **HTML 코멘트 유지**: ``를 완전히 보존 - **구분선 유지**: `---` 등의 구조를 유지 #### HTML 코멘트 보존 대처법 **중요**: GitHub CLI (`gh pr edit`)는 HTML 코멘트를 자동 이스케이프하고, 셸 처리에서 `EOF < /dev/null` 등의 불법 문자열이 혼입되는 경우가 있습니다. **근본적 해결책**: 1. **GitHub API 의 --field 옵션 사용**: 적절한 이스케이프 처리로 HTML 코멘트 보존 2. **템플릿 처리 단순화**: 복잡한 파이프 처리나 리다이렉트를 피함 3. **완전 보존 접근**: HTML 코멘트 삭제 처리를 폐지하고 템플릿을 완전 보존 ### 리뷰 코멘트 대응 ```bash # 변경 후 재커밋 git add . git commit -m "fix: 리뷰 피드백기반의 수정" git push ``` ### 주의사항 #### HTML 코멘트 보존의 중요성 - **GitHub CLI 제한**: `gh pr edit`는 HTML 코멘트를 이스케이프하고 불법 문자열 혼입 - **근본적 회피책**: GitHub API 의 `--field` 옵션으로 적절한 이스케이프 처리 - **템플릿 완전 보존**: HTML 코멘트 삭제 처리를 폐지하고 구조를 완전 유지 #### 자동화 제약 - **신규 라벨 금지**: `.github/labels.yml` 정의 외 라벨 생성 불가 - **최대 3 라벨**: 자동 선택의 상한 - **기존 내용 우선**: 수동으로 기술된 내용은 일체 변경하지 않음 #### 단계적 품질 향상 - **Draft 필수**: 모든 PR 은 Draft 로 시작 - **CI 확인**: `gh pr checks`로 상태 확인 - **Ready 이행**: 품질 확인 완료 후 `gh pr ready` - **템플릿 완전 준수**: 프로젝트별 구조를 유지