go-commitlinter
go-commitlinter is simple commit message linter.
Quick Start
go install github.com/masahiro331/go-commitlinter@latest
echo "go-commitlinter" >> .git/hooks/commit-msg
chmod 755 .git/hooks/commit-msg
Description
The go-commitlinter will detect and fail a commit message that is not in the following format.
<type>(<scope>): <subject>
The type
and scope
should always be lowercase as shown below.
The <scope>
can be empty (e.g. if the change is a global or difficult to assign to a single component), in which case the parentheses are omitted.
Allowed <type>
values:
- feat for a new feature for the user, not a new feature for build script.
- fix for a bug fix for the user, not a fix to a build script.
- perf for performance improvements.
- docs for changes to the documentation.
- style for formatting changes, missing semicolons, etc.
- refactor for refactoring production code, e.g. renaming a variable.
- test for adding missing tests, refactoring tests; no production code change.
- build for updating build configuration, development tools or other changes irrelevant to the user.
- chore for updates that do not apply to the above, such as dependency updates.
<scope>
example:
- parser
- controller
- some
package namespace
- etc...
Other use cases
For example, if you want to validate the title of a pull request. Add the following github actions workflow.
name: Test
on:
pull_request:
types: [edited, opened]
env:
GO_VERSION: "1.17"
jobs:
test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Go pull request message linter
uses: masahiro331/go-commitlinter@0.1.2
env:
TITLE: ${{ github.event.pull_request.title }}
Custom Rules
This tool is able to custom rules.
go-commitlinter -rule rule.yaml
This is default rules.
skip_prefixes:
- 'Merge branch '
- 'BREAKING: '
type_rules:
- type: feat
description: for a new feature for the user, not a new feature for build script.
- type: fix
description: for a bug fix for the user, not a fix to a build script.
- type: perf
description: for performance improvements.
- type: docs
description: for changes to the documentation.
- type: style
description: for formatting changes, missing semicolons, etc.
- type: refactor
description: for refactoring production code, e.g. renaming a variable.
- type: test
description: for adding missing tests, refactoring tests; no production code change.
- type: build
description: for updating build configuration, development tools or other changes irrelevant to the user.
- type: chore
description: for updates that do not apply to the above, such as dependency updates.
reference: https://github.com/masahiro331/go-commitlinter#description
style_pattern: '[a-z]+'
style_doc: The type and scope should always be lowercase.
scope_pattern: '(feat|fix|perf|docs|style|refactor|test|build|chore)'
scope_doc: The <scope> can be empty (e.g. if the change is a global or difficult to assign to a single component), in which case the parentheses are omitted.
subject_pattern: '[a-z]\w*'
subject_doc: The first letter of <subject> should be lowercase.
- skip_prefixes: Use skip some titles. for example, merge commit "Merge branch 'main' of ....."
- type_rules: Use it to add your own type.
- reference: Include a link to the CONTRIBUTING GUILD.
- style_pattern: Matching pattern of style.
- style_doc: Describe the specifications of style.
- scope_pattern: Matching pattern of scope.
- scope_doc: Describe the specifications of scope.
- subject_pattern: Matching pattern of subject.
- subject_doc: Describe the specifications of subject.