]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
CI: Runs CMake feature tests.
authorJia Tan <jiat0218@gmail.com>
Fri, 24 Mar 2023 15:05:48 +0000 (23:05 +0800)
committerJia Tan <jiat0218@gmail.com>
Fri, 24 Mar 2023 15:41:06 +0000 (23:41 +0800)
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

index 8ce082d793f0ef74063e3d38a037ddeda04b8a36..1691b5a8f4c4633198d54c4abe835130c612f770 100644 (file)
@@ -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
-
-      # 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
+        run: ./build-aux/ci_build.sh -b ${{ matrix.build_system }} -c crc32,sha256 -d shared,nls -p test -n no_crc64
 
-  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