mirror of
https://github.com/containers/podman.git
synced 2026-07-08 22:35:01 -04:00
When the validate-source job is re-run manually after adding a label, it uses stale labels (from the "pull_request" event that originally triggered it), and so the steps that check labels don't see new labels. Fix by querying the labels live (similar to how it was done before commits6e597af6dcand1da154117c). Note the logic differs slightly between hack/ci/make-and-check-size.sh and hack/ci/pr-should-include-tests. This is because pr-should-include-tests is also executed locally as well as on non-PRs, while make-and-check-size is run strictly in CI for PRs only. Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
90 lines
3.3 KiB
Bash
Executable File
90 lines
3.3 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
|