ci / print-test-failures.shon commit trace2: create new combined trace facility (ee4512e)
   1#!/bin/sh
   2#
   3# Print output of failing tests
   4#
   5
   6. ${0%/*}/lib.sh
   7
   8# Tracing executed commands would produce too much noise in the loop below.
   9set +x
  10
  11cd t/
  12
  13if ! ls test-results/*.exit >/dev/null 2>/dev/null
  14then
  15        echo "Build job failed before the tests could have been run"
  16        exit
  17fi
  18
  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
  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}"
  37
  38                test_name="${TEST_EXIT%.exit}"
  39                test_name="${test_name##*/}"
  40                trash_dir="trash directory.$test_name"
  41                case "$CI_TYPE" in
  42                travis)
  43                        ;;
  44                azure-pipelines)
  45                        mkdir -p failed-test-artifacts
  46                        mv "$trash_dir" failed-test-artifacts
  47                        continue
  48                        ;;
  49                *)
  50                        echo "Unhandled CI type: $CI_TYPE" >&2
  51                        exit 1
  52                        ;;
  53                esac
  54                trash_tgz_b64="trash.$test_name.base64"
  55                if [ -d "$trash_dir" ]
  56                then
  57                        tar czp "$trash_dir" |base64 $base64_opts >"$trash_tgz_b64"
  58
  59                        trash_size=$(wc -c <"$trash_tgz_b64")
  60                        if [ $trash_size -gt 1048576 ]
  61                        then
  62                                # larger than 1MB
  63                                echo "$(tput setaf 1)Didn't include the trash directory of '$test_name' in the trace log, it's too big$(tput sgr0)"
  64                                continue
  65                        fi
  66
  67                        new_combined_trash_size=$(($combined_trash_size + $trash_size))
  68                        if [ $new_combined_trash_size -gt 1048576 ]
  69                        then
  70                                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)"
  71                                continue
  72                        fi
  73                        combined_trash_size=$new_combined_trash_size
  74
  75                        # DO NOT modify these two 'echo'-ed strings below
  76                        # without updating 'ci/util/extract-trash-dirs.sh'
  77                        # as well.
  78                        echo "$(tput setaf 1)Start of trash directory of '$test_name':$(tput sgr0)"
  79                        cat "$trash_tgz_b64"
  80                        echo "$(tput setaf 1)End of trash directory of '$test_name'$(tput sgr0)"
  81                fi
  82        fi
  83done
  84
  85if [ $combined_trash_size -gt 0 ]
  86then
  87        echo "------------------------------------------------------------------------"
  88        echo "Trash directories embedded in this log can be extracted by running:"
  89        echo
  90        echo "  curl https://api.travis-ci.org/v3/job/$TRAVIS_JOB_ID/log.txt |./ci/util/extract-trash-dirs.sh"
  91fi