Convenções
Ferramentas
Convenção
Dado um número de versão MAJOR.MINOR.PATCH, incremente a:
Pré-lançamento (pre-release) e metadados de construção (build) são extensões ao formato MAJOR. MINOR . PATCH.
Convenção
0
0
0
.0.
0
0
Convenção
Incompatibilidade na API pública
Convenção
Novidade mantendo a compatibilidade
Convenção
Correção mantendo a compatibilidade
Convenção
Especificação para dar significado legível às mensagens de commit para humanos e máquinas
Convenção
Estrutura para mensagem de commit
<tipo>[escopo opcional]: <descrição>
[corpo opcional]
[rodapé(s) opcional(is)]
Convenção
Estrutura para mensagem de commit
Convenção
0
0
0
.0.
0
0
Convenção
0
0
0
.0.
0
0
Convenção
0
0
0
.0.
0
0
0
0
0
.0.
0
0
Convenção
Exemplo de mensagem de commit
docs: ortografia correta de CHANGELOG
Mensagem de commit sem corpo
0.0.0
Exemplo de mensagem de commit
fix: corrige pequenos erros de digitação no código
veja o ticket para detalhes sobre os erros de digitação corrigidos
Revisado por: Daniel Nass
Refs #133
Mensagem de commit sem escopo, com descrição e referência no rodapé
0.0.0
0.0.1
Exemplo de mensagem de commit
feat: permitir que o objeto de configuração fornecido estenda outras configurações
BREAKING CHANGE: a chave `extends`, no arquivo de configuração, agora é utilizada para estender outro arquivo de configuração
Mensagem de commit com descrição e modificação que quebra a compatibilidade no rodapé
0.0.1
0.1.0
Exemplo de mensagem de commit
feat(lang): adiciona tradução para português brasileiro
Mensagem de commit com escopo
0.1.0
0.2.0
Exemplo de mensagem de commit
feat!: envia email para o cliente quando o produto é enviado
Mensagem de commit com ! para chamar a atenção para quebra a compatibilidade
0.2.0
1.0.0
Exemplo de mensagem de commit
feat(api)!: envia email para o cliente quando o produto é enviado
Mensagem de commit com escopo e ! para chamar a atenção para quebra a compatibilidade
1.0.0
2.0.0
Exemplo de mensagem de commit
chore!: remove suporte para Node 6
BREAKING CHANGE: refatorar para usar recursos JavaScript não disponíveis no Node 6.
Mensagem de commit sem escopo com ! e BREAKING CHANGE no rodapé
2.0.0
3.0.0
feat
feat
fix
feat
feat!
Nós vamos chegar lá...
Escrevendo mensagens de commit
npm install -D cz-git
bash
Escrevendo mensagens de commit
{
"scripts": {
},
"config": {
"commitizen": {
"path": "node_modules/cz-git"
}
}
}
package.json
Escrevendo mensagens de commit
module.exports = {
messages: {
type: 'Select the type of change that you\'re committing:',
scope: 'Denote the SCOPE of this change (optional):',
customScope: 'Denote the SCOPE of this change:',
subject: 'Write a SHORT, IMPERATIVE tense description of the change:\n',
body: 'Provide a LONGER description of the change (optional). Use ...',
breaking: 'List any BREAKING CHANGES (optional). Use "|" to break ...',
footerPrefixesSelect: 'Select the ISSUES type of changeList by ...',
customFooterPrefix: 'Input ISSUES prefix:',
footer: 'List any ISSUES by this change. E.g.: #31, #34:\n',
confirmCommit: 'Are you sure you want to proceed with the commit above?'
},
types: [
],
}
cz.config.js
Escrevendo mensagens de commit
module.exports = {
messages: {
},
types: [
{ value: 'feat', name: 'feat: A new feature' },
{ value: 'fix', name: 'fix: A bug fix' },
{ value: 'docs', name: 'docs: Documentation only changes' },
{ value: 'style', name: 'style: Changes that do not affect the...' },
{ value: 'refactor', name: 'refactor: A code change that neither...' },
{ value: 'test', name: 'test: Adding missing tests or...' },
{ value: 'build', name: 'build: Changes that affect the build...' },
{ value: 'ci', name: 'ci: Changes to our CI configuration..' },
{ value: 'chore', name: 'chore: Other changes that don\'t...' },
],
}
cz.config.js
Escrevendo mensagens de commit
const { readdirSync } = require('fs');
const { resolve } = require('path');
const packages = readdirSync(resolve(__dirname, 'packages'));
module.exports = {
messages: {
},
types: [
],
scopes: [...packages],
}
cz.config.js
Escrevendo mensagens de commit
{
"scripts": {
"commit": "git-cz"
},
"config": {
"commitizen": {
"path": "node_modules/cz-git",
"czConfig": "./cz.config.js"
}
}
}
package.json
Releases
nx release
bash
Releases
nx release [specifier]
bash
Releases
nx release version [specifier]
bash
Releases
nx release changelog [version]
bash
Releases
nx release publish
bash
Releases
{
"release": {
"projects": ["packages/*"]
}
}
nx.json
Releases
nx release --first-release --dry-run
bash
Releases
{
"release": {
"releaseTagPattern": "release/{version}",
"git": {
"commitMessage": "chore(release): {version}"
}
}
}
nx.json
Releases
{
"release": {
"projectsRelationship": "independent"
}
}
nx.json
Releases
{
"release": {
"releaseTagPattern": "release/{projectName}/{version}"
}
}
nx.json
Releases
{
"release": {
"changelog": {
"projectChangelogs": true
}
}
}
nx.json
Releases
{
"release": {
"version": {
"conventionalCommits": true
}
}
}
nx.json
Releases
import { releaseChangelog, releasePublish, releaseVersion } from 'nx/release';
import * as yargs from 'yargs';
(async () => {
const options = await yargs
.version(false) // don't use the default meaning of version in yargs
.option('version', {
description:
'Explicit version specifier to use, if overriding conventional commits',
type: 'string',
})
.option('dryRun', {
alias: 'd',
description:
'Whether or not to perform a dry-run of the release process, defaults to true',
type: 'boolean',
default: true,
})
.option('verbose', {
description:
'Whether or not to enable verbose logging, defaults to false',
type: 'boolean',
default: false,
})
.parseAsync();
const { workspaceVersion, projectsVersionData } = await releaseVersion({
specifier: options.version,
dryRun: options.dryRun,
verbose: options.verbose,
});
await releaseChangelog({
versionData: projectsVersionData,
version: workspaceVersion,
dryRun: options.dryRun,
verbose: options.verbose,
});
// The returned number value from releasePublish will be zero if all projects are published successfully, non-zero if not
const publishStatus = await releasePublish({
dryRun: options.dryRun,
verbose: options.verbose,
});
process.exit(publishStatus);
})();
nx.json