Conventional Commits + Semantic Release
Este guia resume como utilizar o padrão Conventional Commits em conjunto com o Semantic Release para automatizar versionamento, changelog e publicação.
✅ 1. Conventional Commits
Formato básico:
<tipo>(escopo opcional): <mensagem breve>
Tipos mais comuns:
feat: nova funcionalidadefix: correção de bugchore: manutenção (sem impacto em produção)docs: mudanças na documentaçãostyle: formatação (semântica intacta)refactor: refatoração (sem correções ou novas features)test: testes adicionados/modificadosperf: melhorias de performancebuild: mudanças no processo de buildci: mudanças em CI/CD
Exemplos:
feat(api): adiciona endpoint de login
fix(login): corrige bug de token inválido
docs(readme): atualiza instruções de instalação
Padrão essencial para ferramentas como Semantic Release funcionarem corretamente.
🚀 2. Semantic Release
O que faz:
- Analisa commits com base em Conventional Commits
- Determina tipo de release (
major,minor,patch) - Gera changelog
- Publica release (npm, GitHub, etc.)
- Atualiza
package.jsoncom nova versão
Regras de versionamento:
fix→patch(ex: 1.0.0 → 1.0.1)feat→minor(ex: 1.0.0 → 1.1.0)BREAKING CHANGE→major(ex: 1.0.0 → 2.0.0)
⚙️ 3. Configuração prática
1. Instalar dependências
npm install --save-dev semantic-release @semantic-release/changelog @semantic-release/git @semantic-release/github
2. Arquivo release.config.js
module.exports = {
branches: ['main'],
plugins: [
'@semantic-release/commit-analyzer',
'@semantic-release/release-notes-generator',
'@semantic-release/changelog',
'@semantic-release/npm',
'@semantic-release/github',
[
'@semantic-release/git',
{
assets: ['CHANGELOG.md', 'package.json'],
message: 'chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}'
}
]
]
};
3. GitHub Actions: .github/workflows/release.yml
name: Release
on:
push:
branches:
- main
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npx semantic-release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
📌 Dicas finais
- Evite
git commit -m "atualização"— usefeat,fix, etc. - Facilite com o Commitizen:
npm install --save-dev commitizen
npx commitizen init cz-conventional-changelog --save-dev --save-exact
🧩 Recursos opcionais
- Monorepos: use
@semantic-release/monorepoou ferramentas comonx-release - Changelog manual: configure o plugin
@semantic-release/changelog
Description