From 4eb7348fee733ed80d8a8cec9e5b3fe52cc5bba7 Mon Sep 17 00:00:00 2001 From: htlee Date: Thu, 19 Feb 2026 17:19:53 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20/release=20=EC=8A=A4=ED=82=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/skills/release/SKILL.md | 134 ++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 .claude/skills/release/SKILL.md diff --git a/.claude/skills/release/SKILL.md b/.claude/skills/release/SKILL.md new file mode 100644 index 0000000..fe289f9 --- /dev/null +++ b/.claude/skills/release/SKILL.md @@ -0,0 +1,134 @@ +--- +name: release +description: develop에서 main으로 릴리즈 MR을 생성합니다 +user-invocable: true +argument-hint: "" +allowed-tools: "Bash, Read, Grep" +--- + +develop 브랜치와 원격 동기화를 확인하고, develop → main 릴리즈 MR을 생성합니다. + +## 수행 단계 + +### 1. 사전 검증 + +```bash +# Gitea remote URL에서 owner/repo 추출 +REMOTE_URL=$(git remote get-url origin) + +# GITEA_TOKEN 확인 +echo $GITEA_TOKEN +``` + +- GITEA_TOKEN 환경변수 확인 (없으면 설정 안내 후 종료) +- 커밋되지 않은 변경 사항이 있으면 경고 ("먼저 /push로 커밋하세요") + +### 2. develop 브랜치 동기화 확인 + +```bash +# 최신 원격 상태 가져오기 +git fetch origin + +# 로컬 develop과 origin/develop 비교 +LOCAL=$(git rev-parse develop 2>/dev/null) +REMOTE=$(git rev-parse origin/develop 2>/dev/null) +BASE=$(git merge-base develop origin/develop 2>/dev/null) +``` + +**동기화 상태 판단:** + +| 상태 | 조건 | 행동 | +|------|------|------| +| 동일 | LOCAL == REMOTE | 바로 MR 생성 진행 | +| 로컬 뒤처짐 | LOCAL == BASE, LOCAL != REMOTE | "origin/develop에 새 커밋이 있습니다. `git pull origin develop` 후 다시 시도하세요" 안내 | +| 로컬 앞섬 | REMOTE == BASE, LOCAL != REMOTE | "로컬에 push되지 않은 커밋이 있습니다. `git push origin develop` 먼저 실행하시겠습니까?" 확인 | +| 분기됨 | 그 외 | "로컬과 원격 develop이 분기되었습니다. 수동으로 해결해주세요" 경고 후 종료 | + +**로컬 앞섬 상태에서 사용자가 push 수락하면:** +```bash +git push origin develop +``` + +### 3. develop → main 차이 분석 + +```bash +# main 대비 develop의 새 커밋 +git log main..origin/develop --oneline + +# 변경 파일 통계 +git diff main..origin/develop --stat + +# 커밋 수 +git rev-list --count main..origin/develop +``` + +차이가 없으면 "develop과 main이 동일합니다. 릴리즈할 변경이 없습니다" 출력 후 종료. + +### 4. MR 정보 구성 + 사용자 확인 + +**제목 자동 생성:** +``` +release: YYYY-MM-DD (N건 커밋) +``` + +**본문 자동 생성:** +```markdown +## 릴리즈 내용 +- (develop→main 커밋 목록, Conventional Commits type별 그룹핑) + +### 새 기능 (feat) +- feat(auth): 로그인 검증 로직 추가 +- feat(batch): 배치 스케줄러 개선 + +### 버그 수정 (fix) +- fix(api): 타임아웃 처리 수정 + +### 기타 +- chore: 의존성 업데이트 + +## 변경 파일 +- N files changed, +M insertions, -K deletions + +## 테스트 +- [ ] develop 브랜치 빌드 성공 확인 +- [ ] 주요 기능 동작 확인 +``` + +**사용자 확인** (AskUserQuestion): +- **질문**: "다음 내용으로 릴리즈 MR을 생성하시겠습니까?" +- 옵션 1: 생성 (추천) +- 옵션 2: 제목/본문 수정 (Other 입력) +- 옵션 3: 취소 + +### 5. Gitea API로 릴리즈 MR 생성 + +```bash +curl -X POST "https://{host}/api/v1/repos/{owner}/{repo}/pulls" \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + -d '{ + "title": "release: 2026-02-19 (12건 커밋)", + "body": "릴리즈 본문", + "head": "develop", + "base": "main", + "labels": [] + }' +``` + +### 6. 결과 출력 + +``` +✅ 릴리즈 MR 생성 완료 + 브랜치: develop → main + MR: https://gitea.gc-si.dev/gc/my-project/pulls/50 + 커밋: 12건, 파일: 28개 변경 + + 다음 단계: + 1. 리뷰어 지정 (main 브랜치는 1명 이상 리뷰 필수) + 2. 승인 후 머지 + 3. CI/CD 자동 배포 확인 (설정된 경우) +``` + +## 필요 환경변수 + +- `GITEA_TOKEN`: Gitea API 접근 토큰