Skip to content

Commit 9ac748b

Browse files
Dobromir Hristovafontcu
authored andcommitted
feat: Add commit message linting (#1382)
* feat: add commitlint with conventional commit * chore: add commitized as commit npm script Commitizen allows easy commit message formatting * chore: add commit convention docs * chore: run formatters and linters before commit * chore: add linting to staged files before commit * feat: lint staged files before commit * Update .github/CONTRIBUTING.md Co-Authored-By: Adrià Fontcuberta <[email protected]> * fix: run prettier and eslint to fix the items, pre-commit * build: add a default node version Co-authored-by: Adrià Fontcuberta <[email protected]>
1 parent e4d8c2c commit 9ac748b

File tree

5 files changed

+1401
-48
lines changed

5 files changed

+1401
-48
lines changed

.github/COMMIT_CONVENTIONS.md

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
## Git Commit Message Convention
2+
3+
> This is adapted from [Angular's commit convention](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular).
4+
5+
#### TL;DR:
6+
7+
Messages must be matched by the following regex:
8+
9+
```js
10+
;/^(revert: )?(feat|fix|polish|docs|style|refactor|perf|test|workflow|ci|chore|types)(\(.+\))?: .{1,50}/
11+
```
12+
13+
#### Examples
14+
15+
Appears under "Features" header, `Server Utils` subheader:
16+
17+
```
18+
feat(server-utils): add 'props' option
19+
```
20+
21+
Appears under "Bug Fixes" header, `Test Utils` subheader, with a link to issue #28:
22+
23+
```
24+
fix(test-utils): handle events on blur
25+
26+
close #28
27+
```
28+
29+
Appears under "Performance Improvements" header, and under "Breaking Changes" with the breaking change explanation:
30+
31+
```
32+
perf(test-utils): improve vdom diffing by removing 'foo' option
33+
34+
BREAKING CHANGE: The 'foo' option has been removed.
35+
```
36+
37+
The following commit and commit `667ecc1` do not appear in the changelog if they are under the same release. If not, the revert commit appears under the "Reverts" header.
38+
39+
```
40+
revert: feat(server-utils): add 'comments' option
41+
42+
This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
43+
```
44+
45+
### Full Message Format
46+
47+
A commit message consists of a **header**, **body** and **footer**. The header has a **type**, **scope** and **subject**:
48+
49+
```
50+
<type>(<scope>): <subject>
51+
<BLANK LINE>
52+
<body>
53+
<BLANK LINE>
54+
<footer>
55+
```
56+
57+
The **header** is mandatory and the **scope** of the header is optional.
58+
59+
### Revert
60+
61+
If the commit reverts a previous commit, it should begin with `revert:`, followed by the header of the reverted commit. In the body, it should say: `This reverts commit <hash>.`, where the hash is the SHA of the commit being reverted.
62+
63+
### Type
64+
65+
If the prefix is `feat`, `fix` or `perf`, it will appear in the changelog. However, if there is any [BREAKING CHANGE](#footer), the commit will always appear in the changelog.
66+
67+
Other prefixes are up to your discretion. Suggested prefixes are `docs`, `chore`, `style`, `refactor`, and `test` for non-changelog related tasks.
68+
69+
### Scope
70+
71+
The scope could be anything specifying the place of the commit change. For example `core`, `compiler`, `ssr`, `v-model`, `transition` etc...
72+
73+
### Subject
74+
75+
The subject contains a succinct description of the change:
76+
77+
- use the imperative, present tense: "change" not "changed" nor "changes"
78+
- don't capitalize the first letter
79+
- no dot (.) at the end
80+
81+
### Body
82+
83+
Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes".
84+
The body should include the motivation for the change and contrast this with previous behavior.
85+
86+
### Footer
87+
88+
The footer should contain any information about **Breaking Changes** and is also the place to
89+
reference GitHub issues that this commit **Closes**.
90+
91+
**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines. The rest of the commit message is then used for this.

.github/CONTRIBUTING.md

+5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Hi! I’m really excited that you are interested in contributing to Vue Test Uti
55
- [Code of Conduct](https://github.com/vuejs/vue/blob/dev/.github/CODE_OF_CONDUCT.md)
66
- [Issue Reporting Guidelines](#issue-reporting-guidelines)
77
- [Pull Request Guidelines](#pull-request-guidelines)
8+
- [Committing Changes](#committing-changes)
89
- [Development Setup](#development-setup)
910
- [Project Structure](#project-structure)
1011

@@ -34,6 +35,10 @@ Hi! I’m really excited that you are interested in contributing to Vue Test Uti
3435
- Provide detailed description of the bug in the PR. Live demo preferred.
3536
- Add appropriate test coverage if applicable.
3637

38+
### Committing Changes
39+
40+
Commit messages should follow the [commit message convention](./COMMIT_CONVENTION.md) so that changelogs can be automatically generated. Commit messages will be automatically validated upon commit. If you are not familiar with the commit message convention, you can use `npm run commit` or `yarn commit` instead of `git commit`, which provides an interactive CLI for generating proper commit messages.
41+
3742
## Development Setup
3843

3944
You will need [Node.js](http://nodejs.org) **version 6+**

.nvmrc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
v10

package.json

+29-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"build": "lerna run build",
1010
"build:test": "lerna run build:test",
1111
"clean": "lerna clean --yes",
12+
"commit": "git-cz",
1213
"docs": "vuepress dev docs",
1314
"docs:build": "vuepress build docs",
1415
"flow": "flow check",
@@ -64,7 +65,6 @@
6465
"markdown-it-include": "^1.0.0",
6566
"mocha": "^5.2.0",
6667
"mocha-webpack": "^1.0.1",
67-
"prettier": "^1.16.0",
6868
"rollup": "1",
6969
"rollup-plugin-buble": "^0.19",
7070
"rollup-plugin-commonjs": "10",
@@ -89,6 +89,33 @@
8989
"webpack-node-externals": "^1.6.0"
9090
},
9191
"devDependencies": {
92-
"@vue/composition-api": "^0.3.2"
92+
"@commitlint/cli": "^8.2.0",
93+
"@commitlint/config-conventional": "^8.2.0",
94+
"@vue/composition-api": "^0.3.2",
95+
"commitizen": "^4.0.3",
96+
"cz-conventional-changelog": "^3.0.2",
97+
"husky": "^3.1.0",
98+
"lint-staged": "^9.5.0",
99+
"prettier": "^1.16.0"
100+
},
101+
"config": {
102+
"commitizen": {
103+
"path": "./node_modules/cz-conventional-changelog"
104+
}
105+
},
106+
"commitlint": {
107+
"extends": [
108+
"@commitlint/config-conventional"
109+
]
110+
},
111+
"husky": {
112+
"hooks": {
113+
"pre-commit": "lint-staged",
114+
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
115+
}
116+
},
117+
"lint-staged": {
118+
"*.{js,json,vue,md}": ["prettier --write", "git add"],
119+
"*.{js,vue}": ["eslint --fix", "git add"]
93120
}
94121
}

0 commit comments

Comments
 (0)