Agent Skills: release-manager Skill

|

UncategorizedID: semicolon-devteam/semo/release-manager

Install this agent skill to your local

pnpm dlx add-skill https://github.com/semicolon-devteam/semo/tree/HEAD/semo-system/semo-skills/release-manager

Skill Files

Browse the full folder contents for release-manager.

Download Skill

Loading file tree…

semo-system/semo-skills/release-manager/SKILL.md

Skill Metadata

Name
release-manager
Description
|

πŸ”” 호좜 μ‹œ λ©”μ‹œμ§€: 이 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