A zero-config opiniated, commitizen like command line utility to enforce the conventional commits and have a clean changelog with standard-version.
standard-commit: Same as
git commitbut with prompt and formating of the commit message.standard-commitlint runs commitlint based on your standard-commit config.
standard-commithook is meant to be run as a
commit-msggit hook to enforce the convention.
npm install -g standard-commitstandard-commit --help# you can create an alias:
git config --global alias.cc '!standard-commit'# then use:
git cc <option># Usage: standard-commitlint [options...]# Where <options> is one of:# -f --from lower end of the commit range to lint.# -t --to upper end of the commit range to lint.
standard-commitlint --help# CI check before merge request
npx -p standard-commit standard-commitlint --from origin/masterinstall yorkie (or husky@next)
npm install --save-dev yorkie standard-commit standard-versionand setup the scripts and commit-msg hook in your package.json
{
"scripts": {
"commit": "standard-commit",
"commitlint": "standard-commitlint",
"release": "standard-version"
},
"gitHooks": {
"commit-msg": "standard-commithook"
}
}# use commit script to commit
npm -s run commit
# use commitlint script to check commit history
npm -s run commitlint -- --from origin/master
# use release script to create a version commit
npm -s run releasestandard-commit --inityou can configure standard-commit via:
- A
.standard-commitrcfile, written in YAML or JSON, with optional extensions: .yaml/.yml/.json. - A
standard-commit.config.jsfile that exports an object. - A
standard-commitkey in your package.json file.
{/** * Allowed types * * @default ['feat','fix','chore','docs','style','refactor','test'] */types?: string[]/** * When set to 'staged', suggest from staged files (git). * When set to 'packages, suggest from package names (monorepo). * When set to an array, the list of scopes. * * @default 'staged' */scopes?: 'staged'|'packages'|string[]/** * When set to 'suggest', scope is optional. * When set to 'enforce, scope can not be empty. * When set to false, scope prompt is skipped. * @default false */promptScope?: 'suggest'|'enforce'|false/** * whether to strip the scope for scoped packages * @default true */stripPackageScope?: boolean
/** * set to false to skip. * * @default true */promptBody?: boolean
/** * set to false to skip. * * @default true */promptBreaking?: boolean
/** * set to false to skip. * * @default true */promptIssues?: boolean
/** * set to false to skip. * * @default true */promptConfirm?: boolean
/** * set to true to enforce 'Signed-off-by:' in footer. * * @default false */enforceSignedOffBy?: boolean
/** * enforce issue reference when true else for specified list of types. * * @default [] */enforceIssueRefs?: boolean |string[]/** * enforce issue reference to match the given pattern * * @default ['#'] */issuePrefixes?: string[]/** * extra commitlint rules * * see http://marionebl.github.io/commitlint/#/reference-rules */rules?: {}}