mirror of
https://github.com/containers/podman.git
synced 2025-08-06 19:44:14 +08:00

Due to a bad file-format design, if a cirrus-cron job happened to have a name w/ spaces, the generated e-mail text would be broken. For example: ``` Cron build 'VM' Failed: https://cirrus-ci.com/build/Image Maintenance 5630822628196352 ``` Fix this by flipping the field-order in an intermediate file, so the build ID comes first, then the job name. This makes it much easier for `read` to process, since all words will be stored into the final variable (now the job name). Also change all variables that reference this intermediate file such that they continue to reflect the expected field order. Update script tests and add a new test to confirm expected file processing and output. Signed-off-by: Chris Evich <cevich@redhat.com>
102 lines
3.2 KiB
Bash
102 lines
3.2 KiB
Bash
|
|
|
|
# This script attempts to confirm functional github action scripts.
|
|
# It expects to be called from Cirrus-CI, in a special execution
|
|
# environment. Any use outside this environment will probably fail.
|
|
|
|
set -eo pipefail
|
|
|
|
# Defined by setup_environment.sh
|
|
# shellcheck disable=SC2154
|
|
if ! ((PREBUILD)); then
|
|
echo "Not operating under expected environment"
|
|
exit 1
|
|
fi
|
|
|
|
expect_regex() {
|
|
local expected_regex
|
|
local input_file
|
|
expected_regex="$1"
|
|
input_file="$2"
|
|
grep -E -q "$expected_regex" $input_file || \
|
|
die "No match to '$expected_regex' in '$(<$input_file)'"
|
|
}
|
|
|
|
req_env_vars CIRRUS_CI CIRRUS_REPO_FULL_NAME CIRRUS_WORKING_DIR CIRRUS_BUILD_ID
|
|
|
|
# Defined by the CI system
|
|
# shellcheck disable=SC2154
|
|
cd $CIRRUS_WORKING_DIR || fail
|
|
|
|
header="Testing cirrus-cron github-action script:"
|
|
msg "$header cron_failures.sh"
|
|
|
|
base=$CIRRUS_WORKING_DIR/.github/actions/check_cirrus_cron
|
|
# Don't care about mktemp return value
|
|
# shellcheck disable=SC2155
|
|
export GITHUB_OUTPUT=$(mktemp -p '' cron_failures_output_XXXX)
|
|
# CIRRUS_REPO_FULL_NAME checked above in req_env_vars
|
|
# shellcheck disable=SC2154
|
|
export GITHUB_REPOSITORY="$CIRRUS_REPO_FULL_NAME"
|
|
# shellcheck disable=SC2155
|
|
export GITHUB_WORKSPACE=$(mktemp -d -p '' cron_failures_workspace_XXXX)
|
|
export GITHUB_WORKFLOW="testing"
|
|
# shellcheck disable=SC2155
|
|
export ID_NAME_FILEPATH=$(mktemp -p '' cron_failures_data_XXXX)
|
|
trap "rm -rf $GITHUB_OUTPUT $GITHUB_WORKSPACE $ID_NAME_FILEPATH" EXIT
|
|
|
|
#####
|
|
|
|
cd $GITHUB_WORKSPACE || fail
|
|
# Replace newlines and indentation to make grep easier
|
|
if ! $base/cron_failures.sh |& \
|
|
tr -s '[:space:]' ' ' > $GITHUB_WORKSPACE/output; then
|
|
die "Failed: $base/cron_failures.sh with output '$(<$GITHUB_WORKSPACE/output)'"
|
|
fi
|
|
|
|
expect_regex \
|
|
'result.+data.+ownerRepository.+cronSettings.+endgroup' \
|
|
"$GITHUB_WORKSPACE/output"
|
|
|
|
#####
|
|
|
|
msg "$header make_email_body.sh"
|
|
# It's possible no cirrus-cron jobs actually failed
|
|
echo -e '\n\n \n\t\n' >> "$ID_NAME_FILEPATH" # blank lines should be ignored
|
|
# Don't need to test stdout/stderr of this
|
|
if ! $base/make_email_body.sh; then
|
|
die "make_email_body.sh failed"
|
|
fi
|
|
|
|
expect_regex \
|
|
'^Detected.+Cirrus-CI.+failed.*' \
|
|
"$GITHUB_WORKSPACE/artifacts/email_body.txt"
|
|
|
|
#####
|
|
|
|
msg "$header make_email_body.sh name and link"
|
|
# Job names may contain spaces, confirm lines are parsed properly
|
|
echo -e '1234567890 cirrus-cron test job' >> "$ID_NAME_FILEPATH" # Append to blank lines
|
|
$base/make_email_body.sh
|
|
expected="Cron build 'cirrus-cron test job' Failed: https://cirrus-ci.com/build/1234567890"
|
|
if ! grep -q "$expected" $GITHUB_WORKSPACE/artifacts/email_body.txt; then
|
|
die "Expecting to find string '$expected' in generated e-mail body:
|
|
$(<$GITHUB_WORKSPACE/artifacts/email_body.txt)"
|
|
fi
|
|
|
|
#####
|
|
|
|
msg "$header rerun_failed_tasks.sh"
|
|
export SECRET_CIRRUS_API_KEY=testing-nottherightkey
|
|
# test.sh is sensitive to the 'testing' name. Var. defined by cirrus-ci
|
|
# shellcheck disable=SC2154
|
|
echo "$CIRRUS_BUILD_ID test cron job name" > "$ID_NAME_FILEPATH"
|
|
if ! $base/rerun_failed_tasks.sh |& \
|
|
tr -s '[:space:]' ' ' > $GITHUB_WORKSPACE/rerun_output; then
|
|
die "rerun_failed_tasks.sh failed"
|
|
fi
|
|
|
|
expect_regex \
|
|
"Posting GraphQL Query.+$CIRRUS_BUILD_ID.+Selecting.+re-run" \
|
|
"$GITHUB_WORKSPACE/rerun_output"
|