eb5b03a9c0
Whenever a branch is pushed to a repository which has GitHub Actions enabled, a bunch of new workflow runs are started. We sometimes see contributors push multiple branch updates in rapid succession, which in conjunction with the impressive time swallowed by even just a single CI build frequently leads to many queued-up runs. This is particularly problematic in the case of Pull Requests where a single contributor can easily (inadvertently) prevent timely builds for other contributors when using a shared repository. To help with this situation, let's use the `concurrency` feature of GitHub workflows, essentially canceling GitHub workflow runs that are obsoleted by more recent runs: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#concurrency For workflows that *do* want the behavior in the pre-image of this patch, they can use the ci-config feature to disable the new behavior by adding an executable script on the ci-config branch called 'skip-concurrent' which terminates with a non-zero exit code. Original-patch-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Signed-off-by: Taylor Blau <me@ttaylorr.com>
57 lines
1.3 KiB
YAML
57 lines
1.3 KiB
YAML
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@v2
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: git log --check
|
|
id: check_out
|
|
run: |
|
|
log=
|
|
commit=
|
|
while read dash etc
|
|
do
|
|
case "${dash}" in
|
|
"---")
|
|
commit="${etc}"
|
|
;;
|
|
"")
|
|
;;
|
|
*)
|
|
if test -n "${commit}"
|
|
then
|
|
log="${log}\n${commit}"
|
|
echo ""
|
|
echo "--- ${commit}"
|
|
fi
|
|
commit=
|
|
log="${log}\n${dash} ${etc}"
|
|
echo "${dash} ${etc}"
|
|
;;
|
|
esac
|
|
done <<< $(git log --check --pretty=format:"---% h% s" ${{github.event.pull_request.base.sha}}..)
|
|
|
|
if test -n "${log}"
|
|
then
|
|
exit 2
|
|
fi
|