on: push: branches: [ main ]
jobs: release: runs-on: ubuntu-latest steps: # 깃허브 저장소 체크아웃 (fetch-depth: 0은 전체 커밋 히스토리를 가져옴) - uses: actions/checkout@v3 with: fetch-depth: 0
# JDK 17 설정 (Spring Boot 3.x 기준)
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
# semantic-release는 Node.js 기반이므로 Node.js 설치
- name: Setup Node.js
uses: actions/setup-node@v3
# semantic-release 관련 npm 패키지 설치
# @semantic-release/git: 깃 커밋/태그 자동화
# @semantic-release/changelog: CHANGELOG.md 자동 생성
- name: Install dependencies
run: npm install -g semantic-release @semantic-release/git @semantic-release/changelog
# Gradle 캐시 설정으로 빌드 속도 향상
- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: ~/.gradle/caches
key: $-gradle-$
- name: Run semantic-release
env:
GH_TOKEN: $
run: npx semantic-release
## .releaserc.json 작성
semantic-release 설정을 담당하는데 아래와 같은 요소들을 설정해줄 수 있다.
- Git 저장소(URL, 배포할 브랜치, 태그 포맷)
- 사용할 플러그인 및 옵션 설정
- 실행 모드(디버그, dry run, local)
아래 예시를 실제 사용할 때는 주석을 삭제한다.
```json
{
// main 브랜치에서만 릴리즈 수행
"branches": ["main"],
// 사용할 플러그인 설정
"plugins": [
// 커밋 메시지 분석하여 버전 결정
"@semantic-release/commit-analyzer",
// 릴리즈 노트 생성
"@semantic-release/release-notes-generator",
// CHANGELOG.md 파일 생성/업데이트
"@semantic-release/changelog",
// 변경된 파일 자동 커밋
"@semantic-release/git",
// GitHub 릴리즈 생성 및 자산 업로드
[
"@semantic-release/github",
{
"assets": [
{
// 빌드된 JAR 파일을 릴리즈에 첨부
"path": "build/libs/*.jar",
"label": "Spring Boot JAR"
}
]
}
]
]
}