git/ci/print-test-failures.sh
Johannes Schindelin b011fabd6e ci/lib.sh: encapsulate Travis-specific things
The upcoming patches will allow building git.git via Azure Pipelines
(i.e. Azure DevOps' Continuous Integration), where variable names and
URLs look a bit different than in Travis CI.

Also, the configurations of the available agents are different. For
example, Travis' and Azure Pipelines' macOS agents are set up
differently, so that on Travis, we have to install the git-lfs and
gettext Homebrew packages, and on Azure Pipelines we do not need to.
Likewise, Azure Pipelines' Ubuntu agents already have asciidoctor
installed.

Finally, on Azure Pipelines the natural way is not to base64-encode tar
files of the trash directories of failed tests, but to publish build
artifacts instead. Therefore, that code to log those base64-encoded tar
files is guarded to be Travis-specific.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2019-01-28 10:34:28 -08:00

87 lines
2.3 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 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
travis)
;;
*)
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
if [ $combined_trash_size -gt 0 ]
then
echo "------------------------------------------------------------------------"
echo "Trash directories embedded in this log can be extracted by running:"
echo
echo " curl https://api.travis-ci.org/v3/job/$TRAVIS_JOB_ID/log.txt |./ci/util/extract-trash-dirs.sh"
fi