Skip to main content

Prefixo | tipos de commit | Semantic release

  • Prefixo | tipos de commit | Semantic release

Guia rápido

Prefixo (Tipo do Commit)DescriçãoIncremento de Versão
feat:Nova funcionalidade🟢 minor (x.+1.x)
fix:Correção de bug🔵 patch (x.x.+1)
perf:Melhoria de desempenho🔵 patch (x.x.+1)
refactor:Refatoração sem mudar comportamentonenhum
style:Mudança de formatação, indentação, etc.nenhum
docs:Alteração na documentaçãonenhum
test:Adição ou atualização de testesnenhum
chore:Tarefas de build, configs, dependências, etc.nenhum
ci:Atualização de pipelines, CI/CDnenhum
build:Mudanças em build scripts ou dependênciasnenhum
revert:Reversão de commit anteriornenhum
feat!: ou BREAKING CHANGE:Mudança incompatível (breaking change)🔴 major (+1.x.x)

🚦 Como o Semantic Release decide a nova versão

Tipo de CommitIncremento de VersãoExemplo de Mensagem
fix:🩹 Patch (x.x.+1)fix: corrige bug no login
feat:Minor (x.+1.x)feat: adiciona botão de login
BREAKING CHANGE ou !💥 Major (+1.x.x)feat!: altera API de autenticação ou feat: nova API\n\nBREAKING CHANGE: remove parâmetro antigo
chore:🚫 Sem mudança de versãochore: atualiza dependências, adiciona logs
docs:🚫 Sem mudança de versãodocs: adiciona exemplo no README
style:🚫 Sem mudança de versãostyle: corrige formatação do código
refactor:🚫 Sem mudança de versão (a menos que tenha !)refactor: melhora performance do componente
test:🚫 Sem mudança de versãotest: adiciona novos testes unitários
perf:🩹 Patch (dependendo da config)perf: melhora desempenho do render

💥 Explicando os tipos que geram versão

1. fix:Patch

Indica uma correção de bug.

Exemplo: fix: corrige crash ao clicar no botão

Resulta em: 1.2.3 → 1.2.4


2. feat:Minor

Indica adição de funcionalidade que não quebra compatibilidade.

Exemplo: feat: adiciona suporte a login com Google

Resulta em: 1.2.3 → 1.3.0


3. ! ou BREAKING CHANGE:Major

Indica uma mudança incompatível com versões anteriores.

Exemplo:

feat!: altera assinatura do método de login

ou

feat: nova API de autenticação

BREAKING CHANGE: remove método loginAntigo()

Resulta em: 1.2.3 → 2.0.0


⚙️ Personalização

Esses tipos vêm do conventional-changelog-angular, que é o padrão. Mas você pode personalizar os tipos válidos e quais incrementam versão no arquivo release.config.js ou semantic-release no package.json.

Exemplo de custom config:

module.exports = {
branches: ['main'],
plugins: [
['@semantic-release/commit-analyzer', {
preset: 'angular',
releaseRules: [
{ type: 'chore', release: 'patch' },
{ type: 'refactor', release: 'minor' },
{ type: 'docs', release: false },
],
}],
'@semantic-release/release-notes-generator',
'@semantic-release/npm',
'@semantic-release/github',
],
};