Files
git/ci/print-test-failures.sh
Patrick Steinhardt eab5dbab92 ci: wire up Meson builds
Wire up CI builds for both GitLab and GitHub that use the Meson build
system.

While the setup is mostly trivial, one gotcha is the test output
directory used to be in "t/", but now it is contained in the build
directory. To unify the logic across Makefile- and Meson-based builds we
explicitly set up the `TEST_OUTPUT_DIRECTORY` variable so that it is the
same for both build systems.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2024-12-13 06:48:47 -08:00

95 lines
2.6 KiB
Bash
Executable File

#!/bin/sh
#
# Print output of failing tests
#
. ${0%/*}/lib.sh
# Tracing executed commands would produce too much noise in the loop below.
set +x
cd "${TEST_OUTPUT_DIRECTORY:-t/}"
if ! ls test-results/*.exit >/dev/null 2>/dev/null
then
echo "Build job failed before the tests could have been run"
exit
fi
case "$jobname" in
osx-clang|osx-gcc)
# base64 in OSX doesn't wrap its output at 76 columns by
# default, but prints a single, very long line.
base64_opts="-b 76"
;;
esac
combined_trash_size=0
for TEST_EXIT in test-results/*.exit
do
if [ "$(cat "$TEST_EXIT")" != "0" ]
then
TEST_OUT="${TEST_EXIT%exit}out"
echo "------------------------------------------------------------------------"
echo "$(tput setaf 1)${TEST_OUT}...$(tput sgr0)"
echo "------------------------------------------------------------------------"
cat "${TEST_OUT}"
test_name="${TEST_EXIT%.exit}"
test_name="${test_name##*/}"
trash_dir="trash directory.$test_name"
case "$CI_TYPE" in
azure-pipelines)
mkdir -p failed-test-artifacts
mv "$trash_dir" failed-test-artifacts
continue
;;
github-actions)
mkdir -p failed-test-artifacts
echo "FAILED_TEST_ARTIFACTS=${TEST_OUTPUT_DIRECTORY:t}/failed-test-artifacts" >>$GITHUB_ENV
cp "${TEST_EXIT%.exit}.out" failed-test-artifacts/
tar czf failed-test-artifacts/"$test_name".trash.tar.gz "$trash_dir"
continue
;;
gitlab-ci)
mkdir -p failed-test-artifacts
cp "${TEST_EXIT%.exit}.out" failed-test-artifacts/
tar czf failed-test-artifacts/"$test_name".trash.tar.gz "$trash_dir"
continue
;;
*)
echo "Unhandled CI type: $CI_TYPE" >&2
exit 1
;;
esac
trash_tgz_b64="trash.$test_name.base64"
if [ -d "$trash_dir" ]
then
tar czp "$trash_dir" |base64 $base64_opts >"$trash_tgz_b64"
trash_size=$(wc -c <"$trash_tgz_b64")
if [ $trash_size -gt 1048576 ]
then
# larger than 1MB
echo "$(tput setaf 1)Didn't include the trash directory of '$test_name' in the trace log, it's too big$(tput sgr0)"
continue
fi
new_combined_trash_size=$(($combined_trash_size + $trash_size))
if [ $new_combined_trash_size -gt 1048576 ]
then
echo "$(tput setaf 1)Didn't include the trash directory of '$test_name' in the trace log, there is plenty of trash in there already.$(tput sgr0)"
continue
fi
combined_trash_size=$new_combined_trash_size
# DO NOT modify these two 'echo'-ed strings below
# without updating 'ci/util/extract-trash-dirs.sh'
# as well.
echo "$(tput setaf 1)Start of trash directory of '$test_name':$(tput sgr0)"
cat "$trash_tgz_b64"
echo "$(tput setaf 1)End of trash directory of '$test_name'$(tput sgr0)"
fi
fi
done