Commitizen customizable adapter following the conventional-changelog format.
npm install cz-customcz-custom. Originally, this project started as a commitizen plugin (Option 1).
cz-custom in standalone mode (Option 2), just like any NodeJS script. It's recommended to use Option 2 for simplicity. The way you configure is shared between both options.
.cz-config.js
cz-config.js to your home directory.
npm i cz-custom -g
cz-custom from your root repo.
npx cz-custom
cz-custom without commitzen.
npm install cz-custom --save-dev
package.json:
"scripts" : {
...
"commit": "./node_modules/cz-custom/standalone.js"
}
`
* See options below how to create and where you could put your .cz-config.js file.
* now run: npm run commit.
Option 3 - cz-custom as commitizen plugin
This is how this project started.
* install commitizen in case you don't have it: npm install -g commitizen. Make sure you have the latest version of commitizen installed globally.
* configure commitizen to use cz-custom as plugin. Add those lines to your package.json:
`
...
"config": {
"commitizen": {
"path": "node_modules/cz-custom"
}
}
`
Configuration (Shared between options 1,2 and 3)
* Copy contents of the example config file and paste into a new file .cz-config.js
$3
* cz-custom will first look for a file called .cz-config.js or .config/cz-config.js in the project root, near your package.json
* If no config found, it will look for .cz-config.js or .config/cz-config.js in your home directory
* alternatively add the config location in your package.json:
`
...
"config": {
"commitizen": { // not needed for standlone usage
"path": "node_modules/cz-custom"
},
"cz-custom": {
"config": "config/path/to/my/config.js"
}
}
`
Note: option one allows you to have your config away from root directory. It also gives you a change to define any name to your .cz-config.js.
$3
This is suitable when your team is not ready to roll cz-custom across all teams but you still would like to use it for your own commits, no matter the project.
Steps:
* create config file:
create a file called .cz-config.js in your git repository root (Assumptions: you git ignore global on ~/.gitignore_global for .cz-config.js). Or;
* create a file called .cz-config.js your home directory.
#### Additional steps when used as commitizen plugin
* npm install -g commitizen
* npm install -g cz-custom. Make sure you have version >v5.6.x
* create global commitizen config file .czrc: echo '{ "path": "cz-custom" }' > ~/.czrc
* now run: npx git-cz or git cz.
Notes:
* you should commit your .cz-config.js file to your git when applicable.
Hopefully this will help you to have consistent commit messages and have a fully automated deployment without any human intervention.
---
Options
Here are the options you can set in your .cz-config.js:
* subjectLimit: {number, default 100}: This is the subject limit. Example: this is a new feature or fix a bug
* subjectSeparator: {string, default ': '}: This is the subject separator. Example: feat: this is a new feature
* typePrefix: {string, default ''}: This is the commit type prefix. Example: config: { typePrefix: '[' }, result: [feat: this is a new feature
* typeSuffix: {string, default ''}: This is the commit type suffix. Example: config: { typePrefix: '[', typeSuffix: ']', subjectSeparator: ' ' }, result: [feat] this is a new feature
* scopes: {Array of Strings}: Specify the scopes for your particular project. Eg.: for some banking system: ["acccounts", "payments"]. For another travelling application: ["bookings", "search", "profile"]
* scopeOverrides: {Object where key contains a Array of String}: Use this when you want to override scopes for a specific commit type. Example below specify scopes when type is fix:
`
scopeOverrides: {
fix: [
{name: 'merge'},
{name: 'style'},
{name: 'e2eTest'},
{name: 'unitTest'}
]
}
`
* allowCustomScopes: {boolean, default false}: adds the option custom to scope selection so you can still type a scope if you need.
* allowEmptyScopes: {boolean, default false}: allow non-selection or not to fill in the scopes.
* customScopesName: {string, default 'custom scopes'}: custom scopes label in terminal scopes list.
* emptyScopesName: {string, default 'empty scopes'}: empty scopes label in terminal scopes list.
* allowBreakingChanges: {Array of Strings: default none}. List of commit types you would like to the question breaking change prompted. Eg.: ['feat', 'fix'].
* skipQuestions: {Array of Strings: default none}. List of questions you want to skip. Eg.: ['body', 'footer'].
* skipEmptyScopes: {boolean, default false}: If a chosen type has no scopes declared, skip the scope question
* appendBranchNameToCommitMessage: If you use cz-custom with cz-customizable-ghooks, you can get the branch name automatically appended to the commit message. This is done by a commit hook on cz-customizable-ghooks. This option has been added on cz-customizable-ghooks, v1.3.0. Default value is true.
* ticketNumberPrefix: {string, default 'ISSUES CLOSED:'}: Set custom prefix for footer ticker number.
* breakingPrefix: {string, default 'BREAKING CHANGE:'}: Set a custom prefix for the breaking change block in commit messages.
* footerPrefix: {string, default 'ISSUES CLOSED:'}: Set a custom prefix for the footer block in commit messages. Set to empty string to remove prefix.
* breaklineChar: {string, default '|'}: It gets replaced with \n to create the breakline in your commit message. This is supported for fields body and footer at the moment.
* upperCaseSubject: { boolean, default false }: Capitalizes first subject letter if set to true
* askForBreakingChangeFirst: { boolean, default false }: It asks for breaking change as first question when set to true
Related tools
- (https://github.com/commitizen/cz-cli)
- (https://github.com/leonardoanalista/corp-semantic-release)
- (https://github.com/semantic-release/semantic-release)
- (https://github.com/uglow/cz-customizable-ghooks)
GOTCHAS
* backticks
If you wish to have backticks in your content, for example "feat: \string\", the commit preview will be "feat: \\\string\\\".
Don't worry because on your git log will be "feat: \string\" as desired.
* multiline contents on the body of the message
Body is the only place where you can use a pipe to break lines.
E.g.: you type this: my items are:| - item01| - item 02, which will become:
`
my items are:
- item01
- item 02
`
CONTRIBUTING
$3
* if you add a new config property, please remember to update files README.md and index.d.ts`.