An opinionated commitlint config. Well-commented, justified, and tidily formatted.
Note: see this gist for setting up commitlint and husky.
# with npm
npm i -D @pskfyi/commitlint-config
# with yarn
yarn add -D @pskfyi/commitlint-config
In commitlint.config.js
at the root of your repo:
module.exports = {
extends: ["@pskfyi/commitlint-config"],
rules: {
// Override this rule to explicitly state your own (scope)s.
"scope-enum": [
2, // Throw error when (scope) is not one of these values.
"always",
[
// These are the defaults baked into the config.
"docs",
"repo",
],
],
},
};
See /tests/README.md
Invalid:
echo "docs(core): some message" # docs type removed; now is a default (scope)
echo "revert(repo): some message" # revert and perf types removed; use refactor
Valid:
echo "fix(docs): Sandbox re-renders as expected" # uppercase subject allowed
echo "refactor(core): now uses Typescript; provided interfaces." # period allowed
echo "config(app): added namespacing to PostCSS" # new type: config
-
In all other contexts, we use capital letters at the beginnings of statements. Commits aren't special.
-
Types 'revert' and 'perf' both are varieties of refactor; no need for additional types.
-
Elaborate docs, often found in monorepos, function more as a scope than a type; they can have their own feats, fixes, styles, tests, ci, and builds. "docs" deserves to be a (scope) rather than a type to allow these commits to be accurately expressed.
-
Changing config files, especially babel and webpack files, is not a chore. An alternative type is preferable, but none are suitable, hence the addition of the "config" type.