Refactor: Add pre-commit config and update tox 94/5094/1
authorAnil Belur <abelur@linuxfoundation.org>
Thu, 11 May 2023 11:33:20 +0000 (21:33 +1000)
committerAnil Belur <abelur@linuxfoundation.org>
Thu, 11 May 2023 11:37:53 +0000 (21:37 +1000)
Signed-off-by: Anil Belur <abelur@linuxfoundation.org>
Change-Id: Id21a2886d92a0429de04f8e4321e19319c4d4f0d

.coafile [deleted file]
.gitlint [new file with mode: 0644]
.pre-commit-config.yaml [new file with mode: 0644]
.yamllint [new file with mode: 0644]
.yamllint.conf [deleted file]
tox.ini

diff --git a/.coafile b/.coafile
deleted file mode 100644 (file)
index f0abad4..0000000
--- a/.coafile
+++ /dev/null
@@ -1,34 +0,0 @@
-[Documentation]
-bears = WriteGoodLintBear
-files = *.md
-allow_so_beginning = False
-allow_there_is = False
-allow_cliche_phrases = False
-
-[GitCommit]
-bears = GitCommitBear
-ignore_length_regex = Signed-off-by,
-    Also-by,
-    Co-authored-by,
-    http://,
-    https://
-
-[JSON]
-bears = JSONFormatBear
-files = packer/**.json
-indent_size = 2
-
-[ShellCheck]
-bears = ShellCheckBear,
-    SpaceConsistencyBear
-files = jjb/**.sh,
-    packer/**.sh
-shell = bash
-indent_size = 4
-use_spaces = yeah
-
-[YAML]
-bears = YAMLLintBear
-files = jjb/**/*.yaml
-document_start = True
-yamllint_config = .yamllint.conf
diff --git a/.gitlint b/.gitlint
new file mode 100644 (file)
index 0000000..8d37da1
--- /dev/null
+++ b/.gitlint
@@ -0,0 +1,97 @@
+# All these sections are optional, edit this file as you like.
+[general]
+# Ignore certain rules, you can reference them by their id or by their full
+# name
+# ignore=title-trailing-punctuation, T3
+
+# verbosity should be a value between 1 and 3, the command line -v flags take
+# precedence over this
+# verbosity = 2
+
+# By default gitlint will ignore merge commits. Set to 'false' to disable.
+# ignore-merge-commits=true
+
+# By default gitlint will ignore fixup commits. Set to 'false' to disable.
+# ignore-fixup-commits=true
+
+# By default gitlint will ignore squash commits. Set to 'false' to disable.
+# ignore-squash-commits=true
+
+# Enable debug mode (prints more output). Disabled by default.
+# debug=true
+
+# Set the extra-path where gitlint will search for user defined rules
+# See http://jorisroovers.github.io/gitlint/user_defined_rules for details
+# extra-path=examples/
+
+# contrib=contrib-title-conventional-commits,contrib-body-requires-signed-off-by
+contrib=contrib-body-requires-signed-off-by
+
+# [title-max-length]
+# line-length=80
+
+# [title-must-not-contain-word]
+# Comma-separated list of words that should not occur in the title. Matching is
+# case insensitive. It's fine if the keyword occurs as part of a larger word
+# (so "WIPING" will not cause a violation, but "WIP: my title" will.
+# words=wip
+
+# [title-match-regex]
+# python like regex (https://docs.python.org/2/library/re.html) that the
+# commit-msg title must be matched to.
+# Note that the regex can contradict with other rules if not used correctly
+# (e.g. title-must-not-contain-word).
+# regex=^US[0-9]*
+
+# [B1]
+# B1 = body-max-line-length
+# line-length=120
+
+# [body-min-length]
+# min-length=5
+
+# [body-is-missing]
+# Whether to ignore this rule on merge commits (which typically only have a title)
+# default = True
+# ignore-merge-commits=false
+
+# [body-changed-file-mention]
+# List of files that need to be explicitly mentioned in the body when they are
+# changed This is useful for when developers often erroneously edit certain
+# files or git submodules.  By specifying this rule, developers can only change
+# the file when they explicitly reference it in the commit message.
+# files=gitlint/rules.py,README.md
+
+# [author-valid-email]
+# python like regex (https://docs.python.org/2/library/re.html) that the
+# commit author email address should be matched to
+# For example, use the following regex if you only want to allow email
+# addresses from foo.com
+# regex=[^@]+@foo.com
+
+# [ignore-by-title]
+# Ignore certain rules for commits of which the title matches a regex
+# E.g. Match commit titles that start with "Release"
+# regex=^Release(.*)
+#
+# Ignore certain rules, you can reference them by their id or by their full name
+# Use 'all' to ignore all rules
+# ignore=T1,body-min-length
+
+# [ignore-by-body]
+# Ignore certain rules for commits of which the body has a line that matches a
+# regex
+# E.g. Match bodies that have a line that contain "release"
+# regex=(.*)release(.*)
+#
+# Ignore certain rules, you can reference them by their id or by their full name
+# Use 'all' to ignore all rules
+# ignore=T1,body-min-length
+
+# Enable Conventional Commit subject line enforcement
+# https://www.conventionalcommits.org/en/v1.0.0/
+#
+# Since we want all subjects to be well formed, enforce the topics
+# to the following (fairly standard) topics and require them to be Mixed Case
+# [contrib-title-conventional-commits]
+# types=Fix,Feat,Chore,Docs,Style,Refactor,Perf,Test,Revert,CI,Build
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644 (file)
index 0000000..ca94141
--- /dev/null
@@ -0,0 +1,32 @@
+---
+repos:
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v4.4.0
+    hooks:
+      - id: trailing-whitespace
+      - id: check-executables-have-shebangs
+        stages: [manual]
+      - id: check-json
+        exclude: (.vscode|.devcontainer)
+      - id: no-commit-to-branch
+        args:
+          - --branch=dev
+          - --branch=master
+          - --branch=main
+          - --branch=rc
+
+  - repo: https://github.com/jorisroovers/gitlint
+    rev: v0.19.1
+    hooks:
+      - id: gitlint
+
+  - repo: https://github.com/adrienverge/yamllint.git
+    rev: v1.31.0
+    hooks:
+      - id: yamllint
+
+  - repo: https://github.com/pre-commit/mirrors-prettier
+    rev: v3.0.0-alpha.9-for-vscode
+    hooks:
+      - id: prettier
+        stages: [commit]
diff --git a/.yamllint b/.yamllint
new file mode 100644 (file)
index 0000000..d4497f8
--- /dev/null
+++ b/.yamllint
@@ -0,0 +1,11 @@
+---
+extends: default
+
+rules:
+  empty-lines:
+    max-end: 1
+  line-length:
+    max: 120
+  comments:
+    # prettier forces 1 space comment separator
+    min-spaces-from-content: 1
diff --git a/.yamllint.conf b/.yamllint.conf
deleted file mode 100644 (file)
index b821cb8..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-extends: default
-
-rules:
-  empty-lines:
-    max-end: 1
-  line-length:
-    max: 120
diff --git a/tox.ini b/tox.ini
index e33d587..5dad540 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -1,16 +1,52 @@
 [tox]
 minversion = 1.6
