릴리스 자동화
4. 응용 변형 예제
4.1 BREAKING CHANGE 로 메이저 버전 올리기
feat!: 설정 파일 형식을 JSON 에서 YAML 로 변경
BREAKING CHANGE: config.json 을 더 읽지 않습니다. config.yaml 로 옮겨야 합니다.bump_type 의 첫 번째 조건(!: 또는 BREAKING CHANGE)에 걸려 다음 버전은 2.0.0 이 됩니다. 커밋 본문에 마이그레이션 방법을 함께 적어 둡니다.
4.2 release-please 가 여는 Release PR
release-please[bot] opened PR #42
title: chore(release): 1.2.0 / files: VERSION, CHANGELOG.md이 PR 은 코드 변경이 없고 버전·체인지로그만 담고 있습니다. 리뷰어가 승인하고 병합하면 그 시점에 release-please 가 태그와 GitHub Release 를 만듭니다.
4.3 semantic-release 설정 파일
{
"branches": ["main"],
"plugins": ["@semantic-release/commit-analyzer", "@semantic-release/release-notes-generator", "@semantic-release/github"]
}commit-analyzer 가 이번 레슨의 bump_type 역할을, release-notes-generator 가 gen_changelog 역할을 대신합니다. main push 마다 자동으로 릴리스 여부를 판단합니다.
4.4 태그 트리거 워크플로에 산출물 첨부 단계 추가
steps:
- uses: actions/checkout@v4
- run: jar --create --file app-${{ github.ref_name }}.jar --main-class Main -C out .
- run: sha256sum app-*.jar > app.sha256
- uses: softprops/action-gh-release@v2
with:
files: app-*.jar, app.sha25604-build-artifact 의 빌드·체크섬 단계와 github.ref_name(push 된 태그 이름)을 합치면 Release 화면에 파일이 자동으로 붙습니다.
4.5 Keep a Changelog 로 여러 릴리스 누적
# Changelog
## v1.1.1
### Fixes
- 결제 금액 반올림 오류 수정
## v1.1.0
### Features
- 소셜 로그인 추가update_changelog 함수가 매번 헤더 바로 아래에 새 절을 끼워 넣으므로, 최신 릴리스가 항상 파일 맨 위에 쌓입니다.