blob: 3203fae86c89f96348df20f834385bfae83d2966 [file] [edit]
#!/usr/bin/env bash
set -eo pipefail
cleanup() {
# Remove if nothing was generated.
[ -d artifacts ] && find artifacts -type d -empty -delete
}
trap cleanup EXIT
# Make a central directory to store all output artifacts of our test run to
# avoid having to configure multiple upload-artifacts steps in the workflow
# file.
OSSL_CI_ARTIFACTS_PATH="artifacts/"
if [ -n "${GITHUB_RUN_NUMBER}" ]; then
OSSL_CI_ARTIFACTS_PATH="artifacts/github-${GITHUB_JOB}-${GITHUB_RUN_NUMBER}-${GITHUB_RUN_ID}/"
fi
mkdir -p "$OSSL_CI_ARTIFACTS_PATH"
export OSSL_CI_ARTIFACTS_PATH="$(cd "$OSSL_CI_ARTIFACTS_PATH"; pwd)"
# Enable core dumps so a crashing test leaves a core with every thread's stack
# for diagnosis. Only a failing run produces one; green runs dump nothing.
# Linux only for now; best effort - a runner that disallows this just won't
# dump.
if [ "$(uname)" = Linux ]; then
ulimit -c unlimited 2>/dev/null || true
if command -v sudo >/dev/null 2>&1; then
sudo mkdir -p /tmp/cores && sudo chmod 1777 /tmp/cores || true
echo '/tmp/cores/core.%e.%p' | sudo tee /proc/sys/kernel/core_pattern >/dev/null 2>&1 || true
fi
fi
# Run the tests. This might fail, but we need to capture artifacts anyway.
set +e
make test HARNESS_JOBS=${HARNESS_JOBS:-4} LHASH_WORKERS=${LHASH_WORKERS:-16} "$@"
RESULT=$?
set -e
# Move an interesting subset of the test-runs data we want into the artifacts
# staging directory.
for test_name in quic_multistream; do
if [ -d "test-runs/test_${test_name}" ]; then
mv "test-runs/test_${test_name}" "$OSSL_CI_ARTIFACTS_PATH/"
fi
done
# Collect any core dumps together with the matching test binary, so the core is
# usable with gdb without a rebuild. The executable name is the %e field of the
# core file name. Only a failing run produces any. Linux only for now.
if [ "$(uname)" = Linux ]; then
for core in /tmp/cores/core.*; do
[ -f "$core" ] || continue
exe=$(basename "$core"); exe=${exe#core.}; exe=${exe%.*}
[ -f "test/$exe" ] && cp "test/$exe" "$OSSL_CI_ARTIFACTS_PATH/" || true
mv "$core" "$OSSL_CI_ARTIFACTS_PATH/" || true
done
fi
# Log the artifact tree.
echo "::group::List of artifact files generated"
echo "Test suite exited with $RESULT, artifacts path is $OSSL_CI_ARTIFACTS_PATH"
(cd "$OSSL_CI_ARTIFACTS_PATH"; find . -type f | sort)
echo "::endgroup::"
echo "Archive artifacts"
tar -czf artifacts.tar.gz $OSSL_CI_ARTIFACTS_PATH
exit $RESULT