You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.8 KiB
91 lines
2.8 KiB
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@v3 |
|
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
|
|
|