summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/commitlint.config.js34
-rw-r--r--.github/workflows/commitlint.yml15
-rw-r--r--.pre-commit-config.yaml6
-rw-r--r--CONTRIBUTING.md72
-rw-r--r--utils/ci/run_commitlint.sh10
5 files changed, 123 insertions, 14 deletions
diff --git a/.github/workflows/commitlint.config.js b/.github/workflows/commitlint.config.js
new file mode 100644
index 00000000..2bc8d493
--- /dev/null
+++ b/.github/workflows/commitlint.config.js
@@ -0,0 +1,34 @@
+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", 72],
+ "scope-case": [2, "always", "lower-case"],
+ "subject-case": [
+ 2,
+ "never",
+ ["upper-case", "pascal-case", "sentence-case", "start-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",
+ "ci",
+ "docs",
+ "feat",
+ "fix",
+ "perf",
+ "refactor",
+ "revert",
+ "test",
+ ],
+ ],
+ },
+};
diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml
new file mode 100644
index 00000000..93c776e3
--- /dev/null
+++ b/.github/workflows/commitlint.yml
@@ -0,0 +1,15 @@
+name: "Commit Linter"
+on: pull_request
+jobs:
+ lint-commits:
+ runs-on: ubuntu-latest
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ steps:
+ - uses: actions/[email protected]
+ with:
+ fetch-depth: 0
+ - uses: wagoid/commitlint-github-action@v4
+ with:
+ configFile: .github/workflows/commitlint.config.js
+ helpURL: https://github.com/LunarVim/LunarVim/blob/rolling/CONTRIBUTING.md#commit-messages
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 38ce72dc..2c4921ec 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -26,3 +26,9 @@ repos:
entry: luacheck
types: [lua]
args: [.]
+ - id: commitlint
+ name: commitlint
+ language: system
+ entry: bash
+ args: [./utils/ci/run_commitlint.sh]
+ stages: [commit-msg]
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index fcc415f7..e2a5473b 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -15,6 +15,8 @@ One of the best ways to begin contributing in a meaningful way is by helping fin
3. Link your fork with the repository `git remote add upstream https://github.com/lunarvim/LunarVim.git`
4. That's it ! You can now `git fetch upstream` and `git rebase [-i] upstream/rolling` to update your branches with the latest contributions.
+<br />
+
## Setting up development tools
### For editing Lua files
@@ -31,21 +33,9 @@ One of the best ways to begin contributing in a meaningful way is by helping fin
Install [pre-commit](https://github.com/pre-commit/pre-commit) which will run all linters and formatters for you as a pre-commit-hook.
-## Some Guidelines
-
-### Git Commit Messages
-
-* Use the present tense ("Add feature" not "Added feature")
-* Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
-* Limit the first line to 72 characters or less
-* Reference issues and pull requests liberally after the first line
+<br />
-### Git Branch Naming
-
-* Name your branches meaningfully,
-ex: (feature|bugfix|hotfix)/what-my-pr-does
-
-### Code
+## Code Conventions
All lua code is formatted with [Stylua](https://github.com/JohnnyMorganz/StyLua).
* Use snake_case
@@ -60,6 +50,60 @@ All shell code is formatted according to [Google Shell Style Guide](https://goog
shfmt -i 2 -ci -l -d .
```
+<br />
+
+## Pull Requests (PRs)
+
+To avoid duplicate work, create a draft pull request.
+
+### Commit Messages
+* Commit header is limited to 72 characters.
+* Commit body and footer is limited to 100 characters per line.
+
+**Commit header format:**
+```
+<type>(<scope>?): <summary>
+ │ │ │
+ │ │ └─> Present tense. 'add something...'(O) vs 'added something...'(X)
+ │ │ Imperative mood. 'move cursor to...'(O) vs 'moves cursor to...'(X)
+ │ │ Not capitalized.
+ │ │ No period at the end.
+ │ │
+ │ └─> Commit Scope is optional, but strongly recommended.
+ │ Use lower case.
+ │ 'plugin', 'file', or 'directory' name is suggested, but not limited.
+ │
+ └─> Commit Type: build|ci|docs|feat|fix|perf|refactor|test
+```
+
+##### Commit Type Guideline
+
+* **build**: changes that affect the build system or external dependencies (example scopes: npm, pip, rg)
+* **ci**: changes to CI configuration files and scripts (example scopes: format, lint, issue_templates)
+* **docs**: changes to the documentation only
+* **feat**: a new feature for the user
+* **fix**: a bug fix
+* **perf**: a performance improvement
+* **refactor**: a code change that neither fixes a bug nor adds a feature
+* **test**: Adding missing tests or correcting existing tests
+
+**Real world examples:**
+```
+feat(quickfix): add 'q' binding to quit quickfix window when focused
+```
+```
+fix(installer): add missing "HOME" variable
+```
+
+
+### Branch Naming
+
+Name your branches meaningfully.
+
+ex)
+```(feature|bugfix|hotfix)/what-my-pr-does```
+
+<br />
## Communication
diff --git a/utils/ci/run_commitlint.sh b/utils/ci/run_commitlint.sh
new file mode 100644
index 00000000..b752956d
--- /dev/null
+++ b/utils/ci/run_commitlint.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env bash
+set -eo pipefail
+
+REPO_DIR="$(git rev-parse --show-toplevel)"
+HELP_URL="https://github.com/LunarVim/LunarVim/blob/rolling/CONTRIBUTING.md#commit-messages"
+CONFIG="$REPO_DIR/.github/workflows/commitlint.config.js"
+
+if ! npx commitlint --edit --verbose --help-url "$HELP_URL" --config "$CONFIG"; then
+ exit 1
+fi