semantic-release는 Conventional Commits 메시지를 분석하여 자동으로 버전을 결정하고 패키지를 릴리즈하는 도구다. 버전 범프, 변경 로그 생성, npm 배포, Git 태그를 완전 자동화한다.
릴리즈 흐름
Conventional Commits 분석
↓
버전 결정 (feat→minor, fix→patch, BREAKING→major)
↓
CHANGELOG.md 자동 생성
↓
package.json 버전 업데이트
↓
Git 태그 생성 (v1.2.3)
↓
npm publish (또는 GitHub Release)
.releaserc.json 설정
json
{
"branches": ["main", { "name": "beta", "prerelease": true }],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
["@semantic-release/changelog", {
"changelogFile": "CHANGELOG.md"
}],
["@semantic-release/npm", {
"npmPublish": true
}],
["@semantic-release/git", {
"assets": ["CHANGELOG.md", "package.json"],
"message": "chore(release): ${nextRelease.version} [skip ci]"
}],
"@semantic-release/github"
]
}
GitHub Actions 통합
yaml
name: Release
on:
push:
branches: [main]
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: false
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npx semantic-release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
관련 문서