Merge branch 'sg/travis-retrieve-trash-upon-failure'

The Travis CI scripts were taught to ship back the test data from
failed tests.

* sg/travis-retrieve-trash-upon-failure:
  travis-ci: include the trash directories of failed tests in the trace log
This commit is contained in:
Junio C Hamano 2018-08-15 15:08:28 -07:00
Родитель 11ea82ae37 aea8879a6a
Коммит 6be44b59fc
3 изменённых файлов: 104 добавлений и 3 удалений

Просмотреть файл

@ -97,7 +97,7 @@ fi
export DEVELOPER=1 export DEVELOPER=1
export DEFAULT_TEST_TARGET=prove export DEFAULT_TEST_TARGET=prove
export GIT_PROVE_OPTS="--timer --jobs 3 --state=failed,slow,save" export GIT_PROVE_OPTS="--timer --jobs 3 --state=failed,slow,save"
export GIT_TEST_OPTS="--verbose-log -x" export GIT_TEST_OPTS="--verbose-log -x --immediate"
export GIT_TEST_CLONE_2GB=YesPlease export GIT_TEST_CLONE_2GB=YesPlease
if [ "$jobname" = linux-gcc ]; then if [ "$jobname" = linux-gcc ]; then
export CC=gcc-8 export CC=gcc-8

Просмотреть файл

@ -8,13 +8,24 @@
# Tracing executed commands would produce too much noise in the loop below. # Tracing executed commands would produce too much noise in the loop below.
set +x set +x
if ! ls t/test-results/*.exit >/dev/null 2>/dev/null cd t/
if ! ls test-results/*.exit >/dev/null 2>/dev/null
then then
echo "Build job failed before the tests could have been run" echo "Build job failed before the tests could have been run"
exit exit
fi fi
for TEST_EXIT in t/test-results/*.exit 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 do
if [ "$(cat "$TEST_EXIT")" != "0" ] if [ "$(cat "$TEST_EXIT")" != "0" ]
then then
@ -23,5 +34,45 @@ do
echo "$(tput setaf 1)${TEST_OUT}...$(tput sgr0)" echo "$(tput setaf 1)${TEST_OUT}...$(tput sgr0)"
echo "------------------------------------------------------------------------" echo "------------------------------------------------------------------------"
cat "${TEST_OUT}" cat "${TEST_OUT}"
test_name="${TEST_EXIT%.exit}"
test_name="${test_name##*/}"
trash_dir="trash directory.$test_name"
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 fi
done 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

50
ci/util/extract-trash-dirs.sh Executable file
Просмотреть файл

@ -0,0 +1,50 @@
#!/bin/sh
error () {
echo >&2 "error: $@"
exit 1
}
find_embedded_trash () {
while read -r line
do
case "$line" in
*Start\ of\ trash\ directory\ of\ \'t[0-9][0-9][0-9][0-9]-*\':*)
test_name="${line#*\'}"
test_name="${test_name%\'*}"
return 0
esac
done
return 1
}
extract_embedded_trash () {
while read -r line
do
case "$line" in
*End\ of\ trash\ directory\ of\ \'$test_name\'*)
return
;;
*)
printf '%s\n' "$line"
;;
esac
done
error "unexpected end of input"
}
# Raw logs from Linux build jobs have CRLF line endings, while OSX
# build jobs mostly have CRCRLF, except an odd line every now and
# then that has CRCRCRLF. 'base64 -d' from 'coreutils' doesn't like
# CRs and complains about "invalid input", so remove all CRs at the
# end of lines.
sed -e 's/\r*$//' | \
while find_embedded_trash
do
echo "Extracting trash directory of '$test_name'"
extract_embedded_trash |base64 -d |tar xzp
done