From 20cd905d898c1494dee42b78530769bb9c9f8076 Mon Sep 17 00:00:00 2001 From: Jia Tan Date: Fri, 24 Mar 2023 23:05:48 +0800 Subject: [PATCH] CI: Runs CMake feature tests. Now, CMake will run similar feature disable tests that the Autotools version did before. In order to do this without repeating lines in ci.yml, it now makes sense to use the GitHub Workflow matrix to create a loop. --- .github/workflows/ci.yml | 169 +++++++++++++-------------------------- 1 file changed, 55 insertions(+), 114 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8ce082d7..1691b5a8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,18 +20,43 @@ on: workflow_dispatch: jobs: - # When CMake can support disabling check types and - # encoders/decoders/threads, it will be combined to one Linux job - # and another matrix list. - Linux-Autotools: - # Just run on latest ubuntu - runs-on: ubuntu-latest + POSIX: + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + build_system: [autotools, cmake] + runs-on: ${{ matrix.os }} steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 + + ######################## + # Install Dependencies # + ######################## + + # Install Autotools on Linux - name: Install Dependencies + if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }} run: sudo apt-get install -y autoconf automake build-essential po4a autopoint gcc-multilib doxygen + # Install Autotools on Mac + - name: Install Dependencies + if: ${{ matrix.os == 'macos-latest' && matrix.build_system == 'autotools' }} + run: brew install autoconf automake libtool po4a doxygen + + # Install CMake on Linux + - name: Install Dependencies + if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'cmake' }} + run: sudo apt-get install -y build-essential cmake + + # Install CMake on Mac + - name: Install Dependencies + if: ${{ matrix.os == 'macos-latest' && matrix.build_system == 'cmake' }} + run: brew install cmake + + ################## + # Build and Test # + ################## + # -b specifies the build system to use. # -p specifies the phase (build or test) to help narrow down an error # if one occurs. @@ -39,146 +64,62 @@ jobs: # Start with the 32-bit build because the autoconf cache must be reset # after the build because the 32-bit build sets the CFLAGS env variable. # By starting with the 32-bit build, we only have to clear the - # cache once. + # cache once. The 32-bit build is only tested on Autotools Linux. - name: Build 32-bit + if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }} run: ./build-aux/ci_build.sh -b autotools -p build -f "-m32" - name: Test 32-bit + if: ${{ matrix.os == 'ubuntu-latest' && matrix.build_system == 'autotools' }} run: | ./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 + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -p build - name: Test with full features - run: ./build-aux/ci_build.sh -b autotools -p test -n full_features + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -p test -n full_features - name: Build without encoders - run: ./build-aux/ci_build.sh -b autotools -d encoders,shared -p build + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d encoders,shared -p build - name: Test without encoders - run: ./build-aux/ci_build.sh -b autotools -d encoders,shared -p test -n no_encoders + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -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 + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d decoders,shared -p build - name: Test without decoders - run: ./build-aux/ci_build.sh -b autotools -d decoders,shared -p test -n no_decoders + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d decoders,shared -p test -n no_decoders + # Our CMake build cannot disable threads yet. - name: Build without threads - run: ./build-aux/ci_build.sh -b autotools -d threads,shared -p build + if: ${{ matrix.build_system == 'autotools' }} + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -d threads,shared -p build - name: Test without threads - run: ./build-aux/ci_build.sh -b autotools -d threads,shared -p test -n no_threads + if: ${{ matrix.build_system == 'autotools' }} + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -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 + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -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 -n no_bcj + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -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 + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -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 -n no_delta + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -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 + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -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 -n no_sha256 + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -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 + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -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 -n no_crc64 + run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -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 - steps: - - uses: actions/checkout@v2 - - name: Install Dependencies - run: sudo apt-get install -y build-essential cmake - - name: Build - 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 - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - name: Install Dependencies - run: brew install autoconf automake libtool po4a doxygen - - - 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 -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 -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 -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 -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 -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 -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 -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 -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 - steps: - - uses: actions/checkout@v2 - - name: Install Dependencies - run: brew install cmake - - name: Build - 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 + name: ${{ matrix.os }} ${{ matrix.build_system }} Test Logs path: build-aux/artifacts