mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-08-27 18:57:53 +00:00
By default something like a 404 will not make curl exit with an error code. This is problematic for obvious reasons and instead of the file you want you may now have some 404 html text instead. I noticed this in #28003 which well just build fine installers except the binary downloaded by the installer Makefile simply did not exist. So to address that add --fail to most curl commands. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
98 lines
3.4 KiB
Bash
Executable file
98 lines
3.4 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"
|
|
|
|
# HEAD should be good enough, but the CIRRUS envariable allows us to test
|
|
head=${CIRRUS_CHANGE_IN_REPO:-HEAD}
|
|
# Base of this PR. Here we absolutely rely on cirrus.
|
|
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
|
|
|
|
# Nope. Only allow if the github 'no-tests-needed' label is set
|
|
if [[ -z "$CIRRUS_PR" ]]; then
|
|
echo "$ME: cannot query github: \$CIRRUS_PR is undefined" >&2
|
|
exit 1
|
|
fi
|
|
if [[ -z "$CIRRUS_REPO_CLONE_TOKEN" ]]; then
|
|
echo "$ME: cannot query github: \$CIRRUS_REPO_CLONE_TOKEN is undefined" >&2
|
|
exit 1
|
|
fi
|
|
|
|
query="{
|
|
\"query\": \"query {
|
|
repository(owner: \\\"containers\\\", name: \\\"podman\\\") {
|
|
pullRequest(number: $CIRRUS_PR) {
|
|
labels(first: 100) {
|
|
nodes {
|
|
name
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}\"
|
|
}"
|
|
|
|
result=$(curl --fail -s -H "Authorization: bearer $CIRRUS_REPO_CLONE_TOKEN" -H "Accept: application/vnd.github.antiope-preview+json" -H "Content-Type: application/json" -X POST --data @- https://api.github.com/graphql <<<"$query")
|
|
|
|
labels=$(jq -r '.data.repository.pullRequest.labels.nodes[].name' <<<"$result")
|
|
|
|
if grep -F -x -q "$OVERRIDE_LABEL" <<<"$labels"; then
|
|
# PR has the label set
|
|
exit 0
|
|
fi
|
|
|
|
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
|