Lint commit messages
Demo generated with svg-term-cli
cat docs/assets/commitlint.json | svg-term --out docs/assets/commitlint.svg --frame --profile=Seti --height=20 --width=80
- π Be a good commitizen
- π¦ Share configuration via npm
- π€ Tap into conventional-changelog
- What is commitlint
- Getting started
- CLI
- Config
- Shared configuration
- API
- Tools
- Roadmap
- Version Support
- Related projects
- License
- Development
commitlint checks if your commit messages meet the conventional commit format.
In general the pattern mostly looks like this:
type(scope?): subject #scope is optional; multiple scopes are supported (current delimiter options: "/", "\" and ",")Real world examples can look like this:
chore: run tests on travis ci fix(server): send cors headers feat(blog): add comment section Common types according to commitlint-config-conventional (based on the Angular convention) can be:
- build
- ci
- chore
- docs
- feat
- fix
- perf
- refactor
- revert
- style
- test
These can be modified by your own configuration.
# Install commitlint cli and conventional config npm install --save-dev @commitlint/{config-conventional,cli} # For Windows: npm install --save-dev @commitlint/config-conventional @commitlint/cli # Configure commitlint to use conventional config echo "module.exports = {extends: ['@commitlint/config-conventional']}" > commitlint.config.jsTo lint commits before they are created you can use Husky's commit-msg hook:
# Install Husky v6 npm install husky --save-dev # or yarn add husky --dev # Activate hooks npx husky install # or yarn husky install # Add hook npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'Check the husky documentation on how you can automatically have Git hooks enabled after install for different yarn versions.
Detailed Setup instructions
- Local setup - Lint messages on commit with husky
- CI setup - Lint messages during CI builds
- Primary way to interact with commitlint.
- npm install --save-dev @commitlint/cli
- Packages: cli
- Configuration is picked up from commitlint.config.js,.commitlintrc.js,.commitlintrc.json, or.commitlintrc.ymlfile or acommitlintfield inpackage.json
- Packages: cli, core
- See Rules for a complete list of possible rules
- An example configuration can be found at @commitlint/config-conventional
A number of shared configurations are available to install and use with commitlint:
- @commitlint/config-angular
- @commitlint/config-conventional
- @commitlint/config-lerna-scopes
- @commitlint/config-patternplate
- conventional-changelog-lint-config-atom
- conventional-changelog-lint-config-canonical
- commitlint-config-jira
β οΈ If you want to publish your own shareable config then make sure it has a name aligning with the patterncommitlint-config-emoji-logorcommitlint-config-your-config-nameβ then in extend all you have to write isemoji-logoryour-config-name.
- Alternative, programmatic way to interact with commitlint
- Packages:
- See API for a complete list of methods and examples
commitlint is considered stable and is used in various projects as development tool.
We identify ease of adoption and developer experience as fields where there is room and need for improvement. The items on the roadmap should enhance commitlint regarding those aspects.
-  Adoption: Provide reusable Travis CI integration: @commitlint/travis-cli(https://github.com/conventional-changelog/commitlint/releases/tag/v5.1.0)
-  DX: Support PR squash scenario via ahmed-taj/commitlint-bot and @commitlint/travis-cli
-  Adoption: Make ahmed-taj/commitlint-bot configurable via commitlintconfiguration
-  Adoption: Create commitlint init
- DX: Extend the configuration schema to allow for additional fields (descriptions, examples, fixes) on both the rule and value level
- DX: Incorporate an extended version of lennym/commit-template deducing a template from commitlint configuration
-  DX: Rewrite @commitlint/promptfor better usability (might involve a lot of yak-shaving)
- Node.js LTS >= 10.21.0
- git >= 2.13.2
- conventional-changelog β Generate a changelog from conventional commit history
- commitizen β Simple commit conventions for internet citizens
- create-semantic-module β CLI for quickly integrating commitizen and commitlint in new or existing projects
Copyright by @marionebl. All commitlint packages are released under the MIT license.
commitlint is developed in a mono repository.
git clone git@github.com:conventional-changelog/commitlint.git cd commitlint yarn yarn run build # run build tasks yarn start # run tests, again on changeFor more information on how to contribute please take a look at our contribution guide.
Before publishing a release do a yarn run publish --dry-run to get the upcoming version and update the version in the should print help test.
 Commit that change before creating the new version without --dry-run.
npm loginyarn clean yarn install yarn run build yarn test yarn run publish --otp <one-time password>npm loginyarn clean yarn install yarn run build yarn test npx lerna publish --conventional-commits --dist-tag next --otp <one-time password>If for some reason this stops in between, you can manually publish missing packages like this:
npm publish <package-name> --tag next --otp <one-time password> npm loginnpx lerna exec --no-bail --no-private --no-sort --stream -- '[ -n "$(npm v . dist-tags.next)" ] && npm dist-tag add ${LERNA_PACKAGE_NAME}@$(npm v . dist-tags.next) latest --otp <one-time password>'Remove next:
npx lerna exec --no-bail --no-private --no-sort --stream -- '[ -n "$(npm v . dist-tags.next)" ] && npm dist-tag rm ${LERNA_PACKAGE_NAME} next --otp <one-time password>'