feat: /mr 스킬 추가
This commit is contained in:
부모
7ce0e43798
커밋
1aaeacb2cb
123
.claude/skills/mr/SKILL.md
Normal file
123
.claude/skills/mr/SKILL.md
Normal file
@ -0,0 +1,123 @@
|
||||
---
|
||||
name: mr
|
||||
description: 커밋 + 푸시 + Gitea MR을 한 번에 생성합니다
|
||||
user-invocable: true
|
||||
argument-hint: "[target-branch: develop|main] (기본: develop)"
|
||||
allowed-tools: "Bash, Read, Grep"
|
||||
---
|
||||
|
||||
현재 브랜치의 변경 사항을 커밋+푸시하고, Gitea에 MR을 생성합니다.
|
||||
타겟 브랜치: $ARGUMENTS (기본: develop)
|
||||
|
||||
## 수행 단계
|
||||
|
||||
### 1. 사전 검증
|
||||
|
||||
```bash
|
||||
# 현재 브랜치 확인 (main/develop이면 중단)
|
||||
BRANCH=$(git branch --show-current)
|
||||
|
||||
# Gitea remote URL에서 owner/repo 추출
|
||||
REMOTE_URL=$(git remote get-url origin)
|
||||
```
|
||||
|
||||
- 현재 브랜치가 `main` 또는 `develop`이면: "feature 브랜치에서 실행해주세요" 안내 후 종료
|
||||
- GITEA_TOKEN 환경변수 확인 (없으면 설정 안내)
|
||||
|
||||
### 2. 커밋 + 푸시 (변경 사항이 있을 때만)
|
||||
|
||||
```bash
|
||||
git status --short
|
||||
```
|
||||
|
||||
**커밋되지 않은 변경이 있으면**:
|
||||
- 변경 범위(파일 목록, 추가/수정/삭제) 요약 표시
|
||||
- Conventional Commits 형식 커밋 메시지 자동 생성
|
||||
- **사용자 확인** (AskUserQuestion): 커밋 메시지 수락/수정/취소
|
||||
- 수락 시: `git add -A` → `git commit` → `git push`
|
||||
|
||||
**변경이 없으면**:
|
||||
- 이미 커밋된 내용으로 MR 생성 진행
|
||||
- 리모트에 push되지 않은 커밋이 있으면 `git push`
|
||||
|
||||
### 3. MR 대상 브랜치 결정
|
||||
|
||||
타겟 브랜치 후보를 분석하여 표시:
|
||||
|
||||
```bash
|
||||
# develop과의 차이
|
||||
git log develop..HEAD --oneline 2>/dev/null
|
||||
# main과의 차이
|
||||
git log main..HEAD --oneline 2>/dev/null
|
||||
```
|
||||
|
||||
**사용자 확인** (AskUserQuestion):
|
||||
- **질문**: "MR 타겟 브랜치를 선택하세요"
|
||||
- 옵션 1: develop (추천, N건 커밋 차이)
|
||||
- 옵션 2: main (N건 커밋 차이)
|
||||
- 옵션 3: 취소
|
||||
|
||||
인자($ARGUMENTS)로 브랜치가 지정되었으면 확인 없이 바로 진행.
|
||||
|
||||
### 4. MR 정보 구성
|
||||
|
||||
```bash
|
||||
# 커밋 목록
|
||||
git log {target}..HEAD --oneline
|
||||
# 변경 파일 통계
|
||||
git diff {target}..HEAD --stat
|
||||
```
|
||||
|
||||
- **제목**: 커밋이 1개면 커밋 메시지 사용, 여러 개면 브랜치명에서 추출
|
||||
- `feature/ISSUE-42-user-login` → `feat: ISSUE-42 user-login`
|
||||
- `bugfix/fix-timeout` → `fix: fix-timeout`
|
||||
- **본문**:
|
||||
```markdown
|
||||
## 변경 사항
|
||||
- (커밋 목록 기반 자동 생성)
|
||||
|
||||
## 관련 이슈
|
||||
- closes #이슈번호 (브랜치명에서 추출, 없으면 생략)
|
||||
|
||||
## 테스트
|
||||
- [ ] 빌드 성공 확인
|
||||
- [ ] 기존 테스트 통과
|
||||
```
|
||||
|
||||
### 5. Gitea API로 MR 생성
|
||||
|
||||
```bash
|
||||
# remote URL에서 Gitea 호스트, owner, repo 파싱
|
||||
# 예: https://gitea.gc-si.dev/gc/my-project.git → host=gitea.gc-si.dev, owner=gc, repo=my-project
|
||||
|
||||
curl -X POST "https://{host}/api/v1/repos/{owner}/{repo}/pulls" \
|
||||
-H "Authorization: token ${GITEA_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"title": "MR 제목",
|
||||
"body": "MR 본문",
|
||||
"head": "현재브랜치",
|
||||
"base": "타겟브랜치"
|
||||
}'
|
||||
```
|
||||
|
||||
### 6. 결과 출력
|
||||
|
||||
```
|
||||
✅ MR 생성 완료
|
||||
브랜치: feature/my-branch → develop
|
||||
MR: https://gitea.gc-si.dev/gc/my-project/pulls/42
|
||||
커밋: 3건, 파일: 5개 변경
|
||||
|
||||
다음 단계: 리뷰어 지정 → 승인 대기 → 머지
|
||||
```
|
||||
|
||||
## 필요 환경변수
|
||||
|
||||
- `GITEA_TOKEN`: Gitea API 접근 토큰
|
||||
- 없으면: "Gitea 토큰이 필요합니다. Settings → Applications에서 생성하세요" 안내
|
||||
|
||||
## 기존 /create-mr과의 차이
|
||||
|
||||
- `/mr`: 커밋+푸시 포함, 빠른 실행 (일상적 사용)
|
||||
- `/create-mr`: MR 생성만, 세부 옵션 지원 (상세 제어)
|
||||
불러오는 중...
Reference in New Issue
Block a user