ci: separate whitespace check script

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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Justin Tobler
2024-05-03 12:21:05 -05:00
committed by Junio C Hamano
parent ecaacbc7a2
commit 66820fb7bf
2 changed files with 78 additions and 64 deletions

View File

@@ -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}}"

74
ci/check-whitespace.sh Executable file
View File

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