git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 3/5] ci: separate whitespace check script

From
Justin Tobler <jltobler@gmail.com>
Date
May 3, 2024, 17:21 UTC
Message-ID
<20240503172110.181326-4-jltobler@gmail.com>
In-Reply-To
<20240503172110.181326-1-jltobler@gmail.com>

The `check-whitespace` CI job is only available as a GitHub action. To help enable this job with other CI providers, first separate the logic performing the whitespace check into its own script. In subsequent commits, this script is further generalized allowing its reuse.

Helped-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Justin Tobler <jltobler@gmail.com>
---
 .github/workflows/check-whitespace.yml | 68 ++---------------------
 ci/check-whitespace.sh                 | 74 ++++++++++++++++++++++++++
 2 files changed, 78 insertions(+), 64 deletions(-)
 create mode 100755 ci/check-whitespace.sh
diff --git a/.github/workflows/check-whitespace.yml b/.github/workflows/check-whitespace.yml
index a3a6913ecc..d0a78fc426 100644
--- a/.github/workflows/check-whitespace.yml
+++ b/.github/workflows/check-whitespace.yml
@@ -26,67 +26,7 @@ jobs:
     - name: git log --check
       id: check_out
       run: |
-        baseSha=${{github.event.pull_request.base.sha}}
-        problems=()
-        commit=
-        commitText=
-        commitTextmd=
-        goodParent=
-        while read dash sha etc
-        do
-          case "${dash}" in
-          "---") # Line contains commit information.
-            if test -z "${goodParent}"
-            then
-              # Assume the commit has no whitespace errors until detected otherwise.
-              goodParent=${sha}
-            fi
-            commit="${sha}"
-            commitText="${sha} ${etc}"
-            commitTextmd="[${sha}](https://github.com/${{ github.repository }}/commit/${sha}) ${etc}"
-            ;;
-          "")
-            ;;
-          *) # Line contains whitespace error information for current commit.
-            if test -n "${goodParent}"
-            then
-              problems+=("1) --- ${commitTextmd}")
-              echo ""
-              echo "--- ${commitText}"
-              goodParent=
-            fi
-            case "${dash}" in
-            *:[1-9]*:) # contains file and line number information
-              dashend=${dash#*:}
-              problems+=("[${dash}](https://github.com/${{ github.repository }}/blob/${commit}/${dash%%:*}#L${dashend%:}) ${sha} ${etc}")
-              ;;
-            *)
-              problems+=("\`${dash} ${sha} ${etc}\`")
-              ;;
-            esac
-            echo "${dash} ${sha} ${etc}"
-            ;;
-          esac
-        done <<< $(git log --check --pretty=format:"---% h% s" ${baseSha}..)
-
-        if test ${#problems[*]} -gt 0
-        then
-          if test -z "${goodParent}"
-          then
-            goodParent=${baseSha: 0:7}
-          fi
-          echo "🛑 Please review the Summary output for further information."
-          echo "### :x: A whitespace issue was found in one or more of the commits." >$GITHUB_STEP_SUMMARY
-          echo "" >>$GITHUB_STEP_SUMMARY
-          echo "Run these commands to correct the problem:" >>$GITHUB_STEP_SUMMARY
-          echo "1. \`git rebase --whitespace=fix ${goodParent}\`" >>$GITHUB_STEP_SUMMARY
-          echo "1. \`git push --force\`" >>$GITHUB_STEP_SUMMARY
-          echo " " >>$GITHUB_STEP_SUMMARY
-          echo "Errors:" >>$GITHUB_STEP_SUMMARY
-          for i in "${problems[@]}"
-          do
-            echo "${i}" >>$GITHUB_STEP_SUMMARY
-          done
-
-          exit 2
-        fi
+        ./ci/check-whitespace.sh \
+          "${{github.event.pull_request.base.sha}}" \
+          "$GITHUB_STEP_SUMMARY" \
+          "https://github.com/${{github.repository}}"
diff --git a/ci/check-whitespace.sh b/ci/check-whitespace.sh
new file mode 100755
index 0000000000..9cc496da40
--- /dev/null
+++ b/ci/check-whitespace.sh
@@ -0,0 +1,74 @@
+#!/usr/bin/env bash
+
+baseCommit=$1
+outputFile=$2
+url=$3
+
+problems=()
+commit=
+commitText=
+commitTextmd=
+goodParent=
+
+while read dash sha etc
+do
+	case "${dash}" in
+	"---") # Line contains commit information.
+		if test -z "${goodParent}"
+		then
+			# Assume the commit has no whitespace errors until detected otherwise.
+			goodParent=${sha}
+		fi
+
+		commit="${sha}"
+		commitText="${sha} ${etc}"
+		commitTextmd="[${sha}](${url}/commit/${sha}) ${etc}"
+		;;
+	"")
+		;;
+	*) # Line contains whitespace error information for current commit.
+		if test -n "${goodParent}"
+		then
+			problems+=("1) --- ${commitTextmd}")
+			echo ""
+			echo "--- ${commitText}"
+			goodParent=
+		fi
+
+		case "${dash}" in
+		*:[1-9]*:) # contains file and line number information
+			dashend=${dash#*:}
+			problems+=("[${dash}](${url}/blob/${commit}/${dash%%:*}#L${dashend%:}) ${sha} ${etc}")
+			;;
+		*)
+			problems+=("\`${dash} ${sha} ${etc}\`")
+			;;
+		esac
+		echo "${dash} ${sha} ${etc}"
+		;;
+	esac
+done <<< "$(git log --check --pretty=format:"---% h% s" "${baseCommit}"..)"
+
+if test ${#problems[*]} -gt 0
+then
+	if test -z "${goodParent}"
+	then
+		goodParent=${baseCommit: 0:7}
+	fi
+
+	echo "🛑 Please review the Summary output for further information."
+	echo "### :x: A whitespace issue was found in one or more of the commits." >"$outputFile"
+	echo "" >>"$outputFile"
+	echo "Run these commands to correct the problem:" >>"$outputFile"
+	echo "1. \`git rebase --whitespace=fix ${goodParent}\`" >>"$outputFile"
+	echo "1. \`git push --force\`" >>"$outputFile"
+	echo " " >>"$outputFile"
+	echo "Errors:" >>"$outputFile"
+
+	for i in "${problems[@]}"
+	do
+		echo "${i}" >>"$outputFile"
+	done
+
+	exit 2
+fi
-- 
2.45.0
Previous: Justin ToblerNext: Justin Tobler
Message 33 of 42 in “Add GitLab CI to check for whitespace errors”
  1. 0/2 Add GitLab CI to check for whitespace errorsJustin Tobler, Apr 30, 2024
  2. 1/2 ci: pre-collapse GitLab CI sectionsJustin Tobler, Apr 30, 2024
  3. 2/2 gitlab-ci: add whitespace error checkJustin Tobler, Apr 30, 2024
  4. James LiuApr 30, 2024
  5. Justin ToblerApr 30, 2024
  6. Patrick SteinhardtApr 30, 2024
  7. Patrick SteinhardtApr 30, 2024
  8. Taylor BlauApr 30, 2024
  9. Justin ToblerApr 30, 2024
  10. Patrick SteinhardtApr 30, 2024
  11. Justin ToblerApr 30, 2024
  12. Patrick SteinhardtApr 30, 2024
  13. Justin ToblerApr 30, 2024
  14. 0/5 Add GitLab CI to check for whitespace errorsJustin Tobler, May 2, 2024
  15. 1/5 ci: pre-collapse GitLab CI sectionsJustin Tobler, May 2, 2024
  16. 2/5 github-ci: fix link to whitespace errorJustin Tobler, May 2, 2024
  17. 3/5 ci: separate whitespace check scriptJustin Tobler, May 2, 2024
  18. Patrick SteinhardtMay 3, 2024
  19. Justin ToblerMay 3, 2024
  20. Junio C HamanoMay 3, 2024
  21. Patrick SteinhardtMay 3, 2024
  22. Chris TorekMay 4, 2024
  23. 4/5 ci: make the whitespace report optionalJustin Tobler, May 2, 2024
  24. Patrick SteinhardtMay 3, 2024
  25. Justin ToblerMay 3, 2024
  26. 5/5 gitlab-ci: add whitespace error checkJustin Tobler, May 2, 2024
  27. Patrick SteinhardtMay 3, 2024
  28. Junio C HamanoMay 2, 2024
  29. Justin ToblerMay 3, 2024
  30. 0/5 Add GitLab CI to check for whitespace errorsJustin Tobler, May 3, 2024
  31. 1/5 ci: pre-collapse GitLab CI sectionsJustin Tobler, May 3, 2024
  32. 2/5 github-ci: fix link to whitespace errorJustin Tobler, May 3, 2024
  33. 3/5 ci: separate whitespace check scriptJustin Tobler, May 3, 2024
  34. 4/5 ci: make the whitespace report optionalJustin Tobler, May 3, 2024
  35. 5/5 gitlab-ci: add whitespace error checkJustin Tobler, May 3, 2024
  36. Patrick SteinhardtMay 6, 2024
  37. Justin ToblerMay 6, 2024
  38. Junio C HamanoMay 6, 2024
  39. Justin ToblerMay 6, 2024
  40. Patrick SteinhardtMay 7, 2024
  41. Justin ToblerMay 7, 2024
  42. Patrick SteinhardtMay 7, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.