From 292e2c33886b8be563dbc7ae2c1765c6422b634f Mon Sep 17 00:00:00 2001 From: Anil Belur Date: Thu, 11 May 2023 21:33:20 +1000 Subject: [PATCH] Refactor: Add pre-commit config and update tox Signed-off-by: Anil Belur Change-Id: Id21a2886d92a0429de04f8e4321e19319c4d4f0d --- .coafile | 34 ----------------- .gitlint | 97 +++++++++++++++++++++++++++++++++++++++++++++++++ .pre-commit-config.yaml | 32 ++++++++++++++++ .yamllint | 11 ++++++ .yamllint.conf | 7 ---- tox.ini | 54 ++++++++++++++++++++++----- 6 files changed, 185 insertions(+), 50 deletions(-) delete mode 100644 .coafile create mode 100644 .gitlint create mode 100644 .pre-commit-config.yaml create mode 100644 .yamllint delete mode 100644 .yamllint.conf diff --git a/.coafile b/.coafile deleted file mode 100644 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 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 index 0000000..ca94141 --- /dev/null +++ b/.pre-commit-config.yaml @@ -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 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 index b821cb8..0000000 --- a/.yamllint.conf +++ /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 --- 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" -- 2.16.6