diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1d22fe71..d9bbc980 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -24,21 +24,11 @@ jobs: printf '#!/bin/sh\n\nexec python "$@"\n' >python3 && export PATH=$PWD:$PATH && - export PYTHONPATH=$PWD && - export TEST_SHELL_PATH=/bin/sh && - failed=0 && - cd t && - for t in t[0-9]*.sh - do - printf '\n\n== %s ==\n' "$t" && - bash $t -q -v -x || - failed=$(($failed+1)) - done && - if test 0 != $failed + if ! t/run_tests -q -v -x then - mkdir ../failed && - tar czf ../failed/failed.tar.gz . + mkdir failed && + tar czf failed/failed.tar.gz t exit 1 fi - name: upload failed tests' directories diff --git a/Makefile b/Makefile index 1b7b5124..31f5e3ae 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ build: @echo Nothing to do: filter-repo is a script which needs no compilation. test: - cd t && time ./run_coverage + time t/run_coverage # fixup_locale might matter once we actually have translations, but right now # we don't. It might not even matter then, because python has a fallback podir. diff --git a/t/run_coverage b/t/run_coverage index f72cdd50..5517459b 100755 --- a/t/run_coverage +++ b/t/run_coverage @@ -1,5 +1,7 @@ #!/bin/bash +set -eu + orig_dir=$(cd $(dirname $0) && pwd -P) tmpdir=$(mktemp -d) @@ -16,12 +18,12 @@ EOF export COVERAGE_PROCESS_START=$tmpdir/.coveragerc export PYTHONPATH=$tmpdir: -# We pretend filenames are unicode for two reasons: (1) because it exercises -# more code, and (2) this setting will detect accidental use of unicode strings -# for file/directory names when it should always be bytestrings. -export PRETEND_UNICODE_ARGS=1 -ls t939*.sh | xargs -n 1 bash +# Produce a coverage report, even if the tests fail +set +e +$orig_dir/run_tests +exitcode=$? +set -e cd $tmpdir coverage3 combine @@ -29,3 +31,5 @@ coverage3 html -d $orig_dir/report coverage3 report -m cd $orig_dir rm -rf $tmpdir + +exit $exitcode diff --git a/t/run_tests b/t/run_tests new file mode 100755 index 00000000..d5e0ebd6 --- /dev/null +++ b/t/run_tests @@ -0,0 +1,27 @@ +#!/bin/bash +set -eu + +cd $(dirname $0) + +# Put git_filter_repo.py on the front of PYTHONPATH +export PYTHONPATH="$PWD/..${PYTHONPATH:+:$PYTHONPATH}" + +# We pretend filenames are unicode for two reasons: (1) because it exercises +# more code, and (2) this setting will detect accidental use of unicode strings +# for file/directory names when it should always be bytestrings. +export PRETEND_UNICODE_ARGS=1 + +export TEST_SHELL_PATH=/bin/sh + +failed=0 + +for t in t[0-9]*.sh +do + printf '\n\n== %s ==\n' "$t" + bash $t "$@" || failed=$(($failed+1)) +done + +if [ 0 -lt $failed ] +then + exit 1 +fi