|
|
|
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:
|
ci(check-whitespace): restrict to the intended commits
During a run of the `check-whitespace` we want to verify that the
commits introduced in the Pull Request have no whitespace issues. We
only want to look at those commits, not the upstream commits (because
the contributor cannot do anything about the latter).
However, by using the `-<count>` form in `git log --check`, we run the
risk of looking at the wrong commits. The reason is that the
`actions/checkout` step does _not_ check out the tip commit of the Pull
Request's branch: Instead, it checks out a merge commit that merges that
branch into the target branch. For that reason, we already adjust the
commit count by incrementing it, but that is not enough: if the upstream
branch has newer commits, they are traversed _first_. And obviously we
will then miss some of the commits that we _actually_ wanted to look at.
Therefore, let's be careful to stop assuming a linear, up to date commit
topology in the contributed commits, and instead specify the correct
commit range.
Unfortunately, this means that we no longer can rely on a shallow clone:
There is no way of knowing just how many commits the upstream branch
advanced after the commit from which the PR branch branched off. So
let's just go with a full clone instead, and be safe rather than sorry
(if we have "too shallow" a situation, a commit range `@{u}..` may very
well include a shallow commit itself, and the output of `git show
--check <shallow>` is _not_ pretty).
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
3 years ago
|
|
|
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
|