Skip to content

Commit c4b1f6a

Browse files
unam98alh0409
andauthored
ci: 상용 배포용 태그 자동 생성 워크플로 추가 (Promote to Production) (#241)
git tag를 로컬에서 직접 만들고 push하는 게 번거롭다는 피드백에 따라, GitHub Actions workflow_dispatch로 버튼 한 번(또는 gh workflow run)에 다음 semver 태그를 계산해 생성/push하는 워크플로를 추가했다. 이 태그 push가 prod-cd.yml의 트리거(on.push.tags)를 실행시켜 상용 배포로 이어진다. Co-authored-by: 나미 <dnska6657@gmail.com>
1 parent 24ed6ba commit c4b1f6a

2 files changed

Lines changed: 77 additions & 1 deletion

File tree

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# GitHub Actions 탭에서 버튼 한 번으로 상용 배포를 트리거하기 위한 워크플로.
2+
# main의 다음 semver 태그(v1.2.3 형태)를 자동으로 계산해 push하고,
3+
# 그 태그 push가 prod-cd.yml의 트리거(on.push.tags)를 실행시켜 상용 배포로 이어진다.
4+
name: Promote to Production
5+
6+
on:
7+
workflow_dispatch:
8+
inputs:
9+
bump:
10+
description: "버전 증가 단위"
11+
required: true
12+
default: "patch"
13+
type: choice
14+
options:
15+
- patch
16+
- minor
17+
- major
18+
19+
permissions:
20+
contents: write
21+
22+
jobs:
23+
tag:
24+
runs-on: ubuntu-latest
25+
steps:
26+
- uses: actions/checkout@v3
27+
with:
28+
fetch-depth: 0
29+
30+
- name: 다음 버전 태그 계산
31+
id: version
32+
run: |
33+
git fetch --tags
34+
LATEST=$(git tag --list 'v*' --sort=-v:refname | head -n1)
35+
if [ -z "$LATEST" ]; then
36+
LATEST="v0.0.0"
37+
fi
38+
echo "현재 최신 태그: $LATEST"
39+
40+
VERSION=${LATEST#v}
41+
MAJOR=$(echo "$VERSION" | cut -d. -f1)
42+
MINOR=$(echo "$VERSION" | cut -d. -f2)
43+
PATCH=$(echo "$VERSION" | cut -d. -f3)
44+
45+
case "${{ inputs.bump }}" in
46+
major)
47+
MAJOR=$((MAJOR + 1)); MINOR=0; PATCH=0
48+
;;
49+
minor)
50+
MINOR=$((MINOR + 1)); PATCH=0
51+
;;
52+
patch)
53+
PATCH=$((PATCH + 1))
54+
;;
55+
esac
56+
57+
NEW_TAG="v${MAJOR}.${MINOR}.${PATCH}"
58+
echo "새 태그: $NEW_TAG"
59+
echo "new_tag=$NEW_TAG" >> "$GITHUB_OUTPUT"
60+
61+
- name: 태그 생성 및 push (→ prod-cd.yml 트리거)
62+
run: |
63+
git config user.name "github-actions[bot]"
64+
git config user.email "github-actions[bot]@users.noreply.github.com"
65+
git tag "${{ steps.version.outputs.new_tag }}"
66+
git push origin "${{ steps.version.outputs.new_tag }}"
67+
68+
- name: 요약
69+
run: echo "## ${{ steps.version.outputs.new_tag }} 태그 push 완료 — RUNNECT-PROD-CD가 곧 트리거됩니다." >> "$GITHUB_STEP_SUMMARY"

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,14 @@
176176
| staging (Render) | `main` push | 자동 배포 |
177177
| 상용 (AWS CodeDeploy) | `v*` 형식의 git tag push | 수동 승격 |
178178

179-
merge → staging에서 자동 확인 → 문제 없으면 `git tag v1.x.x && git push origin v1.x.x`로 상용 배포. 버전은 느슨한 semver(기능 추가 minor, 버그 수정 patch)를 따른다.
179+
merge → staging에서 자동 확인 → 문제 없으면 상용 배포. 태그를 로컬에서 직접 만들 필요 없이, **GitHub Actions의 `Promote to Production` workflow**(`workflow_dispatch`)를 실행하면 다음 semver 태그를 자동 계산해 push까지 해준다.
180+
181+
```bash
182+
# Actions 탭에서 "Promote to Production" → Run workflow 버튼으로도 가능
183+
gh workflow run promote-to-prod.yml -f bump=patch # patch | minor | major
184+
```
185+
186+
이 태그 push가 `prod-cd.yml`의 트리거를 실행시켜 상용 배포로 이어진다.
180187

181188
### 🚩 Feature Flag
182189

0 commit comments

Comments
 (0)