릴리스 자동화
3. 코드 예제
예제 1: 저장소 준비와 첫 릴리스 태그 — 01_release.sh 발췌
echo "1.0.0" > VERSION
git add VERSION
commit_at "chore: 첫 릴리스 준비"
tag_at v1.0.0 "Release v1.0.0"
git push origin main
git push origin v1.0.0
echo "현재 태그: $(git describe --tags)"warning: You appear to have cloned an empty repository.
To WORK/origin.git
* [new branch] main -> main
To WORK/origin.git
* [new tag] v1.0.0 -> v1.0.0
현재 태그: v1.0.0빈 bare 저장소를 clone 하면 나오는 경고는 정상입니다. VERSION 커밋과 주석 태그를 각각 push 해야 원격에도 태그가 생깁니다.
예제 2: 버전 올림 규칙 계산과 CHANGELOG 생성 — 01_release.sh 발췌
# bump_type 은 2.3 표를 grep -E 로 구현한 함수(핵심 원리 참고)
BUMP=$(bump_type v1.0.0..HEAD)
NEW_VER=$(next_version 1.0.0 "$BUMP")
echo "커밋 종류로 판정한 bump: $BUMP"
echo "다음 버전: v1.0.0 -> v$NEW_VER"
update_changelog v1.0.0..HEAD "$NEW_VER"
cat CHANGELOG.md커밋 종류로 판정한 bump: minor
다음 버전: v1.0.0 -> v1.1.0
# Changelog
## v1.1.0
### Features
- 소셜 로그인 추가
- 검색 기능 추가
### Fixes
- 로그인 시간 초과 오류 수정ci: 태그 push 릴리스 워크플로 추가·docs: 사용법 문서 추가 커밋은 feat·fix 가 아니라 체인지로그에 나타나지 않습니다. feat 이 하나라도 있어 MINOR 로 판정됐습니다.
예제 3: VERSION 갱신 커밋과 주석 태그 push — 01_release.sh 발췌
echo "$NEW_VER" > VERSION
git add VERSION CHANGELOG.md
commit_at "chore(release): v$NEW_VER"
tag_at "v$NEW_VER" "Release v$NEW_VER"
git push origin main
git push origin "v$NEW_VER"
git tag -l 'v*' --sort=v:refnameTo WORK/origin.git
dc72443..5e66386 main -> main
To WORK/origin.git
* [new tag] v1.1.0 -> v1.1.0
태그 목록:
v1.0.0
v1.1.0커밋 해시 dc72443·5e66386 은 스크립트 안 날짜·작성자가 고정돼 있어 다시 실행해도 항상 같습니다. chore(release) 커밋과 태그가 같은 지점을 가리킵니다.
예제 4: 핫픽스 릴리스와 cherry-pick — 01_release.sh 발췌
git switch -c hotfix/1.0.1 v1.0.0
commit_at "fix: 결제 금액 반올림 오류 수정"
FIX_SHA=$(git rev-parse HEAD)
tag_at v1.0.1 "Release v1.0.1 (hotfix)"
git switch main
cherry_pick_at "$FIX_SHA"
MAIN_BUMP=$(bump_type "v1.1.0..HEAD")
echo "main 판정: $MAIN_BUMP -> v$(next_version 1.1.0 "$MAIN_BUMP")"핫픽스 판정: patch -> v1.0.1
-- 같은 수정을 main 에도 cherry-pick --
main 판정: patch -> v1.1.1
main 의 VERSION 내용: 1.1.1
전체 태그(버전 순):
v1.0.0
v1.0.1
v1.1.0
v1.1.1v1.0.0 에서 분기해 v1.0.1 을 먼저 배포하고, 같은 수정을 main 에 cherry-pick 해 v1.1.1 로 다시 릴리스했습니다. 태그 네 개가 버전 순서대로 남습니다.