From 5f3f4263b4740dba726f155c21c7606235847b28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dundar=20G=C3=B6c?= Date: Mon, 19 Jul 2021 00:26:17 +0200 Subject: [PATCH 1/2] ci: add commit linter to GitHub Actions --- .github/workflows/commitlint.config.js | 35 ++++++++++++++++++++ .github/workflows/commitlint.config_patch.js | 28 ++++++++++++++++ .github/workflows/commitlint.yml | 18 ++++++++++ 3 files changed, 81 insertions(+) create mode 100644 .github/workflows/commitlint.config.js create mode 100644 .github/workflows/commitlint.config_patch.js create mode 100644 .github/workflows/commitlint.yml diff --git a/.github/workflows/commitlint.config.js b/.github/workflows/commitlint.config.js new file mode 100644 index 0000000000..5f10ffc6f4 --- /dev/null +++ b/.github/workflows/commitlint.config.js @@ -0,0 +1,35 @@ +module.exports = { + rules: { + 'body-leading-blank': [1, 'always'], + 'body-max-line-length': [2, 'always', 100], + 'footer-leading-blank': [1, 'always'], + 'footer-max-line-length': [2, 'always', 100], + 'header-max-length': [2, 'always', 100], + 'scope-case': [2, 'always', 'lower-case'], + 'subject-case': [ + 2, + 'never', + ['sentence-case', 'start-case', 'pascal-case', 'upper-case'], + ], + 'subject-empty': [2, 'never'], + 'subject-full-stop': [2, 'never', '.'], + 'type-case': [2, 'always', 'lower-case'], + 'type-empty': [2, 'never'], + 'type-enum': [ + 2, + 'always', + [ + 'build', + 'chore', + 'ci', + 'docs', + 'feat', + 'fix', + 'perf', + 'refactor', + 'revert', + 'test', + ], + ], + }, +}; diff --git a/.github/workflows/commitlint.config_patch.js b/.github/workflows/commitlint.config_patch.js new file mode 100644 index 0000000000..986d80b2e0 --- /dev/null +++ b/.github/workflows/commitlint.config_patch.js @@ -0,0 +1,28 @@ +module.exports = { + parserPreset: { + parserOpts: { headerPattern: /^([^\(\):]*)(?:\((.*)\))?!?:(.*)$/ } + }, + rules: { + 'body-leading-blank': [1, 'always'], + 'body-max-line-length': [2, 'always', 100], + 'footer-leading-blank': [1, 'always'], + 'footer-max-line-length': [2, 'always', 100], + 'scope-case': [2, 'always', 'lower-case'], + 'subject-case': [ + 2, + 'never', + ['sentence-case', 'start-case', 'pascal-case', 'upper-case'], + ], + 'subject-empty': [2, 'never'], + 'subject-full-stop': [2, 'never', '.'], + 'type-case': [2, 'always', 'lower-case'], + 'type-empty': [2, 'never'], + 'type-enum': [ + 2, + 'always', + [ + 'vim-patch', + ], + ], + }, +}; diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml new file mode 100644 index 0000000000..9ae138fbd7 --- /dev/null +++ b/.github/workflows/commitlint.yml @@ -0,0 +1,18 @@ +name: "Commit Linter" +on: pull_request +jobs: + lint-commits: + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v2.3.1 + with: + fetch-depth: 0 + - run: npm install --save-dev @commitlint/cli + - run: | + if [[ "$(gh pr view ${{ github.event.pull_request.number }} --json commits --jq '.[][0].messageHeadline')" == vim-patch* ]];then + npx commitlint --from HEAD~1 --to HEAD --verbose --help-url https://github.com/neovim/neovim/blob/master/CONTRIBUTING.md#commit-messages --config .github/workflows/commitlint.config_patch.js + else + npx commitlint --from HEAD~1 --to HEAD --verbose --help-url https://github.com/neovim/neovim/blob/master/CONTRIBUTING.md#commit-messages --config .github/workflows/commitlint.config.js + fi From f54340d488d956cbf641be3d896b5276842d558f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dundar=20G=C3=B6c?= Date: Mon, 26 Jul 2021 12:23:49 +0200 Subject: [PATCH 2/2] docs: add description of each type --- CONTRIBUTING.md | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2a2deaeaa5..bce0d23da4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -86,15 +86,35 @@ the VCS/git logs more valuable. The general structure of a commit message is as [optional footer(s)] ``` -- **Prefix the commit subject with a _type_:** `doc:`, `test:` - `runtime:`, ... - - Subject line for commits with only style/lint changes can be a single - word: `style` or `lint`. -- **Add the optional scope following if possible:** `(lsp)`, `(treesitter)`, `(multigrid)`, ... +- Prefix the commit subject with one of the following _types_: + - `build`: all changes related to the build system (involving scripts, configurations or tools) and package dependencies. + - `ci`: all changes related to the continuous integration and deployment system - involving scripts, configurations or tools. + - `docs`: all documentation changes. This includes both external documentation intended for end users as well as internal documentation intended for developers. + - `feat`: new abilities or functionality. + - `fix`: a bug fix. + - `perf`: performance improvements. + - `refactor`: modification of the code base which neither adds a feature nor fixes a bug - such as removing redundant code, simplifying the code, renaming variables, etc. + - `revert`: revert previous commits. + - `test`: all changes related to tests such as refactoring existing tests or adding new tests. + - `vim-patch`: all patches from upstream Vim. The commit messages for patches has [slightly different rules](https://github.com/neovim/neovim/wiki/Merging-patches-from-upstream-Vim#pull-requests) as not to interfere with existing scripts. + - `chore`: Lastly, if none of the types above fits you may use `chore` as the type. + +- Append optional scope to _type_ if possible: `(lsp)`, `(treesitter)` or `(float/windows)`. + - Try to keep the first line under 72 characters. + - A blank line must separate the subject from the description. -- Breaking changes must be indicated at the very beginning of the footer or body section of a commit. A breaking change must consist of the uppercase text BREAKING CHANGE, followed by a colon, a space, and a description of what has changed about the API. -- Check your commit message for spelling and grammatical mistakes. + +- A breaking API change must be indicated by appending `!` after the type/scope and at the very beginning of the footer with a **BREAKING CHANGE**. + + Example: + + ``` + refactor(provider)!: drop support for Python 2 + + BREAKING CHANGE: refactor to use Python 3 features since Python 2 is no longer supported. + ``` + - Use the _imperative voice_: "Fix bug" rather than "Fixed bug" or "Fixes bug." ### Automated builds (CI)