| 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 |