-envlist = coala
+envlist = pre-commit
 skipsdist = true
 
-[testenv:coala]
+[testenv:jenkins-jobs]
+deps =
+    jenkins-job-builder=={env:JJB_VERSION:5.0.2}
+commands =
+    jenkins-jobs {posargs:--help}
+
+
+[testenv:pre-commit-install]
 basepython = python3
+deps = pre-commit
+commands =
+    pre-commit install
+    pre-commit install --hook-type commit-msg
+
+[testenv:pre-commit-uninstall]
+basepython = python3
+deps = pre-commit
+commands =
+    pre-commit uninstall
+    pre-commit uninstall --hook-type commit-msg
+
+[testenv:pre-commit]
+description = Precommit checks for black, gitlint, etc.
+allowlist_externals =
+    /bin/sh
 deps =
-    coala==0.11
-    coala-bears==0.11
-    nodeenv~=1.3.0
+    pre-commit
+passenv = HOME
 commands =
-    nodeenv -p
-    npm install --global write-good
-    python3 -m nltk.downloader punkt maxent_treebank_pos_tagger averaged_perceptron_tagger
-    coala --non-interactive
+    pre-commit run --all-files --show-diff-on-failure
+    /bin/sh -c 'if ! git config --get user.name > /dev/null; then \
+        git config --global --add user.name "CI"; \
+        touch .git/REMOVE_USERNAME; fi'
+    /bin/sh -c 'if ! git config --get user.email > /dev/null; then \
+        git config --global --add user.email "ci@example.org"; \
+        touch .git/REMOVE_USEREMAIL; fi'
+    /bin/sh -c "if [ -f .git/COMMIT_EDITMSG ]; then \
+        cp .git/COMMIT_EDITMSG .git/COMMIT_MSGTOX; else \
+        git log HEAD -n1 --pretty=%B > .git/COMMIT_MSGTOX; fi"
+    pre-commit run gitlint --hook-stage commit-msg --commit-msg-filename .git/COMMIT_MSGTOX
+    /bin/sh -c "rm -f .git/COMMIT_MSGTOX"
+    /bin/sh -c "if [ -f .git/REMOVE_USERNAME ]; then \
+        git config --global --unset user.name; \
+        rm -f .git/REMOVE_USERNAME; fi"
+    /bin/sh -c "if [ -f .git/REMOVE_USEREMAIL ]; then \
+        git config --global --unset user.email; \
+        rm -f .git/REMOVE_USEREMAIL; fi"