CI: Properly run gitlint in CI 62/68162/3
authorAndrew Grimberg <agrimberg@linuxfoundation.org>
Mon, 28 Jun 2021 17:32:58 +0000 (10:32 -0700)
committerAndrew Grimberg <agrimberg@linuxfoundation.org>
Tue, 29 Jun 2021 18:02:29 +0000 (11:02 -0700)
When running pre-commit in a CI system the COMMIT_EDITMSG does not
(normally) get created as that is an artifact of editing the commit
message. If the file doesn't exist then gitlint will skip which makes it
possible for pre-commit checks that should fail, to pass.

Since we want tox to run in a consistent manner both locally and in CI
we need to play around a little with how we are checking the commit
message.

Change-Id: I25c1815ea3195e47a67b529a06497ad3594b2c84
Signed-off-by: Andrew Grimberg <agrimberg@linuxfoundation.org>
releasenotes/notes/convential_commit-a24e8a18c540c91f.yaml [new file with mode: 0644]
tox.ini

diff --git a/releasenotes/notes/convential_commit-a24e8a18c540c91f.yaml b/releasenotes/notes/convential_commit-a24e8a18c540c91f.yaml
new file mode 100644 (file)
index 0000000..c642e8b
--- /dev/null
@@ -0,0 +1,10 @@
+---
+other:
+  - |
+    Conventional Commit message subject lines are now enforced. This affects
+    CI. Additionally, if developers want to protect themselves from CI failing
+    on this please make sure of the following
+
+    * you have pre-commit installed
+    * that you have run
+      pre-commit install --hook-type commit-msg
diff --git a/tox.ini b/tox.ini
index 2525c1e..d833547 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -62,10 +62,30 @@ commands =
 [testenv:pre-commit]
 description = Precommit checks for black, gitlint, etc.
 basepython = python3
-deps = pre-commit
+allowlist_externals =
+    /bin/sh
+deps =
+    pre-commit
+passenv = HOME
 commands =
     pre-commit run --all-files --show-diff-on-failure
-    pre-commit run gitlint --hook-stage commit-msg --commit-msg-filename .git/COMMIT_EDITMSG
+    /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"
 
 [testenv:reno]
 description = OpenStack Reno checks