Explorar el Código

build: add git commit message validation

Evan You hace 8 años
padre
commit
b49c969474
Se han modificado 7 ficheros con 639 adiciones y 39 borrados
  1. 83 0
      .github/COMMIT_CONVENTION.md
  2. 3 5
      .github/CONTRIBUTING.md
  3. 1 0
      .gitignore
  4. 14 0
      build/git-hooks/commit-msg
  5. 6 0
      build/install-hooks.sh
  6. 10 1
      package.json
  7. 522 33
      yarn.lock

+ 83 - 0
.github/COMMIT_CONVENTION.md

@@ -0,0 +1,83 @@
+## Git Commit Message Convention
+
+> This is adapted from [Angular's commit convention](https://github.com/conventional-changelog/conventional-changelog/blob/master/packages/conventional-changelog-angular/convention.md).
+
+#### Examples
+
+Appears under "Features" header, pencil subheader:
+
+```
+feat(pencil): add 'graphiteWidth' option
+```
+
+Appears under "Bug Fixes" header, graphite subheader, with a link to issue #28:
+
+```
+fix(graphite): stop graphite breaking when width < 0.1
+
+close #28
+```
+
+Appears under "Performance Improvements" header, and under "Breaking Changes" with the breaking change explanation:
+
+```
+perf(pencil): remove graphiteWidth option
+
+BREAKING CHANGE: The graphiteWidth option has been removed. The default graphite width of 10mm is always used for performance reason.
+```
+
+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.
+
+```
+revert: feat(pencil): add 'graphiteWidth' option
+
+This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
+```
+
+### Full Message Format
+
+A commit message consists of a **header**, **body** and **footer**.  The header has a **type**, **scope** and **subject**:
+
+```
+<type>(<scope>): <subject>
+<BLANK LINE>
+<body>
+<BLANK LINE>
+<footer>
+```
+
+The **header** is mandatory and the **scope** of the header is optional.
+
+### Revert
+
+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.
+
+### Type
+
+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.
+
+Other prefixes are up to your discretion. Suggested prefixes are `docs`, `chore`, `style`, `refactor`, and `test` for non-changelog related tasks.
+
+### Scope
+
+The scope could be anything specifying place of the commit change. For example `core`, `compiler`, `ssr`, `v-model`, `transition` etc...
+
+### Subject
+
+The subject contains succinct description of the change:
+
+* use the imperative, present tense: "change" not "changed" nor "changes"
+* don't capitalize first letter
+* no dot (.) at the end
+
+### Body
+
+Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes".
+The body should include the motivation for the change and contrast this with previous behavior.
+
+### Footer
+
+The footer should contain any information about **Breaking Changes** and is also the place to
+reference GitHub issues that this commit **Closes**.
+
+**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.

+ 3 - 5
.github/CONTRIBUTING.md

@@ -43,13 +43,11 @@ After cloning the repo, run:
 $ npm install
 ```
 
-If you are on a Unix-like system, optionally install the Git pre-commit hook with:
+This would also run the `postinstall` script which will link git commit hooks if you are on a Unix-like system.
 
-``` bash
-$ npm run install:hooks
-```
+### Commiting Changes
 
-This will run ESLint on changed files before each commit.
+Commit messages should follow the [commit message convention](./COMMIT_CONVENTION.md) so that changelogs can be automatically generated. If git hooks have been properly linked, commit messages will be automatically validated upon commit. It is recommended to use `npm run commit` instead of `git commit`, which provides an interactive CLI for generating proper commit messages.
 
 ### Commonly used NPM scripts
 

+ 1 - 0
.gitignore

@@ -9,3 +9,4 @@ dist/vue.common.min.js
 test/e2e/reports
 test/e2e/screenshots
 coverage
+RELEASE_NOTE.md

+ 14 - 0
build/git-hooks/commit-msg

@@ -0,0 +1,14 @@
+#!/usr/bin/env bash
+
+# Validate commit log
+commit_regex='^Merge.+|(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(.+\))?: .{1,50}'
+
+if ! grep -iqE "$commit_regex" "$1"; then
+    echo
+    echo "  Error: proper commit message format is required for automated changelog generation."
+    echo
+    echo "  - Use \`npm run commit\` to interactively generate a commit message."
+    echo "  - See .github/COMMIT_CONVENTION.md for more details."
+    echo
+    exit 1
+fi

+ 6 - 0
build/install-hooks.sh

@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+
+if test -e .git/hooks; then
+  ln -sf ../../build/git-hooks/pre-commit .git/hooks/pre-commit && chmod +x .git/hooks/pre-commit
+  ln -sf ../../build/git-hooks/commit-msg .git/hooks/commit-msg && chmod +x .git/hooks/commit-msg
+fi

+ 10 - 1
package.json

@@ -37,7 +37,8 @@
     "bench:ssr": "npm run build:ssr && node benchmarks/ssr/renderToString.js && node benchmarks/ssr/renderToStream.js",
     "release": "bash build/release.sh",
     "release:weex": "bash build/release-weex.sh",
-    "install:hooks": "ln -fs ../../build/git-hooks/pre-commit .git/hooks/pre-commit"
+    "postinstall": "bash build/install-hooks.sh",
+    "commit": "git-cz"
   },
   "repository": {
     "type": "git",
@@ -67,7 +68,10 @@
     "chalk": "^1.1.3",
     "chromedriver": "^2.30.1",
     "codecov.io": "^0.1.6",
+    "commitizen": "^2.9.6",
+    "conventional-changelog-cli": "^1.3.1",
     "cross-spawn": "^5.1.0",
+    "cz-conventional-changelog": "^2.0.0",
     "de-indent": "^1.0.2",
     "es6-promise": "^4.1.0",
     "eslint": "^3.0.0",
@@ -117,5 +121,10 @@
     "webpack": "^2.6.1",
     "weex-js-runtime": "^0.20.5",
     "weex-vdom-tester": "^0.2.0"
+  },
+  "config": {
+    "commitizen": {
+      "path": "./node_modules/cz-conventional-changelog"
+    }
   }
 }

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 522 - 33
yarn.lock


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio