semantic-release는 자동화된 버전 관리 및 배포 도구입니다.
Git 커밋 메시지를 분석하여 자동으로 버전(예: 1.0.0 → 1.1.0) 및 CHANGELOG를 생성하고 배포하는 역할을 합니다.
✅ 버전 자동 증가 (major.minor.patch 관리)
✅ CHANGELOG 자동 생성 (CHANGELOG.md 파일 업데이트)
✅ NPM, GitHub, Docker 등에 자동 배포
✅ Git 태그(Tag) 자동 생성 (v1.2.3 같은 태그 추가)
semantic-release는 커밋 메시지를 분석하여 버전을 자동으로 결정합니다.
예를 들어, 다음 커밋들이 있다고 가정해봅시다.
feat: 로그인 기능 추가
fix: 로그인 시 비밀번호 오류 메시지 수정
feat: 사용자 프로필 수정 기능 추가
BREAKING CHANGE: API 응답 형식이 변경됨
| 커밋 타입 | 의미 | 버전 증가 |
|---|---|---|
fix: | 버그 수정 | patch (1.0.0 → 1.0.1) |
feat: | 기능 추가 | minor (1.0.0 → 1.1.0) |
BREAKING CHANGE: | 하위 호환 불가 변경 | major (1.0.0 → 2.0.0) |
위 예시에서는 feat가 포함되었고, BREAKING CHANGE도 있으므로
자동으로 메이저 버전 증가 (1.x.x → 2.0.0) 가 적용됩니다.
CHANGELOG.md 생성위의 커밋이 적용되면 semantic-release는 자동으로 CHANGELOG.md를 업데이트합니다.
📌 자동 생성된 CHANGELOG.md 예시
# Changelog
## [2.0.0] - 2025-02-02
### 🚀 기능 추가
- 로그인 기능 추가 (`feat: 로그인 기능 추가`)
- 사용자 프로필 수정 기능 추가 (`feat: 사용자 프로필 수정 기능 추가`)
### 🛠 버그 수정
- 로그인 시 비밀번호 오류 메시지 수정 (`fix: 로그인 시 비밀번호 오류 메시지 수정`)
### ⚠ BREAKING CHANGES
- API 응답 형식이 변경됨 (`BREAKING CHANGE: API 응답 형식 변경`)
semantic-release는 GitHub, NPM, Docker 등의 배포도 자동화할 수 있습니다.
📌 예시
v2.0.0 태그를 만들고, CHANGELOG.md 내용을 포함한 릴리즈 생성 npm publish 실행하여 새로운 버전 배포 docker push myapp:v2.0.0 실행 semantic-release 설치npm install -g semantic-release @semantic-release/changelog @semantic-release/git
.releaserc.json 설정 파일 추가📌 GitHub과 NPM에 자동 배포하는 예제
{
"branches": ["main"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@semantic-release/npm",
"@semantic-release/github",
"@semantic-release/git"
]
}
GitHub Actions 예시 (.github/workflows/release.yml)
name: Release
on:
push:
branches:
- main
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18
- name: Install Dependencies
run: npm install
- name: Run semantic-release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npx semantic-release
semantic-release를 사용하면?🔥 Conventional Commits 규칙을 잘 지키면, semantic-release로 버전 관리와 배포를 완전히 자동화할 수 있습니다! 🚀