#!/bin/sh set -eu if [ -z "$1" ] || [ -z "$2" ]; then echo "Usage: $0 [ ...]" echo echo "Runs the tests in , redirecting the output to \`tests_results/.log\`." echo "In addition, it outputs a rudimentary JUnit test report file to \`tests_results/.xml\`." echo echo "Example: $0 p2p_and_base @src/lib_p2p/runtest @src/lib_base/runtest" exit 1 fi name=${1:?} shift mkdir -p test_results echo "Running test \"dune build ${COVERAGE_OPTIONS:-} $*\" ..." START=$(date +%s.%N) EXITCODE=0 # TODO: https://gitlab.com/tezos/tezos/-/issues/3018 # Disable verbose once the log file bug in Alcotest is fixed. # If set, COVERAGE_OPTIONS will typically contain "--instrument-with bisect_ppx". # We need this to be word split for the arguments to be properly parsed by dune. # shellcheck disable=SC2086 dune build --error-reporting=twice ${COVERAGE_OPTIONS:-} "$@" > "test_results/$name.log" 2>&1 \ || EXITCODE=$? END=$(date +%s.%N) dt=$(echo "$END - $START" | bc) dd=$(echo "$dt/86400" | bc) dt2=$(echo "$dt-86400*$dd" | bc) dh=$(echo "$dt2/3600" | bc) dt3=$(echo "$dt2-3600*$dh" | bc) dm=$(echo "$dt3/60" | bc) ds=$(echo "$dt3-60*$dm" | bc) LC_NUMERIC=C printf "Total runtime: %02d:%02d:%02.4f\n" "$dh" "$dm" "$ds" if [ $EXITCODE -eq 0 ]; then echo "Ok"; nb_fail=0 else echo "Error"; echo "Exited with exitcode $EXITCODE" cat "test_results/$name.log" nb_fail=1 fi timestamp=$(date -Is) hostname=$(hostname) cat > "test_results/$name.xml" < EOF if [ ! $EXITCODE -eq 0 ]; then msg="Exited with exitcode $EXITCODE." # Add link to log artifact when running in CI if [ -n "${CI_SERVER_URL:-}" ]; then url=$CI_SERVER_URL/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/file/test_results/$name.log msg="$msg See logs at $url" fi cat >> "test_results/$name.xml" < EOF fi cat >> "test_results/$name.xml" < EOF exit $EXITCODE