mirror of
https://github.com/containers/podman.git
synced 2026-07-08 22:35:01 -04:00
90 lines
2.8 KiB
Bash
Executable File
90 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Intended for use in CI: check git commits, barf if no tests added.
|
|
#
|
|
ME=$(basename $0)
|
|
|
|
# Github label which allows overriding this check
|
|
OVERRIDE_LABEL="No New Tests"
|
|
|
|
# PR head commit; defaults to HEAD when not running in CI.
|
|
head=${PR_HEAD:-HEAD}
|
|
# Base of this PR.
|
|
base=$(git merge-base ${DEST_BRANCH:-main} $head)
|
|
|
|
# This gives us a list of files touched in all commits, e.g.
|
|
# A foo.c
|
|
# M bar.c
|
|
# We look for Added or Modified (not Deleted!) files under 'test'.
|
|
# --no-renames ensures that renamed tests (#9420) show up as 'A'dded.
|
|
if git diff --name-status --no-renames $base $head | grep -E -q '^[AM]\s+(test/|.*_test\.go)'; then
|
|
exit 0
|
|
fi
|
|
|
|
# Nothing changed under test subdirectory.
|
|
#
|
|
# This is OK if the only files being touched are "safe" ones.
|
|
filtered_changes=$(git diff --name-only $base $head |
|
|
grep -F -vx .cirrus.yml |
|
|
grep -F -vx .pre-commit-config.yaml |
|
|
grep -F -vx .gitignore |
|
|
grep -F -vx go.mod |
|
|
grep -F -vx go.sum |
|
|
grep -F -vx podman.spec.rpkg |
|
|
grep -F -vx .golangci.yml |
|
|
grep -F -vx winmake.ps1 |
|
|
grep -E -v '/*Makefile$' |
|
|
grep -E -v '^[^/]+\.md$' |
|
|
grep -E -v '^.github' |
|
|
grep -E -v '^contrib/' |
|
|
grep -E -v '^docs/' |
|
|
grep -E -v '^hack/' |
|
|
grep -E -v '^nix/' |
|
|
grep -E -v '^vendor/' |
|
|
grep -E -v '^version/')
|
|
if [[ -z "$filtered_changes" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
# This PR touches non-test files but adds no tests. Only allow it if the
|
|
# '$OVERRIDE_LABEL' github label is set.
|
|
if [[ -n "$PR_NUMBER" ]]; then
|
|
for var in GITHUB_TOKEN GITHUB_REPOSITORY; do
|
|
if [[ -z "${!var}" ]]; then
|
|
echo "$ME: cannot query github: \$$var is undefined" >&2
|
|
return 1
|
|
fi
|
|
done
|
|
|
|
labels=$(curl --fail -s \
|
|
-H "Authorization: bearer $GITHUB_TOKEN" \
|
|
-H "Accept: application/vnd.github+json" \
|
|
"https://api.github.com/repos/${GITHUB_REPOSITORY}/pulls/$PR_NUMBER" |
|
|
jq -r '.labels[].name')
|
|
|
|
if grep -F -x -q "$OVERRIDE_LABEL" <<< "$labels"; then
|
|
echo "$ME: \"$OVERRIDE_LABEL\" label found, ignoring test requirements"
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# This PR touches non-test files but adds no tests, and
|
|
# the '$OVERRIDE_LABEL' is not set. Fail loudly.
|
|
cat << EOF
|
|
$ME: PR does not include changes in the 'tests' directory
|
|
|
|
Please write a regression test for what you're fixing. Even if it
|
|
seems trivial or obvious, try to add a test that will prevent
|
|
regressions.
|
|
|
|
If your change is minor, feel free to piggyback on already-written
|
|
tests, possibly just adding a small step to a similar existing test.
|
|
Every second counts in CI.
|
|
|
|
If your commit really, truly does not need tests, you can proceed
|
|
by asking a repo maintainer to set the '$OVERRIDE_LABEL' github label.
|
|
This will only be done when there's no reasonable alternative.
|
|
EOF
|
|
|
|
exit 1
|