π νΈμΆ μ λ©μμ§: μ΄ Skillμ΄ νΈμΆλλ©΄ λ°λμ
[SEMO] Skill: release-managerμμ€ν λ©μμ§λ₯Ό 첫 μ€μ μΆλ ₯νμΈμ.
release-manager Skill
STG λ°°ν¬ λ° νλ‘λμ νκΉ μλν
Workflow
μ 체 νλ‘μ°
1. λ§μΌμ€ν€ νμΈ/μμ± (release-x.x.x)
2. STG λ°°ν¬ β Staging CI/CD μ€ν
3. PRD νκΉ
β Production Tagging μ€ν
π λ°°ν¬ νλ‘μ° μμΈ: onpremise-supabase-deploy-flow.md
π΄ Step 1: λ§μΌμ€ν€ νμΈ/μμ±
λ§μΌμ€ν€ λ€μ΄λ° 컨벀μ
format: release-{major}.{minor}.{patch}
examples:
- release-1.0.4
- release-2.1.0
- release-1.2.3
νμΈ μ μ°¨
# λ ν¬μ§ν 리 λ§μΌμ€ν€ λͺ©λ‘ μ‘°ν
gh api repos/{owner}/{repo}/milestones --jq '.[] | {title: .title, state: .state, number: .number}'
λ§μΌμ€ν€ μμ± (μμ κ²½μ°)
# λ§μΌμ€ν€ μμ±
gh api repos/{owner}/{repo}/milestones \
--method POST \
-f title="release-{version}" \
-f state="open" \
-f description="Release {version}"
μ¬μ©μ νμΈ
λ§μΌμ€ν€μ΄ μμΌλ©΄ μ¬μ©μμκ² νμΈ:
π¦ **λ§μΌμ€ν€ νμΈ**
νμ¬ λ ν¬μ§ν 리μ `release-{version}` λ§μΌμ€ν€μ΄ μμ΅λλ€.
**μ΅μ
:**
1. λ§μΌμ€ν€ μμ± (release-{suggested_version})
2. λ€λ₯Έ λ²μ μ§μ
3. μ·¨μ
π΄ Step 2: STG λ°°ν¬
μ¬μ 쑰건
- dev νκ²½ ν μ€νΈ μλ£
- λ§μΌμ€ν€ μμ±λ¨ (release-x.x.x)
μ€ν μ μ°¨
# 1. Staging CI/CD μν¬νλ‘μ° μ€ν
gh workflow run "Staging CI/CD" \
--repo {owner}/{repo} \
--ref dev
λͺ¨λν°λ§
# 2. μν¬νλ‘μ° μ€ν μν νμΈ
WORKFLOW_NAME="Staging CI/CD"
RUN_ID=$(gh run list --workflow="$WORKFLOW_NAME" --repo {owner}/{repo} --limit 1 --json databaseId --jq '.[0].databaseId')
# 3. μ€ν μν ν΄λ§
gh run watch $RUN_ID --repo {owner}/{repo}
κ²°κ³Ό νμΈ
# 4. release λΈλμΉ μμ± νμΈ
git fetch origin
git branch -r | grep "release-"
# 5. stg μλ² ν¬μ€μ²΄ν¬
curl -s https://{service}-stg.semi-colon.space/api/health
μλ£ λ©μμ§
[SEMO] Skill: release-manager β STG λ°°ν¬ μλ£
β
μν¬νλ‘μ°: Staging CI/CD
π¦ λ²μ : release-{version}
πΏ λΈλμΉ: release-{version} μμ±λ¨
π STG URL: https://{service}-stg.semi-colon.space
---
λ€μ λ¨κ³: "prd νκΉ
ν΄μ€" λλ QA μ§ν
π΄ Step 3: PRD νκΉ
μ¬μ 쑰건
- STG λ°°ν¬ μλ£
- QA ν μ€νΈ μλ£
- λ°°ν¬ μΉμΈ νλ
μ¬μ νμΈ
# release λΈλμΉ μ‘΄μ¬ νμΈ
git fetch origin
RELEASE_BRANCH=$(git branch -r | grep "release-" | tail -1 | tr -d ' ')
if [ -z "$RELEASE_BRANCH" ]; then
echo "β release λΈλμΉκ° μμ΅λλ€. STG λ°°ν¬λ₯Ό λ¨Όμ μ§νν΄μ£ΌμΈμ."
exit 1
fi
μ€ν μ μ°¨
# 1. Production Tagging μν¬νλ‘μ° μ€ν
gh workflow run "Production Tagging" \
--repo {owner}/{repo} \
--ref release-{version}
λͺ¨λν°λ§
# 2. μν¬νλ‘μ° μ€ν μν νμΈ
WORKFLOW_NAME="Production Tagging"
RUN_ID=$(gh run list --workflow="$WORKFLOW_NAME" --repo {owner}/{repo} --limit 1 --json databaseId --jq '.[0].databaseId')
# 3. μ€ν μν ν΄λ§
gh run watch $RUN_ID --repo {owner}/{repo}
κ²°κ³Ό νμΈ
# 4. Release μμ± νμΈ
gh release list --repo {owner}/{repo} --limit 5
# 5. νκ·Έ νμΈ
git tag -l "v*" | tail -5
# 6. Milestone close νμΈ
gh api repos/{owner}/{repo}/milestones --jq '.[] | select(.state == "closed") | .title'
μλ£ λ©μμ§
[SEMO] Skill: release-manager β PRD νκΉ
μλ£
β
μν¬νλ‘μ°: Production Tagging
π·οΈ νκ·Έ: v{version}
π Release: https://github.com/{owner}/{repo}/releases/tag/v{version}
π¦ Milestone: release-{version} (closed)
---
λ€μ λ¨κ³: infra λ ν¬μμ docker-compose.yml λ²μ μ
λ°μ΄νΈ ν μ΄μ λ°°ν¬
μλ¬ μ²λ¦¬
μν¬νλ‘μ° μ€ν¨ μ
# μ€ν¨ λ‘κ·Έ νμΈ
gh run view $RUN_ID --repo {owner}/{repo} --log-failed
# μ¬μ€ν
gh run rerun $RUN_ID --repo {owner}/{repo}
μλ¬ λ©μμ§ ν¬λ§·
[SEMO] Skill: release-manager β β μ€λ₯ λ°μ
**μν¬νλ‘μ°**: {workflow_name}
**μν**: failed
**Run ID**: {run_id}
**μλ¬ λ‘κ·Έ**:
{error_log}
**μ‘°μΉ λ°©λ²**:
1. λ‘κ·Έ νμΈ: `gh run view {run_id} --log`
2. μ¬μ€ν: `gh run rerun {run_id}`
3. μλ νμΈ ν λ€μ μλ
μΆλ ₯ νμ
λ§μΌμ€ν€ νμΈ κ²°κ³Ό
[SEMO] Skill: release-manager β λ§μΌμ€ν€ νμΈ
π¦ λ ν¬μ§ν 리: {owner}/{repo}
**Open λ§μΌμ€ν€:**
| λ²νΈ | μ λͺ© | μν |
|------|------|------|
| #1 | release-1.0.4 | open |
| #2 | release-1.0.5 | open |
**μ΅μ λ²μ μ μ**: release-{next_version}
STG λ°°ν¬ μ§ν μ€
[SEMO] Skill: release-manager β STG λ°°ν¬ μ§ν μ€
β³ μν¬νλ‘μ°: Staging CI/CD
π μν: in_progress
β±οΈ κ²½κ³Ό: {elapsed_time}
μ€μκ° λͺ¨λν°λ§: `gh run watch {run_id}`
PRD νκΉ μ§ν μ€
[SEMO] Skill: release-manager β PRD νκΉ
μ§ν μ€
β³ μν¬νλ‘μ°: Production Tagging
π μν: in_progress
β±οΈ κ²½κ³Ό: {elapsed_time}
μ€μκ° λͺ¨λν°λ§: `gh run watch {run_id}`
References
- onpremise-supabase-deploy-flow.md - λ°°ν¬ νλ‘μ° μμΈ
- github-projects.md - GitHub νλ‘μ νΈ μ€μ