| name | pr-create |
| description | Generate GitHub PR documentation from commit history, following project's PULL_REQUEST_TEMPLATE.md format. Trigger with "create pr", "/pr-create", or "pr from commits". |
| metadata | {"author":"Yogieat Team","version":"2.0.0","argument-hint":"<optional-base-branch>"} |
PR Documentation Generator
ํ์ฌ ๋ธ๋์น์ ์ปค๋ฐ ์ด๋ ฅ์ ๋ถ์ํ์ฌ ํ๋ก์ ํธ์ PULL_REQUEST_TEMPLATE.md ํ์์ ๋ง๋ GitHub Pull Request ๋ฌธ์๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค.
How It Works
1. ๋ธ๋์น ์ ๋ณด ์์ง
git branch --show-current
git branch -r --contains HEAD
2. ๋ฒ ์ด์ค ๋ธ๋์น ๊ฒฐ์
๋ฐฉ๋ฒ 1: ์ฌ์ฉ์ ์ธ์ ์ฌ์ฉ
๋ฐฉ๋ฒ 2: ๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ
git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@'
3. ๊ณ ์ ์ปค๋ฐ ๋๋ ๋ณ๊ฒฝ์ฌํญ ์ถ์ถ
๋ฐฉ๋ฒ 1: ์ปค๋ฐ ๊ธฐ๋ฐ (์ฐ์ )
git log <base-branch>..HEAD --pretty=format:"%H|||%s|||%b" --no-merges
๋ฐฉ๋ฒ 2: Staged Changes ๊ธฐ๋ฐ (์ปค๋ฐ์ด ์์ ๋)
git diff --cached --name-only
git diff --cached --stat
git diff --cached
๋ฐฉ๋ฒ 3: Working Directory Changes ๊ธฐ๋ฐ (Staged๋ ์์ ๋)
git status --short
git diff --stat
git diff
4. ์ปค๋ฐ ๋ถ์ ๋ฐ ๊ทธ๋ฃนํ
Conventional Commit ํ์
๋งคํ:
feat โ "๊ธฐ๋ฅ ์ถ๊ฐ"
fix โ "๋ฒ๊ทธ ์์ "
refactor โ "๋ฆฌํฉํ ๋ง"
chore โ "๊ธฐํ ์์
"
docs โ "๋ฌธ์ ์์
"
style โ "์คํ์ผ ๋ณ๊ฒฝ"
perf โ "์ฑ๋ฅ ๊ฐ์ "
test โ "ํ
์คํธ"
build โ "๋น๋ ์์คํ
"
ci โ "CI/CD"
๊ทธ๋ฃนํ ์๊ณ ๋ฆฌ์ฆ:
- ๊ฐ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ํ์ฑํ์ฌ ํ์
์ถ์ถ
- ํ์
๋ณ๋ก ์ปค๋ฐ๋ค์ ๊ทธ๋ฃนํ
- ๊ฐ ์ปค๋ฐ์ subject๋ฅผ ํ๊ธ ์์ฑํ ๋ฌธ์ฅ์ผ๋ก ๋ณํ
- "์ ๊ธฐ๋ฅ ์ถ๊ฐ" โ "์ ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค"
- "๋ฒ๊ทธ ์์ " โ "๋ฒ๊ทธ๋ฅผ ์์ ํฉ๋๋ค"
- "์ปดํฌ๋ํธ ๊ฐ์ " โ "์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ํฉ๋๋ค"
5. PR ์ ๋ชฉ ์์ฑ
์์ฑ ๊ท์น:
- ์ฒซ ๋ฒ์งธ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉ
- Conventional Commit ํ์์์ scope๋ ๋ฌด์กฐ๊ฑด ์ ๊ฑฐ (ํ์
: ๋ด์ฉ)
feat(ci): โ feat:
fix(api): โ fix:
docs(readme): โ docs:
- ๋ด์ฉ์ด ๊ธธ๋ฉด ํต์ฌ๋ง ์ถ์ถํ์ฌ ๊ฐ๊ฒฐํ๊ฒ ์์ฑ
- ๊ธธ์ด ์ ํ: 50์ ์ด๋ด ๊ถ์ฅ
์์:
- ์ปค๋ฐ:
fix(ci): CI/CD health check ํ์ด๋ฐ ๊ฐ์ ๋ฐ ์๋ ๋ฐฐํฌ ๊ธฐ๋ฅ ์ถ๊ฐ โ ์ ๋ชฉ: fix: CI/CD health check ํ์ด๋ฐ ๊ฐ์ ๋ฐ ์๋ ๋ฐฐํฌ ๊ธฐ๋ฅ ์ถ๊ฐ
- ์ปค๋ฐ:
feat(component): ์๋ก์ด ๋ฒํผ ์ปดํฌ๋ํธ ์ถ๊ฐ โ ์ ๋ชฉ: feat: ์๋ก์ด ๋ฒํผ ์ปดํฌ๋ํธ ์ถ๊ฐ
- ์ปค๋ฐ:
docs: ํ๋ก์ ํธ ๊ฐ์ด๋ ์ถ๊ฐ โ ์ ๋ชฉ: docs: ํ๋ก์ ํธ ๊ฐ์ด๋ ์ถ๊ฐ
6. Markdown ๋ฌธ์ ์์ฑ
์ถ๋ ฅ ๊ฒฝ๋ก: .claude/pr-drafts/{branch-name}.md
ํ
ํ๋ฆฟ ๊ตฌ์กฐ: (ํ๋ก์ ํธ์ .github/PULL_REQUEST_TEMPLATE.md ํ์ ์ค์)
# ๐ฏ PR ์ ๋ชฉ
{generated-title}
# ๐ ์์
์์ธ ๋ด์ญ
{grouped-commits}
# ๐ ๋ฆฌ๋ทฐ ์์ฒญ ์ฌํญ
- {๊ฐ๋จํ ๋ฆฌ๋ทฐ ์์ฒญ ์ฌํญ (1-3์ค)}
# ๐ ์ฐธ๊ณ ์๋ฃ
- {๊ด๋ จ ์ด์ ๋๋ ๋ฌธ์ ๋งํฌ}
# ๐ผ๏ธ ์์
๊ฒฐ๊ณผ๋ฌผ
- {์์
๊ฒฐ๊ณผ๋ฌผ ์ค๋ช
๋๋ ๋งํฌ}
์์
์์ธ ๋ด์ญ ์น์
ํ์:
- **๊ธฐ๋ฅ ์ถ๊ฐ**
- A ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค
- B ์ปดํฌ๋ํธ๋ฅผ ๊ตฌํํฉ๋๋ค
- **๋ฒ๊ทธ ์์ **
- C ์ด์๋ฅผ ํด๊ฒฐํฉ๋๋ค
- D ์๋ฌ๋ฅผ ์์ ํฉ๋๋ค
Error Handling
์ปค๋ฐ์ด ์๋ ๊ฒฝ์ฐ
๋์ ๋ฐฉ๋ฒ 1: Staged Changes ํ์ธ
git diff --cached --name-only
git diff --cached --stat
๋์ ๋ฐฉ๋ฒ 2: Working Directory Changes ํ์ธ
git status --short
git diff --stat
์์ ํ ๋ณ๊ฒฝ์ฌํญ์ด ์๋ ๊ฒฝ์ฐ
โ ์ค๋ฅ: ํ์ฌ ๋ธ๋์น({branch})์ ์ปค๋ฐ๋ ๋ณ๊ฒฝ์ฌํญ๋ ์์ต๋๋ค.
๋ฒ ์ด์ค ๋ธ๋์น({base})์ ๋น๊ตํ์ฌ ์๋ก์ด ๋ณ๊ฒฝ์ฌํญ์ ์ถ๊ฐํ ํ ๋ค์ ์๋ํ์ธ์.
๋ณ๊ฒฝ์ฌํญ ๊ธฐ๋ฐ ๋ฌธ์ ์์ฑ ์ ๋ฉ์์ง
โน๏ธ ์๋ฆผ: ์ปค๋ฐ์ด ์์ด ํ์ฌ ๋ณ๊ฒฝ์ฌํญ(staged/unstaged)์ ๊ธฐ๋ฐ์ผ๋ก PR ๋ฌธ์๋ฅผ ์์ฑํฉ๋๋ค.
๋ณ๊ฒฝ๋ ํ์ผ: {file-list}
๐ก ํ: ์ปค๋ฐ ํ ๋ค์ ์คํํ๋ฉด ๋ ์ ํํ PR ๋ฌธ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋ฒ ์ด์ค ๋ธ๋์น๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ
โ ๏ธ ๊ฒฝ๊ณ : ๋ฒ ์ด์ค ๋ธ๋์น๋ฅผ ์๋์ผ๋ก ์ฐพ์ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ๊ฐ์ผ๋ก 'main'์ ์ฌ์ฉํฉ๋๋ค.
๋ค๋ฅธ ๋ฒ ์ด์ค ๋ธ๋์น๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด /pr-create <base-branch> ํ์์ผ๋ก ์คํํ์ธ์.
Execution Steps
์คํฌ์ด ์คํ๋๋ฉด ๋ค์ ์์๋ก ์งํํ์ธ์:
-
๋ธ๋์น ํ์ธ
git branch --show-current๋ก ํ์ฌ ๋ธ๋์น ํ์ธ
- ์ธ์๋ก ๋ฒ ์ด์ค ๋ธ๋์น๊ฐ ์ฃผ์ด์ก์ผ๋ฉด ์ฌ์ฉ, ์์ผ๋ฉด develop/main ์ถ์
-
์ปค๋ฐ ๋๋ ๋ณ๊ฒฝ์ฌํญ ์ถ์ถ
git log <base>..<current> --pretty=format:"%s" --no-merges๋ก ๊ณ ์ ์ปค๋ฐ ์์ง
- ์ปค๋ฐ์ด ์๋ ๊ฒฝ์ฐ:
git diff --cached --name-only๋ก staged changes ํ์ธ
- Staged๊ฐ ์์ผ๋ฉด
git status --short๋ก working directory changes ํ์ธ
- ๋ ๋ค ์์ผ๋ฉด ์๋ฌ ๋ฉ์์ง ์ถ๋ ฅ ํ ์ข
๋ฃ
- ๋ณ๊ฒฝ์ฌํญ์ด ์์ผ๋ฉด ํ์ผ ๋ชฉ๋ก๊ณผ diff๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์
๋ด์ญ ์ถ์
-
์ปค๋ฐ/๋ณ๊ฒฝ์ฌํญ ๋ถ์ ๋ฐ ๊ทธ๋ฃนํ
- ์ปค๋ฐ์ด ์๋ ๊ฒฝ์ฐ:
- ๊ฐ ์ปค๋ฐ ๋ฉ์์ง์์ Conventional Commit ํ์
์ถ์ถ
- ํ์
๋ณ๋ก ๊ทธ๋ฃนํํ์ฌ "์์
์์ธ ๋ด์ญ" ์น์
์์ฑ
- ์ปค๋ฐ์ด ์๋ ๊ฒฝ์ฐ:
- ๋ณ๊ฒฝ๋ ํ์ผ ๊ฒฝ๋ก์ diff ๋ด์ฉ์ ๋ถ์
- ํ์ผ ์ข
๋ฅ์ ๋ฐ๋ผ ์์
๋ด์ญ ์ถ์ (์:
.yml โ CI/CD ์์
, .tsx โ ์ปดํฌ๋ํธ ์์
)
- ๊ฐ๋จํ bullet point๋ก ์์ฑ
- ๊ฐ ํญ๋ชฉ์ 2๋จ๊ณ bullet์ผ๋ก ์์ฑ (์นดํ
๊ณ ๋ฆฌ โ ์ธ๋ถ ๋ด์ญ)
-
PR ์ ๋ชฉ ์์ฑ
- ์ปค๋ฐ์ด ์๋ ๊ฒฝ์ฐ: ์ฒซ ๋ฒ์งธ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์ ๋ชฉ์ผ๋ก ์ฌ์ฉ
- scope ์ ๊ฑฐ: Conventional Commit์ scope ๊ดํธ๋ ๋ฌด์กฐ๊ฑด ์ ๊ฑฐ
feat(ci): โ feat:
fix(api): โ fix:
- ์ปค๋ฐ์ด ์๋ ๊ฒฝ์ฐ: ๋ณ๊ฒฝ๋ ํ์ผ/๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ์ ๋ชฉ ์์ฑ
- ์:
chore: CI/CD ์ํฌํ๋ก์ฐ ๊ฐ์ (yml ํ์ผ ๋ณ๊ฒฝ ์)
- ์:
feat: ์ปดํฌ๋ํธ ์ถ๊ฐ (tsx ํ์ผ ์ถ๊ฐ ์)
- 20-50์ ๊ธธ์ด๋ก ์กฐ์
-
๋ฆฌ๋ทฐ ์์ฒญ ์ฌํญ ์์ฑ
- ์ปค๋ฐ ๋ด์ฉ์ ๋ฐํ์ผ๋ก 1-3์ค์ ๊ฐ๋จํ ๋ฆฌ๋ทฐ ์์ฒญ ์ฌํญ ์์ฑ
- ๊ตฌ์ฒด์ ์ธ ๊ฒ์ฆ ํฌ์ธํธ๋ฅผ bullet point๋ก ๋์ด
-
๋ฌธ์ ์์ฑ
.claude/pr-drafts/ ๋๋ ํ ๋ฆฌ ์์ฑ (์์ผ๋ฉด)
{branch-name}.md ํ์ผ ์์ฑ
- PULL_REQUEST_TEMPLATE.md ํ์์ ๋ฐ๋ผ ๋ด์ฉ ์์ฑ
- ์ฐธ๊ณ ์๋ฃ์ ์์
๊ฒฐ๊ณผ๋ฌผ์ ๊ธฐ๋ณธ ๋ด์ฉ๋ง ์ ๊ณต (์ฌ์ฉ์๊ฐ ์ถ๊ฐ ์์ฑ)
-
๊ฒฐ๊ณผ ์ถ๋ ฅ
โ
PR ๋ฌธ์๊ฐ ์์ฑ๋์์ต๋๋ค!
๐ ํ์ผ ๊ฒฝ๋ก: .claude/pr-drafts/{branch-name}.md
๐ PR ์ ๋ชฉ: {generated-title}
๋ค์ ๋จ๊ณ:
1. ์์ฑ๋ ํ์ผ์ ์ด์ด ๋ด์ฉ์ ํ์ธํ์ธ์
2. ํ์์ "์ฐธ๊ณ ์๋ฃ"์ "์์
๊ฒฐ๊ณผ๋ฌผ" ์น์
์ ์ถ๊ฐ ์์ฑํ์ธ์
3. /pr-submit ๋ช
๋ น์ด๋ก GitHub์ PR์ ์
๋ก๋ํ์ธ์
(์๋์ผ๋ก reviewer, label, assignee๊ฐ ์ค์ ๋ฉ๋๋ค)
Usage Examples
๊ธฐ๋ณธ ์ฌ์ฉ
/pr-create
ํ์ฌ ๋ธ๋์น์์ main์ ๋ฒ ์ด์ค๋ก PR ๋ฌธ์ ์์ฑ
ํน์ ๋ฒ ์ด์ค ๋ธ๋์น ์ง์
/pr-create develop
develop ๋ธ๋์น๋ฅผ ๋ฒ ์ด์ค๋ก PR ๋ฌธ์ ์์ฑ
๋ํํ ์คํ
User: "PR ๋ฌธ์ ๋ง๋ค์ด์ค"
User: "์ปค๋ฐ์ผ๋ก PR ์์ฑํด์ค"
User: "์ด ๋ธ๋์น๋ก pull request ๋ง๋ค๊ณ ์ถ์ด"
์์ฑ ์์ 1: ์ปค๋ฐ์ด ์๋ ๊ฒฝ์ฐ
์ปค๋ฐ ๋ด์ญ:
fix: CI/CD health check ํ์ด๋ฐ ๊ฐ์ ๋ฐ ์๋ ๋ฐฐํฌ ๊ธฐ๋ฅ ์ถ๊ฐ
์์ฑ๋๋ ๋ฌธ์:
# ๐ฏ PR ์ ๋ชฉ
fix: CI/CD health check ํ์ด๋ฐ ๊ฐ์ ๋ฐ ์๋ ๋ฐฐํฌ ๊ธฐ๋ฅ ์ถ๊ฐ
# ๐ ์์
์์ธ ๋ด์ญ
- **๋ฒ๊ทธ ์์ **
- CI/CD health check ํ์ด๋ฐ race condition์ ํด๊ฒฐํฉ๋๋ค
- Container 'starting' ์ํ๋ก ์ธํ false positive ์คํจ๋ฅผ ๋ฐฉ์งํฉ๋๋ค
- **๊ธฐ๋ฅ ์ถ๊ฐ**
- GitHub Actions ์๋ ๋ฐฐํฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค
- ๋ฐฐํฌ ์ปดํฌ๋ํธ ์ ํ ์ต์
์ ์ ๊ณตํฉ๋๋ค
# ๐ ๋ฆฌ๋ทฐ ์์ฒญ ์ฌํญ
- ์กฐ๊ฑด๋ถ ๋ก์ง์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋์ง ๊ฒ์ฆํด์ฃผ์ธ์.
- Health check ๋๊ธฐ ์๊ฐ์ด ์ ์ ํ์ง ๊ฒํ ํด์ฃผ์ธ์.
# ๐ ์ฐธ๊ณ ์๋ฃ
- ๊ด๋ จ ์ด์: Production ๋ฐฐํฌ ์ health check ์ค๋ฅ
- ๋ณ๊ฒฝ๋ ํ์ผ: production-deploy.yml, development-deploy.yml
# ๐ผ๏ธ ์์
๊ฒฐ๊ณผ๋ฌผ
- ์๋ ๋ฐฐํฌ ๊ธฐ๋ฅ ์ฌ์ฉ ๊ฐ์ด๋ ์ถ๊ฐ
์์ฑ ์์ 2: ์ปค๋ฐ์ด ์๋ ๊ฒฝ์ฐ (๋ณ๊ฒฝ์ฌํญ ๊ธฐ๋ฐ)
๋ณ๊ฒฝ๋ ํ์ผ:
M .github/workflows/production-deploy.yml
M .github/workflows/development-deploy.yml
M docker-compose.yml
์๋ฆผ ๋ฉ์์ง:
โน๏ธ ์๋ฆผ: ์ปค๋ฐ์ด ์์ด ํ์ฌ ๋ณ๊ฒฝ์ฌํญ์ ๊ธฐ๋ฐ์ผ๋ก PR ๋ฌธ์๋ฅผ ์์ฑํฉ๋๋ค.
๋ณ๊ฒฝ๋ ํ์ผ: production-deploy.yml, development-deploy.yml, docker-compose.yml
๐ก ํ: ์ปค๋ฐ ํ ๋ค์ ์คํํ๋ฉด ๋ ์ ํํ PR ๋ฌธ์๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์์ฑ๋๋ ๋ฌธ์:
# ๐ฏ PR ์ ๋ชฉ
ci: GitHub Actions ์ํฌํ๋ก์ฐ ๋ฐ Docker ์ค์ ๊ฐ์
# ๐ ์์
์์ธ ๋ด์ญ
- **CI/CD ๊ฐ์ **
- production-deploy.yml ์ํฌํ๋ก์ฐ๋ฅผ ์์ ํฉ๋๋ค
- development-deploy.yml ์ํฌํ๋ก์ฐ๋ฅผ ์์ ํฉ๋๋ค
- docker-compose.yml ์ค์ ์ ๋ณ๊ฒฝํฉ๋๋ค
# ๐ ๋ฆฌ๋ทฐ ์์ฒญ ์ฌํญ
- ๋ณ๊ฒฝ๋ ์ํฌํ๋ก์ฐ๊ฐ ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํด์ฃผ์ธ์.
# ๐ ์ฐธ๊ณ ์๋ฃ
- ๋ณ๊ฒฝ๋ ํ์ผ:
- .github/workflows/production-deploy.yml
- .github/workflows/development-deploy.yml
- docker-compose.yml
# ๐ผ๏ธ ์์
๊ฒฐ๊ณผ๋ฌผ
- CI/CD ํ์ดํ๋ผ์ธ ๊ฐ์
Notes