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:
committed by
Junio C Hamano
parent
ecaacbc7a2
commit
66820fb7bf
68
.github/workflows/check-whitespace.yml
vendored
68
.github/workflows/check-whitespace.yml
vendored
@@ -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
74
ci/check-whitespace.sh
Executable 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
|
||||
Reference in New Issue
Block a user