From 3a401b0e0c7a2658af7801dd0690256ef24149e0 Mon Sep 17 00:00:00 2001 From: Jia Tan Date: Wed, 1 Feb 2023 21:36:22 +0800 Subject: [PATCH] CI: Upload test logs as artifacts if a test fails. --- .github/workflows/ci.yml | 60 ++++++++++++++++++++++++++++------------ build-aux/ci_build.sh | 31 +++++++++++++++++---- 2 files changed, 68 insertions(+), 23 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 25716873..19391ec4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,48 +44,55 @@ jobs: run: ./build-aux/ci_build.sh -b autotools -p build -f "-m32" - name: Test 32-bit run: | - ./build-aux/ci_build.sh -b autotools -p test -f "-m32" + ./build-aux/ci_build.sh -b autotools -p test -f "-m32" -n 32_bit cd ../xz_build && make distclean - name: Build with full features run: ./build-aux/ci_build.sh -b autotools -p build - name: Test with full features - run: ./build-aux/ci_build.sh -b autotools -p test + run: ./build-aux/ci_build.sh -b autotools -p test -n full_features - name: Build without encoders run: ./build-aux/ci_build.sh -b autotools -d encoders,shared -p build - name: Test without encoders - run: ./build-aux/ci_build.sh -b autotools -d encoders,shared -p test + run: ./build-aux/ci_build.sh -b autotools -d encoders,shared -p test -n no_encoders - name: Build without decoders run: ./build-aux/ci_build.sh -b autotools -d decoders,shared -p build - name: Test without decoders - run: ./build-aux/ci_build.sh -b autotools -d decoders,shared -p test + run: ./build-aux/ci_build.sh -b autotools -d decoders,shared -p test -n no_decoders - name: Build without threads run: ./build-aux/ci_build.sh -b autotools -d threads,shared -p build - name: Test without threads - run: ./build-aux/ci_build.sh -b autotools -d threads,shared -p test + run: ./build-aux/ci_build.sh -b autotools -d threads,shared -p test -n no_threads - name: Build without BCJ filters run: ./build-aux/ci_build.sh -b autotools -d bcj,shared,nls -p build - name: Test without BCJ filters - run: ./build-aux/ci_build.sh -b autotools -d bcj,shared,nls -p test + run: ./build-aux/ci_build.sh -b autotools -d bcj,shared,nls -p test -n no_bcj - name: Build without Delta filters run: ./build-aux/ci_build.sh -b autotools -d delta,shared,nls -p build - name: Test without Delta filters - run: ./build-aux/ci_build.sh -b autotools -d delta,shared,nls -p test + run: ./build-aux/ci_build.sh -b autotools -d delta,shared,nls -p test -n no_delta - name: Build without sha256 check run: ./build-aux/ci_build.sh -b autotools -c crc32,crc64 -d shared,nls -p build - name: Test without sha256 check - run: ./build-aux/ci_build.sh -b autotools -c crc32,crc64 -d shared,nls -p test + run: ./build-aux/ci_build.sh -b autotools -c crc32,crc64 -d shared,nls -p test -n no_sha256 - name: Build without crc64 check run: ./build-aux/ci_build.sh -b autotools -c crc32,sha256 -d shared,nls -p build - name: Test without crc64 check - run: ./build-aux/ci_build.sh -b autotools -c crc32,sha256 -d shared,nls -p test + run: ./build-aux/ci_build.sh -b autotools -c crc32,sha256 -d shared,nls -p test -n no_crc64 + + # Attempt to upload the test logs as artifacts if any step has failed + - uses: actions/upload-artifact@v3 + if: ${{ failure() }} + with: + name: Linux Autotools Test Logs + path: build-aux/artifacts Linux-CMake: runs-on: ubuntu-latest @@ -97,6 +104,12 @@ jobs: run: ./build-aux/ci_build.sh -b cmake -p build - name: Test run: ./build-aux/ci_build.sh -b cmake -p test + # Attempt to upload the test logs as artifacts if any step has failed + - uses: actions/upload-artifact@v3 + if: ${{ failure() }} + with: + name: Linux CMake Test Logs + path: build-aux/artifacts MacOS-Autotools: runs-on: macos-latest @@ -109,42 +122,49 @@ jobs: - name: Build with full features run: ./build-aux/ci_build.sh -b autotools -p build - name: Test with full features - run: ./build-aux/ci_build.sh -b autotools -p test + run: ./build-aux/ci_build.sh -b autotools -p test -n full_features - name: Build without encoders run: ./build-aux/ci_build.sh -b autotools -d encoders,shared -p build - name: Test without encoders - run: ./build-aux/ci_build.sh -b autotools -d encoders,shared -p test + run: ./build-aux/ci_build.sh -b autotools -d encoders,shared -p test -n no_encoders - name: Build without decoders run: ./build-aux/ci_build.sh -b autotools -d decoders,shared -p build - name: Test without decoders - run: ./build-aux/ci_build.sh -b autotools -d decoders,shared -p test + run: ./build-aux/ci_build.sh -b autotools -d decoders,shared -p test -n no_decoders - name: Build without threads run: ./build-aux/ci_build.sh -b autotools -d threads,shared -p build - name: Test without threads - run: ./build-aux/ci_build.sh -b autotools -d threads,shared -p test + run: ./build-aux/ci_build.sh -b autotools -d threads,shared -p test -n no_threads - name: Build without BCJ filters run: ./build-aux/ci_build.sh -b autotools -d bcj,shared,nls -p build - name: Test without BCJ filters - run: ./build-aux/ci_build.sh -b autotools -d bcj,shared,nls -p test + run: ./build-aux/ci_build.sh -b autotools -d bcj,shared,nls -p test -n no_bcj - name: Build without Delta filters run: ./build-aux/ci_build.sh -b autotools -d delta,shared,nls -p build - name: Test without Delta filters - run: ./build-aux/ci_build.sh -b autotools -d delta,shared,nls -p test + run: ./build-aux/ci_build.sh -b autotools -d delta,shared,nls -p test -n no_delta - name: Build without sha256 check run: ./build-aux/ci_build.sh -b autotools -c crc32,crc64 -d shared,nls -p build - name: Test without sha256 check - run: ./build-aux/ci_build.sh -b autotools -c crc32,crc64 -d shared,nls -p test + run: ./build-aux/ci_build.sh -b autotools -c crc32,crc64 -d shared,nls -p test -n no_sha256 - name: Build without crc64 check run: ./build-aux/ci_build.sh -b autotools -c crc32,sha256 -d shared,nls -p build - name: Test without crc64 check - run: ./build-aux/ci_build.sh -b autotools -c crc32,sha256 -d shared,nls -p test + run: ./build-aux/ci_build.sh -b autotools -c crc32,sha256 -d shared,nls -p test -n no_crc64 + + # Attempt to upload the test logs as artifacts if any step has failed + - uses: actions/upload-artifact@v3 + if: ${{ failure() }} + with: + name: MacOS Autotools Test Logs + path: build-aux/artifacts MacOS-CMake: runs-on: macos-latest @@ -156,4 +176,10 @@ jobs: run: ./build-aux/ci_build.sh -b cmake -p build - name: Test run: ./build-aux/ci_build.sh -b cmake -p test + # Attempt to upload the test logs as artifacts if any step has failed + - uses: actions/upload-artifact@v3 + if: ${{ failure() }} + with: + name: MacOS CMake Test Logs + path: build-aux/artifacts \ No newline at end of file diff --git a/build-aux/ci_build.sh b/build-aux/ci_build.sh index 2d0f8643..85542c9b 100755 --- a/build-aux/ci_build.sh +++ b/build-aux/ci_build.sh @@ -20,10 +20,11 @@ USAGE="Usage: $0 -b [autotools|cmake] -c [crc32|crc64|sha256] -d [encoders|decoders|bcj|delta|threads|shared|nls] + -f [CFLAGS] -l [destdir] - -s [srcdir] + -n [ARTIFACTS_DIR_NAME] -p [all|build|test] - -f [CFLAGS]" + -s [srcdir]" # Absolute path of script directory ABS_DIR=$(cd -- "$(dirname -- "$0")" && pwd) @@ -41,9 +42,10 @@ NATIVE_LANG_SUPPORT="y" SRC_DIR="$ABS_DIR/../" DEST_DIR="$SRC_DIR/../xz_build" PHASE="all" +ARTIFACTS_DIR_NAME="output" # Parse arguments -while getopts b:c:d:l:s:p:f:h opt; do +while getopts b:c:d:l:n:s:p:f:h opt; do # b option can have either value "autotools" OR "cmake" case ${opt} in h) @@ -88,6 +90,8 @@ while getopts b:c:d:l:s:p:f:h opt; do ;; l) DEST_DIR="$OPTARG" ;; + n) ARTIFACTS_DIR_NAME="$OPTARG" + ;; s) SRC_DIR="$OPTARG" ;; p) PHASE="$OPTARG" @@ -177,11 +181,26 @@ if [ "$PHASE" = "all" ] || [ "$PHASE" = "test" ]; then case $BUILD_SYSTEM in autotools) cd "$DEST_DIR" - make check + # If the tests fail, copy the test logs into the artifacts folder + if make check + then + : + else + mkdir -p "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME" + cp ./tests/*.log "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME" + exit 1 + fi ;; cmake) cd "$DEST_DIR" - make "test" + if make test + then + : + else + mkdir -p "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME" + cp ./Testing/Temporary/*.log "$SRC_DIR/build-aux/artifacts/$ARTIFACTS_DIR_NAME" + exit 1 + fi ;; esac -fi \ No newline at end of file +fi