name: check-whitespace # Get the repository with all commits to ensure that we can analyze # all of the commits contributed via the Pull Request. # Process `git log --check` output to extract just the check errors. # Exit with failure upon white-space issues. on: pull_request: types: [opened, synchronize] # Avoid unnecessary builds. Unlike the main CI jobs, these are not # ci-configurable (but could be). 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: | baseSha=${{github.event.pull_request.base.sha}} problems=() commit= commitText= commitTextmd= goodparent= while read dash sha etc do case "${dash}" in "---") if test -z "${commit}" then goodparent=${sha} fi commit="${sha}" commitText="${sha} ${etc}" commitTextmd="[${sha}](https://github.com/${{ github.repository }}/commit/${sha}) ${etc}" ;; "") ;; *) if test -n "${commit}" then problems+=("1) --- ${commitTextmd}") echo "" echo "--- ${commitText}" commit= fi case "${dash}" in *:[1-9]*:) # contains file and line number information dashend=${dash#*:} problems+=("[${dash}](https://github.com/${{ github.repository }}/blob/${{github.event.pull_request.head.ref}}/${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 "${commit}" 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