홈 › CI/CD › 06 / 7

릴리스 자동화

섹션 7진행 0 / 7

4. 응용 변형 예제

4.1 BREAKING CHANGE 로 메이저 버전 올리기

text
feat!: 설정 파일 형식을 JSON 에서 YAML 로 변경

BREAKING CHANGE: config.json 을 더 읽지 않습니다. config.yaml 로 옮겨야 합니다.

bump_type 의 첫 번째 조건(!: 또는 BREAKING CHANGE)에 걸려 다음 버전은 2.0.0 이 됩니다. 커밋 본문에 마이그레이션 방법을 함께 적어 둡니다.

4.2 release-please 가 여는 Release PR

text
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 설정 파일

json
{
  "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 태그 트리거 워크플로에 산출물 첨부 단계 추가

yaml
    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.sha256

04-build-artifact 의 빌드·체크섬 단계와 github.ref_name(push 된 태그 이름)을 합치면 Release 화면에 파일이 자동으로 붙습니다.

4.5 Keep a Changelog 로 여러 릴리스 누적

text
# Changelog

## v1.1.1
### Fixes
- 결제 금액 반올림 오류 수정

## v1.1.0
### Features
- 소셜 로그인 추가

update_changelog 함수가 매번 헤더 바로 아래에 새 절을 끼워 넣으므로, 최신 릴리스가 항상 파일 맨 위에 쌓입니다.