]> git.ipfire.org Git - thirdparty/git.git/blame - ci/print-test-failures.sh
Merge branch 'ab/pager-exit-log'
[thirdparty/git.git] / ci / print-test-failures.sh
CommitLineData
657343a6
LS
1#!/bin/sh
2#
3# Print output of failing tests
4#
5
c2160f2d 6. ${0%/*}/lib.sh
657343a6 7
a8b8b6b8
SG
8# Tracing executed commands would produce too much noise in the loop below.
9set +x
10
aea8879a
SG
11cd t/
12
13if ! ls test-results/*.exit >/dev/null 2>/dev/null
677c7079
SG
14then
15 echo "Build job failed before the tests could have been run"
16 exit
17fi
18
aea8879a
SG
19case "$jobname" in
20osx-clang|osx-gcc)
21 # base64 in OSX doesn't wrap its output at 76 columns by
22 # default, but prints a single, very long line.
23 base64_opts="-b 76"
24 ;;
25esac
26
27combined_trash_size=0
28for TEST_EXIT in test-results/*.exit
f67242c1
JH
29do
30 if [ "$(cat "$TEST_EXIT")" != "0" ]
31 then
32 TEST_OUT="${TEST_EXIT%exit}out"
33 echo "------------------------------------------------------------------------"
34 echo "$(tput setaf 1)${TEST_OUT}...$(tput sgr0)"
35 echo "------------------------------------------------------------------------"
36 cat "${TEST_OUT}"
aea8879a
SG
37
38 test_name="${TEST_EXIT%.exit}"
39 test_name="${test_name##*/}"
40 trash_dir="trash directory.$test_name"
b011fabd
JS
41 case "$CI_TYPE" in
42 travis)
43 ;;
6141a2ed
JS
44 azure-pipelines)
45 mkdir -p failed-test-artifacts
46 mv "$trash_dir" failed-test-artifacts
47 continue
48 ;;
f72f328b
JS
49 github-actions)
50 mkdir -p failed-test-artifacts
92bf1b60 51 echo "FAILED_TEST_ARTIFACTS=t/failed-test-artifacts" >>$GITHUB_ENV
f72f328b
JS
52 cp "${TEST_EXIT%.exit}.out" failed-test-artifacts/
53 tar czf failed-test-artifacts/"$test_name".trash.tar.gz "$trash_dir"
54 continue
55 ;;
b011fabd
JS
56 *)
57 echo "Unhandled CI type: $CI_TYPE" >&2
58 exit 1
59 ;;
60 esac
aea8879a
SG
61 trash_tgz_b64="trash.$test_name.base64"
62 if [ -d "$trash_dir" ]
63 then
64 tar czp "$trash_dir" |base64 $base64_opts >"$trash_tgz_b64"
65
66 trash_size=$(wc -c <"$trash_tgz_b64")
67 if [ $trash_size -gt 1048576 ]
68 then
69 # larger than 1MB
70 echo "$(tput setaf 1)Didn't include the trash directory of '$test_name' in the trace log, it's too big$(tput sgr0)"
71 continue
72 fi
73
74 new_combined_trash_size=$(($combined_trash_size + $trash_size))
75 if [ $new_combined_trash_size -gt 1048576 ]
76 then
77 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)"
78 continue
79 fi
80 combined_trash_size=$new_combined_trash_size
81
82 # DO NOT modify these two 'echo'-ed strings below
83 # without updating 'ci/util/extract-trash-dirs.sh'
84 # as well.
85 echo "$(tput setaf 1)Start of trash directory of '$test_name':$(tput sgr0)"
86 cat "$trash_tgz_b64"
87 echo "$(tput setaf 1)End of trash directory of '$test_name'$(tput sgr0)"
88 fi
f67242c1 89 fi
657343a6 90done
aea8879a
SG
91
92if [ $combined_trash_size -gt 0 ]
93then
94 echo "------------------------------------------------------------------------"
95 echo "Trash directories embedded in this log can be extracted by running:"
96 echo
97 echo " curl https://api.travis-ci.org/v3/job/$TRAVIS_JOB_ID/log.txt |./ci/util/extract-trash-dirs.sh"
98fi