From f87174a511385523b0d081a22598800b2bb03548 Mon Sep 17 00:00:00 2001 From: Jason Naylor Date: Tue, 26 Mar 2024 15:05:04 -0700 Subject: [PATCH] Add CI check for whitespace * Modelled after the git project whitespace checker * Adds annotations for any whitespace issues discovered Change-Id: I7cb38bcb9b632ef73b483207f1ecc7619db653b8 --- .github/workflows/check-whitespace.yml | 64 ++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 .github/workflows/check-whitespace.yml diff --git a/.github/workflows/check-whitespace.yml b/.github/workflows/check-whitespace.yml new file mode 100644 index 0000000000..b02a8393d9 --- /dev/null +++ b/.github/workflows/check-whitespace.yml @@ -0,0 +1,64 @@ +name: check-whitespace + +on: + pull_request: + types: [opened, synchronize] + +# Avoid unnecessary builds +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + check-whitespace: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: git log --check + id: check_out + run: | + echo "Starting the script." + baseSha=${{ github.event.pull_request.base.sha }} + git log --check --pretty=format:"---% h% s" ${baseSha}.. | tee check-results.log + problems=() + commit= + commitText= + commitTextmd= + # Use git log --check to look for whitespace errors in each commit of this PR + log_output=$(cat check-results.log) + echo "${log_output}" + # Use a for loop to iterate over lines of log_output + IFS=$'\n' + for line in $log_output; do + echo "Line: ${line}" + case "${line}" in + "--- "*) + IFS=' ' read -r _ commit commitText <<< "$line" + commitTextmd="[${commit}](https://github.com/${{ github.repository }}/commit/${commit}) ${commitText}" + ;; + "") + ;; + *:[1-9]*:*) # contains file and line number information - This indicates that a whitespace error was found + file="${line%%:*}" + afterFile="${line#*:}" # Remove the first colon and everything before it + lineNumber="${afterFile%%:*}" # Remove anything after and including the first remaining colon to get only the line number + problems+=("[${commitTextmd}]") + problems+=("[${line}](https://github.com/${{ github.repository }}/blob/${{github.event.pull_request.head.ref}}/${file}#L${lineNumber})") + problems+="" + ;; + esac + done + if test ${#problems[*]} -gt 0; then + echo "⚠️ Please review the Summary output for further information." >> $GITHUB_STEP_SUMMARY + echo "### A whitespace issue was found in one or more of the commits." >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "Errors:" >> $GITHUB_STEP_SUMMARY + for i in "${problems[@]}"; do + echo "${i}" >> $GITHUB_STEP_SUMMARY + done + exit 1 + fi + echo "No problems found"