]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Backport latest CI workflows from 'develop'.
authorHans Kristian Rosbach <hk-git@circlestorm.org>
Wed, 8 Feb 2023 14:52:07 +0000 (15:52 +0100)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Fri, 17 Mar 2023 20:27:56 +0000 (21:27 +0100)
Removed tests for features not supported in 2.0.x:
- cxx related settings, as stable does not use gtest/gbench.
- Emscripten
- Add_subdirectory
- Symbol prefix
- oss-fuzz, their buildfile is incompatible with this branch

.github/workflows/analyze.yml
.github/workflows/cmake.yml
.github/workflows/configure.yml
.github/workflows/fuzz.yml [deleted file]
.github/workflows/libpng.yml
.github/workflows/nmake.yml
.github/workflows/pigz.yml
.github/workflows/pkgcheck.yml
.github/workflows/release.yml
test/pigz/CMakeLists.txt

index d9d2555b85ef5076e416523f1342a11c539f9f46..17333d244c266c0c2d097a88939ec962ead5c936 100644 (file)
@@ -1,44 +1,78 @@
-name: CI Static Analysis
+name: Static Analysis
 on: [push, pull_request]
 jobs:
-  GCC:
+  static-analysis:
+    name: GCC
     runs-on: ubuntu-latest
     steps:
     - name: Checkout repository
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
 
-    - name: Install packages (Ubuntu)
+    - name: Add ubuntu mirrors
       run: |
-        sudo apt-get install -y gcc-10
+        # Github Actions caching proxy is at times unreliable
+        echo -e 'http://azure.archive.ubuntu.com/ubuntu\tpriority:1\n' | sudo tee /etc/apt/mirrors.txt
+        curl http://mirrors.ubuntu.com/mirrors.txt | sudo tee --append /etc/apt/mirrors.txt
+        sudo sed -i 's#http://azure.archive.ubuntu.com/ubuntu/#mirror+file:/etc/apt/mirrors.txt#' /etc/apt/sources.list
+
+    - name: Install packages (Ubuntu)
+      run: sudo apt-get install -y gcc-10
 
     - name: Generate project files
       run: |
-        cmake . -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DWITH_FUZZERS=OFF -DWITH_CODE_COVERAGE=OFF -DWITH_MAINTAINER_WARNINGS=OFF
+        cmake . \
+          -DCMAKE_BUILD_TYPE=Release \
+          -DBUILD_SHARED_LIBS=OFF \
+          -DWITH_FUZZERS=OFF \
+          -DWITH_CODE_COVERAGE=OFF \
+          -DWITH_MAINTAINER_WARNINGS=OFF
       env:
         CC: gcc-10
-        CFLAGS: "-fanalyzer -Werror -Wanalyzer-double-fclose -Wanalyzer-double-free -Wanalyzer-exposure-through-output-file -Wanalyzer-file-leak -Wanalyzer-free-of-non-heap -Wanalyzer-malloc-leak -Wanalyzer-null-argument -Wanalyzer-null-dereference -Wanalyzer-possible-null-argument -Wanalyzer-possible-null-dereference -Wanalyzer-stale-setjmp-buffer -Wanalyzer-tainted-array-index -Wanalyzer-unsafe-call-within-signal-handler -Wanalyzer-use-after-free -Wanalyzer-use-of-pointer-in-stale-stack-frame"
+        CFLAGS:
+          -fanalyzer
+          -Werror
+          -Wanalyzer-double-fclose
+          -Wanalyzer-double-free
+          -Wanalyzer-exposure-through-output-file
+          -Wanalyzer-file-leak
+          -Wanalyzer-free-of-non-heap
+          -Wanalyzer-malloc-leak
+          -Wanalyzer-null-argument
+          -Wanalyzer-null-dereference
+          -Wanalyzer-possible-null-argument
+          -Wanalyzer-possible-null-dereference
+          -Wanalyzer-stale-setjmp-buffer
+          -Wanalyzer-tainted-array-index
+          -Wanalyzer-unsafe-call-within-signal-handler
+          -Wanalyzer-use-after-free
+          -Wanalyzer-use-of-pointer-in-stale-stack-frame
         CI: true
 
     - name: Compile source code
-      run: |
-        cmake --build . --config Release > /dev/null
+      run: cmake --build . --config Release > /dev/null
 
   Clang:
     runs-on: ubuntu-latest
     steps:
     - name: Checkout repository
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
 
     - name: Install packages (Ubuntu)
-      run: |
-        sudo apt-get install clang-tools -y
+      run: sudo apt-get install -y clang-tools
 
     - name: Generate project files
       run: |
-        scan-build --status-bugs cmake . -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DWITH_FUZZERS=OFF -DWITH_CODE_COVERAGE=OFF -DWITH_MAINTAINER_WARNINGS=OFF
+        scan-build --status-bugs \
+          cmake . \
+            -DCMAKE_BUILD_TYPE=Release \
+            -DBUILD_SHARED_LIBS=OFF \
+            -DWITH_FUZZERS=OFF \
+            -DWITH_CODE_COVERAGE=OFF \
+            -DWITH_MAINTAINER_WARNINGS=OFF
       env:
         CI: true
 
     - name: Compile source code
       run: |
-        scan-build --status-bugs cmake --build . --config Release > /dev/null
+        scan-build --status-bugs \
+          cmake --build . --config Release > /dev/null
index f94273f642a72d14cfdeb403db2bcdd9050abe52..987e35f5ea2e52cd574bf3c470afd1114117a05d 100644 (file)
@@ -1,38 +1,60 @@
-name: CI CMake
+name: CMake
 on: [push, pull_request]
+env:
+  TERM: xterm-256color
+  GTEST_COLOR: 1
 jobs:
-  ci-cmake:
+  cmake:
     name: ${{ matrix.name }}
     runs-on: ${{ matrix.os }}
+    timeout-minutes: 60
     strategy:
       fail-fast: false
       matrix:
         include:
-          - name: Ubuntu 18.04 GCC
-            os: ubuntu-18.04
+          - name: Ubuntu 20.04 GCC
+            os: ubuntu-20.04
             compiler: gcc
 
-          - name: Ubuntu GCC
+          - name: Ubuntu GCC ASAN
             os: ubuntu-latest
             compiler: gcc
             cmake-args: -DWITH_SANITIZER=Address
             codecov: ubuntu_gcc
 
-          - name: Ubuntu GCC OSB -O1 No Unaligned64
+          - name: Ubuntu GCC Symbol Prefix
+            os: ubuntu-latest
+            compiler: gcc
+            cmake-args: -DZLIB_SYMBOL_PREFIX=zTest_
+            codecov: ubuntu_gcc_sprefix
+
+          - name: Ubuntu GCC Compat Symbol Prefix
+            os: ubuntu-latest
+            compiler: gcc
+            cmake-args: -DZLIB_COMPAT=ON -DZLIB_SYMBOL_PREFIX=zTest_
+            codecov: ubuntu_gcc_compat_sprefix
+
+          - name: Ubuntu GCC -O3 OSB
             os: ubuntu-latest
             compiler: gcc
-            cmake-args: -DWITH_UNALIGNED=ON -DUNALIGNED64_OK=OFF -DWITH_SANITIZER=Undefined
             build-dir: ../build
             build-src-dir: ../zlib-ng
             codecov: ubuntu_gcc_osb
-            cflags: -O1 -g3
+            cflags: -O3
 
-          - name: Ubuntu GCC -O3 No Unaligned
+          - name: Ubuntu GCC -O1 No Unaligned UBSAN
             os: ubuntu-latest
             compiler: gcc
-            cmake-args: -DWITH_UNALIGNED=OFF
-            codecov: ubuntu_gcc_o3
-            cflags: -O3
+            cmake-args: -DWITH_UNALIGNED=OFF -DWITH_SANITIZER=Undefined
+            codecov: ubuntu_gcc_o1
+            cflags: -O1
+
+          - name: Ubuntu GCC 32-bit
+            os: ubuntu-latest
+            compiler: gcc
+            cmake-args: -DCMAKE_C_FLAGS=-m32 -DCMAKE_SHARED_LINKER_FLAGS=-m32 -DCMAKE_EXE_LINKER_FLAGS=-m32
+            packages: gcc-multilib g++-multilib
+            codecov: ubuntu_gcc_m32
 
           - name: Ubuntu GCC No CTZLL
             os: ubuntu-latest
@@ -46,222 +68,190 @@ jobs:
             cmake-args: -DWITH_OPTIM=OFF -DHAVE_BUILTIN_CTZLL=OFF -DHAVE_BUILTIN_CTZ=OFF
             codecov: ubuntu_gcc_no_ctz
 
-          - name: Ubuntu GCC Link Zlib
-            os: ubuntu-latest
-            compiler: gcc
-            cmake-args: -DZLIB_DUAL_LINK=ON
-
-          - name: Ubuntu GCC No AVX2
+          - name: Ubuntu GCC No AVX2 UBSAN
             os: ubuntu-latest
             compiler: gcc
             cmake-args: -DWITH_AVX2=OFF -DWITH_SANITIZER=Undefined
             codecov: ubuntu_gcc_no_avx2
 
-          - name: Ubuntu GCC No SSE2
+          - name: Ubuntu GCC No SSE2 UBSAN
             os: ubuntu-latest
             compiler: gcc
             cmake-args: -DWITH_SSE2=OFF -DWITH_SANITIZER=Undefined
             codecov: ubuntu_gcc_no_sse2
 
-          - name: Ubuntu GCC No SSE4
+          - name: Ubuntu GCC No SSE4 UBSAN
             os: ubuntu-latest
             compiler: gcc
             cmake-args: -DWITH_SSE4=OFF -DWITH_SANITIZER=Undefined
             codecov: ubuntu_gcc_no_sse4
 
-          - name: Ubuntu GCC No PCLMULQDQ
+          - name: Ubuntu GCC No PCLMULQDQ UBSAN
             os: ubuntu-latest
             compiler: gcc
             cmake-args: -DWITH_PCLMULQDQ=OFF -DWITH_SANITIZER=Undefined
             codecov: ubuntu_gcc_no_pclmulqdq
 
-          - name: Ubuntu GCC Compat No Opt
+          - name: Ubuntu GCC Compat No Opt ASAN
             os: ubuntu-latest
             compiler: gcc
             cmake-args: -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Address
             codecov: ubuntu_gcc_compat_no_opt
             cflags: -DNOT_TWEAK_COMPILER
 
-          - name: Ubuntu GCC ARM SF
+          - name: Ubuntu GCC ARM SF ASAN
             os: ubuntu-latest
-            compiler: arm-linux-gnueabi-gcc
-            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabi -DWITH_SANITIZER=Address
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DWITH_SANITIZER=Address
             asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-arm-linux-gnueabi libc-dev-armel-cross
-            qemu-run: qemu-arm
+            packages: qemu qemu-user gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc-dev-armel-cross
             codecov: ubuntu_gcc_armsf
 
-          - name: Ubuntu GCC ARM SF Compat No Opt
+          - name: Ubuntu GCC ARM SF Compat No Opt UBSAN
             os: ubuntu-latest
-            compiler: arm-linux-gnueabi-gcc
-            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabi -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined
-            asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-arm-linux-gnueabi libc-dev-armel-cross
-            qemu-run: qemu-arm
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined
+            packages: qemu qemu-user gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc-dev-armel-cross
             codecov: ubuntu_gcc_armsf_compat_no_opt
 
-          - name: Ubuntu GCC ARM HF
+          - name: Ubuntu GCC ARM HF No ACLE ASAN
             os: ubuntu-latest
-            compiler: arm-linux-gnueabihf-gcc
-            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabihf -DWITH_SANITIZER=Address
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DWITH_ACLE=OFF -DWITH_SANITIZER=Address
             asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-arm-linux-gnueabihf libc-dev-armel-cross
-            qemu-run: qemu-arm
-            codecov: ubuntu_gcc_armhf
-
-          - name: Ubuntu GCC ARM HF No ACLE
-            os: ubuntu-latest
-            compiler: arm-linux-gnueabihf-gcc
-            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabihf -DWITH_ACLE=OFF -DWITH_SANITIZER=Address
-            asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-arm-linux-gnueabihf libc-dev-armel-cross
-            qemu-run: qemu-arm
+            packages: qemu qemu-user gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc-dev-armel-cross
             codecov: ubuntu_gcc_armhf_no_acle
 
-          - name: Ubuntu GCC ARM HF No NEON
+          - name: Ubuntu GCC ARM HF No NEON No ACLE ASAN
             os: ubuntu-latest
-            compiler: arm-linux-gnueabihf-gcc
-            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabihf -DWITH_NEON=OFF -DWITH_SANITIZER=Address
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DWITH_NEON=OFF -DWITH_ACLE=OFF -DWITH_SANITIZER=Address
             asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-arm-linux-gnueabihf libc-dev-armel-cross
-            qemu-run: qemu-arm
+            packages: qemu qemu-user gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc-dev-armel-cross
             codecov: ubuntu_gcc_armhf_no_neon
 
-          - name: Ubuntu GCC ARM HF Compat No Opt
+          - name: Ubuntu GCC ARM HF Compat No Opt UBSAN
             os: ubuntu-latest
-            compiler: arm-linux-gnueabihf-gcc
-            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabihf -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined
-            asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-arm-linux-gnueabihf libc-dev-armel-cross
-            qemu-run: qemu-arm
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined
+            packages: qemu qemu-user gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc-dev-armel-cross
             codecov: ubuntu_gcc_armhf_compat_no_opt
 
-          - name: Ubuntu GCC AARCH64
+          - name: Ubuntu GCC AARCH64 ASAN
             os: ubuntu-latest
-            compiler: aarch64-linux-gnu-gcc
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DWITH_SANITIZER=Address
             asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross
-            qemu-run: qemu-aarch64
+            packages: qemu qemu-user gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc-dev-arm64-cross
             codecov: ubuntu_gcc_aarch64
 
-          - name: Ubuntu GCC AARCH64 No ACLE
+          - name: Ubuntu GCC AARCH64 No ACLE UBSAN
             os: ubuntu-latest
-            compiler: aarch64-linux-gnu-gcc
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DWITH_ACLE=OFF -DWITH_SANITIZER=Undefined
-            asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross
-            qemu-run: qemu-aarch64
+            packages: qemu qemu-user gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc-dev-arm64-cross
             codecov: ubuntu_gcc_aarch64_no_acle
 
-          - name: Ubuntu GCC AARCH64 No NEON
+          - name: Ubuntu GCC AARCH64 No NEON UBSAN
             os: ubuntu-latest
-            compiler: aarch64-linux-gnu-gcc
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DWITH_NEON=OFF -DWITH_SANITIZER=Undefined
-            asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross
-            qemu-run: qemu-aarch64
+            packages: qemu qemu-user gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc-dev-arm64-cross
             codecov: ubuntu_gcc_aarch64_no_neon
 
-          - name: Ubuntu GCC AARCH64 Compat No Opt
+          - name: Ubuntu GCC AARCH64 Compat No Opt UBSAN
             os: ubuntu-latest
-            compiler: aarch64-linux-gnu-gcc
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined
-            asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross
-            qemu-run: qemu-aarch64
+            packages: qemu qemu-user gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc-dev-arm64-cross
             codecov: ubuntu_gcc_aarch64_compat_no_opt
 
           - name: Ubuntu GCC PPC
             os: ubuntu-latest
-            compiler: powerpc-linux-gnu-gcc
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc.cmake
-            asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-powerpc-linux-gnu libc-dev-powerpc-cross
-            qemu-run: qemu-ppc
-            ldflags: -static
+            packages: qemu qemu-user gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc-dev-powerpc-cross
             codecov: ubuntu_gcc_ppc
 
+          - name: Ubuntu GCC PPC No Power8
+            os: ubuntu-latest
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc.cmake -DWITH_POWER8=OFF
+            packages: qemu qemu-user gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc-dev-powerpc-cross
+            codecov: ubuntu_gcc_ppc_no_power8
+
           - name: Ubuntu GCC PPC64
             os: ubuntu-latest
-            compiler: powerpc64-linux-gnu-gcc
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64.cmake
-            asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-powerpc64-linux-gnu libc-dev-ppc64-cross
-            qemu-run: qemu-ppc64
+            packages: qemu qemu-user gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu libc-dev-ppc64-cross
             ldflags: -static
             codecov: ubuntu_gcc_ppc64
 
           - name: Ubuntu GCC PPC64LE
-            os: ubuntu-latest
-            compiler: powerpc64le-linux-gnu-gcc
+            os: ubuntu-20.04
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le.cmake
-            asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-powerpc64le-linux-gnu libc-dev-ppc64el-cross
-            qemu-run: qemu-ppc64le
+            packages: qemu qemu-user gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu libc-dev-ppc64el-cross
             codecov: ubuntu_gcc_ppc64le
 
           - name: Ubuntu GCC SPARC64
-            os: ubuntu-latest
-            compiler: sparc64-linux-gnu-gcc
+            os: ubuntu-20.04
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-sparc64.cmake
-            asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-sparc64-linux-gnu libc-dev-sparc64-cross
-            qemu-run: qemu-sparc64
+            packages: qemu qemu-user gcc-sparc64-linux-gnu g++-sparc64-linux-gnu libc-dev-sparc64-cross
             ldflags: -static
             codecov: ubuntu_gcc_sparc64
 
-          - name: Ubuntu GCC S390X
+          - name: Ubuntu GCC S390X ASAN
             os: ubuntu-latest
-            compiler: s390x-linux-gnu-gcc
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake -DWITH_SANITIZER=Address
             asan-options: detect_leaks=0
-            packages: qemu qemu-user gcc-s390x-linux-gnu libc-dev-s390x-cross
-            qemu-run: qemu-s390x
+            packages: qemu qemu-user gcc-s390x-linux-gnu g++-s390x-linux-gnu libc-dev-s390x-cross
             ldflags: -static
             codecov: ubuntu_gcc_s390x
 
-          - name: Ubuntu GCC S390X DFLTCC
+          - name: Ubuntu GCC S390X No vectorized CRC32 ASAN
+            os: ubuntu-latest
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake -DWITH_CRC32_VX=OFF -DWITH_SANITIZER=Address
+            asan-options: detect_leaks=0
+            packages: qemu qemu-user gcc-s390x-linux-gnu g++-s390x-linux-gnu libc-dev-s390x-cross
+            ldflags: -static
+            codecov: ubuntu_gcc_s390x_no_crc32
+
+          - name: Ubuntu GCC S390X DFLTCC ASAN
             os: z15
             compiler: gcc
             cmake-args: -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON -DWITH_SANITIZER=Address
             asan-options: detect_leaks=0
-            codecov: ubuntu_gcc_s390x
+            ldflags: -static
+            codecov: ubuntu_gcc_s390x_dfltcc
 
-          - name: Ubuntu GCC S390X DFLTCC Compat
+          - name: Ubuntu GCC S390X DFLTCC Compat UBSAN
             os: z15
             compiler: gcc
             cmake-args: -DZLIB_COMPAT=ON -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON -DWITH_SANITIZER=Undefined
-            asan-options: detect_leaks=0
-            codecov: ubuntu_gcc_s390x
+            ldflags: -static
+            codecov: ubuntu_gcc_s390x_dfltcc_compat
+
+          - name: Ubuntu Clang S390X DFLTCC MSAN
+            os: z15
+            compiler: clang-11
+            cmake-args: -GNinja -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON -DWITH_SANITIZER=Memory
 
           - name: Ubuntu MinGW i686
-            os: ubuntu-latest
-            compiler: i686-w64-mingw32-gcc
+            os: ubuntu-22.04
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mingw-i686.cmake
-            packages: wine32 gcc-mingw-w64
+            packages: wine32 gcc-mingw-w64-i686 g++-mingw-w64-i686 libpcre2-8-0=10.39-3ubuntu0.1 libpcre2-8-0:i386=10.39-3ubuntu0.1 libodbc1=2.3.9-5 libodbc1:i386=2.3.9-5 libwine:i386=6.0.3~repack-1 libgphoto2-6:i386=2.5.27-1build2 libsane:i386=1.1.1-5 libgd3=2.3.0-2ubuntu2 libgd3:i386=2.3.0-2ubuntu2
+            ldflags: -static
             codecov: ubuntu_gcc_mingw_i686
             # Limit parallel test jobs to prevent wine errors
             parallels-jobs: 1
 
           - name: Ubuntu MinGW x86_64
             os: ubuntu-latest
-            compiler: x86_64-w64-mingw32-gcc
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mingw-x86_64.cmake
-            packages: wine-stable gcc-mingw-w64
+            packages: wine-stable gcc-mingw-w64 g++-mingw-w64
+            ldflags: -static
             codecov: ubuntu_gcc_mingw_x86_64
              # Limit parallel test jobs to prevent wine errors
             parallels-jobs: 1
 
-          - name: Ubuntu 18.04 Clang
-            os: ubuntu-18.04
+          - name: Ubuntu 20.04 Clang
+            os: ubuntu-20.04
             compiler: clang-6.0
             packages: clang-6.0
 
           - name: Ubuntu Clang
             os: ubuntu-latest
             compiler: clang-11
-            packages: llvm-11-tools
+            packages: clang-11 llvm-11 llvm-11-tools
             gcov-exec: llvm-cov-11 gcov
             codecov: ubuntu_clang
 
@@ -269,7 +259,7 @@ jobs:
             os: ubuntu-latest
             compiler: clang-11
             cmake-args: -DWITH_INFLATE_STRICT=ON
-            packages: llvm-11-tools
+            packages: clang-11 llvm-11 llvm-11-tools
             gcov-exec: llvm-cov-11 gcov
             codecov: ubuntu_clang_inflate_strict
 
@@ -277,22 +267,30 @@ jobs:
             os: ubuntu-latest
             compiler: clang-11
             cmake-args: -DWITH_INFLATE_ALLOW_INVALID_DIST=ON
-            packages: llvm-11-tools
+            packages: clang-11 llvm-11 llvm-11-tools
             gcov-exec: llvm-cov-11 gcov
             codecov: ubuntu_clang_inflate_allow_invalid_dist
 
+          - name: Ubuntu Clang Reduced Memory
+            os: ubuntu-latest
+            compiler: clang-11
+            cmake-args: -DWITH_REDUCED_MEM=ON
+            packages: clang-11 llvm-11 llvm-11-tools
+            gcov-exec: llvm-cov-11 gcov
+            codecov: ubuntu_clang_reduced_mem
+
           - name: Ubuntu Clang Memory Map
             os: ubuntu-latest
             compiler: clang-11
             cflags: -DUSE_MMAP
-            packages: llvm-11-tools
+            packages: clang-11 llvm-11 llvm-11-tools
             gcov-exec: llvm-cov-11 gcov
             codecov: ubuntu_clang_mmap
 
           - name: Ubuntu Clang Debug
             os: ubuntu-latest
             compiler: clang-11
-            packages: llvm-11-tools
+            packages: clang-11 llvm-11 llvm-11-tools
             gcov-exec: llvm-cov-11 gcov
             codecov: ubuntu_clang_debug
             build-config: Debug
@@ -301,38 +299,60 @@ jobs:
             os: ubuntu-latest
             compiler: clang-11
             cmake-args: -GNinja -DWITH_SANITIZER=Memory
-            packages:  ninja-build llvm-11-tools
+            packages:  ninja-build clang-11 llvm-11-tools
             gcov-exec: llvm-cov-11 gcov
-            cflags: -g3 -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize-memory-track-origins
-            codecov: ubuntu_clang_msan
+            # https://github.com/llvm/llvm-project/issues/55785
+            msan-options: use_sigaltstack=0
 
-          - name: Windows MSVC Win32
+          - name: Windows MSVC 2022 v143 Win32
             os: windows-latest
             compiler: cl
-            cmake-args: -A Win32
+            cmake-args: -G "Visual Studio 17 2022" -A Win32 -T v143
 
-          - name: Windows MSVC Win64
+          - name: Windows MSVC 2022 v143 Win64
             os: windows-latest
             compiler: cl
-            cmake-args: -A x64
+            cmake-args: -G "Visual Studio 17 2022" -A x64 -T v143
 
-          - name: Windows MSVC ARM No Test
+          - name: Windows MSVC 2022 v142 Win32
             os: windows-latest
             compiler: cl
-            cmake-args: -A ARM
+            cmake-args: -G "Visual Studio 17 2022" -A Win32 -T v142
 
-          - name: Windows MSVC ARM64 No Test
+          - name: Windows MSVC 2022 v142 Win64
             os: windows-latest
             compiler: cl
-            cmake-args: -A ARM64
+            cmake-args: -G "Visual Studio 17 2022" -A x64 -T v142
+
+          - name: Windows MSVC 2022 v141 Win32
+            os: windows-latest
+            compiler: cl
+            cmake-args: -G "Visual Studio 17 2022" -A Win32 -T v141
 
-          - name: Windows ClangCl Win32
+          - name: Windows MSVC 2022 v141 Win64
             os: windows-latest
-            cmake-args: -T ClangCl -A Win32
+            compiler: cl
+            cmake-args: -G "Visual Studio 17 2022" -A x64 -T v141
+
+          - name: Windows MSVC 2019 v140 Win32
+            os: windows-2019
+            compiler: cl
+            cmake-args: -G "Visual Studio 16 2019" -A Win32 -T v140
+
+          - name: Windows MSVC 2019 v140 Win64
+            os: windows-2019
+            compiler: cl
+            cmake-args: -G "Visual Studio 16 2019" -A x64 -T v140
+
+          - name: Windows MSVC ARM No Test
+            os: windows-latest
+            compiler: cl
+            cmake-args: -A ARM
 
-          - name: Windows ClangCl Win64
+          - name: Windows MSVC ARM64 No Test
             os: windows-latest
-            cmake-args: -T ClangCl -A x64
+            compiler: cl
+            cmake-args: -A ARM64
 
           - name: Windows GCC
             os: windows-latest
@@ -346,13 +366,13 @@ jobs:
             cmake-args: -G Ninja -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF
             codecov: win64_gcc_compat_no_opt
 
-          - name: macOS Clang
+          - name: macOS Clang ASAN
             os: macos-latest
             compiler: clang
             cmake-args: -DWITH_SANITIZER=Address
             codecov: macos_clang
 
-          - name: macOS GCC
+          - name: macOS GCC UBSAN
             os: macos-latest
             compiler: gcc-10
             cmake-args: -DWITH_SANITIZER=Undefined
@@ -362,10 +382,10 @@ jobs:
 
     steps:
     - name: Checkout repository
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
 
     - name: Checkout test corpora
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
       # Don't test against all corpora with MinGW due to Wine being unable to run parallel jobs
       # without connection timeout. Without parallel jobs test runs using Wine take close to an hour.
       if: contains(matrix.name, 'MinGW') == false
@@ -373,43 +393,53 @@ jobs:
         repository: zlib-ng/corpora
         path: test/data/corpora
 
+    - name: Add repositories (Wine)
+      if: contains(matrix.packages, 'wine')
+      run: sudo dpkg --add-architecture i386
+
+    - name: Add ubuntu mirrors
+      if: runner.os == 'Linux' && matrix.packages
+      run: |
+        # Github Actions caching proxy is at times unreliable
+        echo -e 'http://azure.archive.ubuntu.com/ubuntu\tpriority:1\n' | sudo tee /etc/apt/mirrors.txt
+        curl http://mirrors.ubuntu.com/mirrors.txt | sudo tee --append /etc/apt/mirrors.txt
+        sudo sed -i 's#http://azure.archive.ubuntu.com/ubuntu/#mirror+file:/etc/apt/mirrors.txt#' /etc/apt/sources.list
+
     - name: Install packages (Ubuntu)
       if: runner.os == 'Linux' && matrix.packages
       run: |
-        sudo dpkg --add-architecture i386 # Required for wine32
-        sudo apt-add-repository ppa:ondrej/php -y
         sudo apt-get update
-        sudo apt-get install -y ${{ matrix.packages }}
+        sudo apt-get install -y --allow-downgrades ${{ matrix.packages }}
 
     - name: Install packages (Windows)
       if: runner.os == 'Windows'
       run: |
-        choco install ninja ${{ matrix.packages }} --no-progress
+        # strawberryperl installs /c/Strawberry/c/bin/libstdc++-6.dll, which is incompatible with the mingw64 one.
+        # zlib-ng does not need perl, so simply remove it.
+        choco uninstall --no-progress strawberryperl
+        choco install --no-progress ninja ${{ matrix.packages }}
 
     - name: Install packages (macOS)
       if: runner.os == 'macOS'
-      run: |
-        brew install ninja ${{ matrix.packages }}
+      run: brew install ninja ${{ matrix.packages }}
       env:
         HOMEBREW_NO_INSTALL_CLEANUP: 1
 
-    - name: Install codecov.io tools
-      if: matrix.codecov
-      run: |
-        python -u -m pip install --user codecov
-
     - name: Initialize Wine
       # Prevent parallel test jobs from initializing Wine at the same time
       if: contains(matrix.packages, 'wine')
-      run: |
-        wineboot --init
+      run: wineboot --init
 
     - name: Generate project files
+      shell: bash
       # Shared libraries turned off for qemu ppc* and sparc & reduce code coverage sources
       run: |
-        mkdir ${{ matrix.build-dir || '.not-used' }}
-        cd ${{ matrix.build-dir || '.' }}
-        cmake ${{ matrix.build-src-dir || '.' }} ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=${{ matrix.build-config || 'Release' }} -DBUILD_SHARED_LIBS=OFF -DWITH_FUZZERS=ON -DWITH_CODE_COVERAGE=ON -DWITH_MAINTAINER_WARNINGS=ON
+        cmake -S ${{ matrix.build-src-dir || '.' }} -B ${{ matrix.build-dir || '.' }} ${{ matrix.cmake-args }} \
+          -DCMAKE_BUILD_TYPE=${{ matrix.build-config || 'Release' }} \
+          -DBUILD_SHARED_LIBS=OFF \
+          -DWITH_FUZZERS=ON \
+          -DWITH_MAINTAINER_WARNINGS=ON \
+          ${{ matrix.codecov && '-DWITH_CODE_COVERAGE=ON' }}
       env:
         CC: ${{ matrix.compiler }}
         CFLAGS: ${{ matrix.cflags }}
@@ -417,44 +447,52 @@ jobs:
         CI: true
 
     - name: Compile source code
-      run: |
-        cd ${{ matrix.build-dir || '.' }}
-        cmake --build . --config ${{ matrix.build-config || 'Release' }}
+      run: cmake --build ${{ matrix.build-dir || '.' }} --config ${{ matrix.build-config || 'Release' }}
 
     - name: Run test cases
       # Don't run tests on Windows ARM
       if: runner.os != 'Windows' || contains(matrix.name, 'ARM') == false
-      run: |
-        cd ${{ matrix.build-dir || '.' }}
-        ctest --verbose -C Release --output-on-failure --max-width 120 -j ${{ matrix.parallels-jobs || '6' }}
+      run: ctest --verbose -C Release --output-on-failure --max-width 120 -j ${{ matrix.parallels-jobs || '6' }}
+      working-directory: ${{ matrix.build-dir || '.' }}
       env:
-        ASAN_OPTIONS: ${{ matrix.asan-options || 'verbosity=0' }}:abort_on_error=1
-        MSAN_OPTIONS: ${{ matrix.msan-options || 'verbosity=0' }}:abort_on_error=1
-        TSAN_OPTIONS: ${{ matrix.tsan-options || 'verbosity=0' }}:abort_on_error=1
-        LSAN_OPTIONS: ${{ matrix.lsan-options || 'verbosity=0' }}:abort_on_error=1
-        QEMU_RUN: ${{ matrix.qemu-run }}
+        ASAN_OPTIONS: ${{ matrix.asan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1
+        MSAN_OPTIONS: ${{ matrix.msan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1
+        TSAN_OPTIONS: ${{ matrix.tsan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1
+        LSAN_OPTIONS: ${{ matrix.lsan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1
+        UBSAN_OPTIONS: ${{ matrix.ubsan-options || 'verbosity=0' }}:print_stacktrace=1:abort_on_error=1:halt_on_error=1
 
-    - name: Upload coverage report
-      if: matrix.codecov && ( env.CODECOV_TOKEN_SECRET != '' || github.repository == 'zlib-ng/zlib-ng' )
+    - name: Generate coverage report
+      if: matrix.codecov
       shell: bash
       run: |
-        bash tools/codecov-upload.sh
+        python3 -u -m pip install --user gcovr==5.0
+        python3 -m gcovr -j 3 --verbose \
+          --exclude-unreachable-branches \
+          --gcov-executable "${{ matrix.gcov-exec || 'gcov' }}" \
+          --root ${{ matrix.build-src-dir || '.' }} \
+          --xml --output coverage.xml
+
+    - name: Upload coverage report
+      uses: codecov/codecov-action@v3
+      if: matrix.codecov && (env.CODECOV_TOKEN != '' || github.repository == 'zlib-ng/zlib-ng')
+      with:
+        token: ${{ secrets.CODECOV_TOKEN || 'e4fdf847-f541-4ab1-9d50-3d27e5913906' }}
+        flags: ${{ matrix.codecov }}
+        name: ${{ matrix.name }}
+        directory: ${{ matrix.build-src-dir || '.' }}
+        verbose: true
+        fail_ci_if_error: true
       env:
-        # Codecov does not yet support GitHub Actions
-        CODECOV_TOKEN_SECRET: "${{secrets.CODECOV_TOKEN}}"
-        CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN || 'e4fdf847-f541-4ab1-9d50-3d27e5913906' }}"
-        CODECOV_FLAGS: "${{ matrix.codecov }}"
-        CODECOV_NAME:  "${{ matrix.name }}"
-        CODECOV_EXEC:  "${{ matrix.gcov-exec || 'gcov' }}"
-        CODECOV_DIR:   "${{ matrix.build-dir || '.' }}"
+        CODECOV_TOKEN: "${{secrets.CODECOV_TOKEN}}"
 
     - name: Upload build errors
-      uses: actions/upload-artifact@v2
+      uses: actions/upload-artifact@v3
       if: failure()
       with:
         name: ${{ matrix.name }} (cmake)
         path: |
-          ${{ matrix.build-dir || '.' }}/CMakeFiles/CMakeOutput.log
-          ${{ matrix.build-dir || '.' }}/CMakeFiles/CMakeError.log
-          ${{ matrix.build-dir || '.' }}/Testing/Temporary/*
+          **/CMakeFiles/CMakeOutput.log
+          **/CMakeFiles/CMakeError.log
+          **/Testing/Temporary/*
+          coverage.xml
         retention-days: 30
index b827c6af0a96fc4b7f1312142dfdcd4def32790d..6fa2e3c695b9a25047a15019166245af852ea855 100644 (file)
@@ -1,7 +1,7 @@
-name: CI Configure
+name: Configure
 on: [push, pull_request]
 jobs:
-  ci-configure:
+  configure:
     name: ${{ matrix.name }}
     runs-on: ${{ matrix.os }}
     strategy:
@@ -13,8 +13,8 @@ jobs:
             compiler: gcc
             configure-args: --warn
 
-          - name: Ubuntu 18.04 GCC
-            os: ubuntu-18.04
+          - name: Ubuntu 20.04 GCC
+            os: ubuntu-20.04
             compiler: gcc
             configure-args: --warn
 
@@ -36,7 +36,6 @@ jobs:
             configure-args: --warn
             chost: arm-linux-gnueabi
             packages: qemu qemu-user gcc-arm-linux-gnueabi libc-dev-armel-cross
-            qemu-run: qemu-arm
 
           - name: Ubuntu GCC ARM SF Compat No Opt
             os: ubuntu-latest
@@ -44,15 +43,6 @@ jobs:
             configure-args: --warn --zlib-compat --without-optimizations --without-new-strategies
             chost: arm-linux-gnueabi
             packages: qemu qemu-user gcc-arm-linux-gnueabi libc-dev-armel-cross
-            qemu-run: qemu-arm
-
-          - name: Ubuntu GCC ARM HF
-            os: ubuntu-latest
-            compiler: arm-linux-gnueabihf-gcc
-            configure-args: --warn
-            chost: arm-linux-gnueabihf
-            packages: qemu qemu-user gcc-arm-linux-gnueabihf libc-dev-armel-cross
-            qemu-run: qemu-arm
 
           - name: Ubuntu GCC ARM HF No ACLE
             os: ubuntu-latest
@@ -60,15 +50,13 @@ jobs:
             configure-args: --warn --without-acle
             chost: arm-linux-gnueabihf
             packages: qemu qemu-user gcc-arm-linux-gnueabihf libc-dev-armel-cross
-            qemu-run: qemu-arm
 
           - name: Ubuntu GCC ARM HF No NEON
             os: ubuntu-latest
             compiler: arm-linux-gnueabihf-gcc
-            configure-args: --warn --without-neon
+            configure-args: --warn --without-neon --without-acle
             chost: arm-linux-gnueabihf
             packages: qemu qemu-user gcc-arm-linux-gnueabihf libc-dev-armel-cross
-            qemu-run: qemu-arm
 
           - name: Ubuntu GCC ARM HF Compat No Opt
             os: ubuntu-latest
@@ -76,7 +64,6 @@ jobs:
             configure-args: --warn --zlib-compat --without-optimizations --without-new-strategies
             chost: arm-linux-gnueabihf
             packages: qemu qemu-user gcc-arm-linux-gnueabihf libc-dev-armel-cross
-            qemu-run: qemu-arm
 
           - name: Ubuntu GCC AARCH64
             os: ubuntu-latest
@@ -84,7 +71,6 @@ jobs:
             configure-args: --warn
             chost: aarch64-linux-gnu
             packages: qemu qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross
-            qemu-run: qemu-aarch64
 
           - name: Ubuntu GCC AARCH64 No ACLE
             os: ubuntu-latest
@@ -92,7 +78,6 @@ jobs:
             configure-args: --warn --without-acle
             chost: aarch64-linux-gnu
             packages: qemu qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross
-            qemu-run: qemu-aarch64
 
           - name: Ubuntu GCC AARCH64 No NEON
             os: ubuntu-latest
@@ -100,7 +85,6 @@ jobs:
             configure-args: --warn --without-neon
             chost: aarch64-linux-gnu
             packages: qemu qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross
-            qemu-run: qemu-aarch64
 
           - name: Ubuntu GCC AARCH64 Compat No Opt
             os: ubuntu-latest
@@ -108,7 +92,6 @@ jobs:
             configure-args: --warn --zlib-compat --without-optimizations --without-new-strategies
             chost: aarch64-linux-gnu
             packages: qemu qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross
-            qemu-run: qemu-aarch64
 
           - name: Ubuntu GCC PPC
             os: ubuntu-latest
@@ -116,7 +99,6 @@ jobs:
             configure-args: --warn --static
             chost: powerpc-linux-gnu
             packages: qemu qemu-user gcc-powerpc-linux-gnu libc-dev-powerpc-cross
-            qemu-run: qemu-ppc
             cflags: -static
             ldflags: -static
 
@@ -126,7 +108,6 @@ jobs:
             configure-args: --warn --static
             chost: powerpc-linux-gnu
             packages: qemu qemu-user gcc-powerpc64-linux-gnu libc-dev-ppc64-cross
-            qemu-run: qemu-ppc64
             cflags: -static
             ldflags: -static
 
@@ -136,7 +117,6 @@ jobs:
             configure-args: --warn
             chost: powerpc64le-linux-gnu
             packages: qemu qemu-user gcc-powerpc64le-linux-gnu libc-dev-ppc64el-cross
-            qemu-run: qemu-ppc64le
 
           - name: Ubuntu GCC S390X
             os: ubuntu-latest
@@ -144,7 +124,6 @@ jobs:
             configure-args: --warn --static
             chost: s390x-linux-gnu
             packages: qemu qemu-user gcc-s390x-linux-gnu libc-dev-s390x-cross
-            qemu-run: qemu-s390x
             cflags: -static
             ldflags: -static
 
@@ -160,12 +139,20 @@ jobs:
 
           - name: macOS GCC
             os: macOS-latest
-            compiler: gcc-9
+            compiler: gcc-11
             configure-args: --warn
 
     steps:
     - name: Checkout repository
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
+
+    - name: Add ubuntu mirrors
+      if: runner.os == 'Linux' && matrix.packages
+      run: |
+        # Github Actions caching proxy is at times unreliable
+        echo -e 'http://azure.archive.ubuntu.com/ubuntu\tpriority:1\n' | sudo tee /etc/apt/mirrors.txt
+        curl http://mirrors.ubuntu.com/mirrors.txt | sudo tee --append /etc/apt/mirrors.txt
+        sudo sed -i 's#http://azure.archive.ubuntu.com/ubuntu/#mirror+file:/etc/apt/mirrors.txt#' /etc/apt/sources.list
 
     - name: Install packages (Ubuntu)
       if: runner.os == 'Linux' && matrix.packages
@@ -177,31 +164,29 @@ jobs:
       run: |
         mkdir ${{ matrix.build-dir || '.not-used' }}
         cd ${{ matrix.build-dir || '.' }}
-        ${{ matrix.build-src-dir || '.' }}/configure ${{ matrix.configure-args }}
+        ${{ matrix.configure-prefix }} ${{ matrix.build-src-dir || '.' }}/configure ${{ matrix.configure-args }}
       env:
         CC: ${{ matrix.compiler }}
         CFLAGS: ${{ matrix.cflags }}
         LDFLAGS: ${{ matrix.ldflags }}
         CHOST: ${{ matrix.chost }}
+        EMU_RUN: ${{ matrix.emu-run }}
         CI: true
 
     - name: Compile source code
-      run: |
-        cd ${{ matrix.build-dir || '.' }}
-        make -j2
+      run: make -j2
+      working-directory: ${{ matrix.build-dir }}
 
     - name: Run test cases
-      run: |
-        cd ${{ matrix.build-dir || '.' }}
-        make test
-      env:
-        QEMU_RUN: ${{ matrix.qemu-run }}
+      run: make test
+      working-directory: ${{ matrix.build-dir }}
 
     - name: Upload build errors
-      uses: actions/upload-artifact@v2
+      uses: actions/upload-artifact@v3
       if: failure()
       with:
         name: ${{ matrix.name }} (configure)
         path: |
+          **/Makefile
           ${{ matrix.build-dir || '.' }}/configure.log
         retention-days: 30
diff --git a/.github/workflows/fuzz.yml b/.github/workflows/fuzz.yml
deleted file mode 100644 (file)
index e7ddaea..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-name: CI Fuzz
-on: [pull_request]
-jobs:
-  Fuzzing:
-    runs-on: ubuntu-latest
-    steps:
-    - name: Build Fuzzers
-      uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
-      with:
-        oss-fuzz-project-name: 'zlib-ng'
-        dry-run: false
-    - name: Run Fuzzers
-      uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
-      with:
-        oss-fuzz-project-name: 'zlib-ng'
-        fuzz-seconds: 600
-        dry-run: false
-    - name: Upload Crash
-      uses: actions/upload-artifact@v1
-      if: failure()
-      with:
-        name: artifacts
-        path: ./out/artifacts
index b3d989f7be303ae6f5c99b7ebde0d5ccd9dec4c4..9118a96c81de2336634b2179b676fdf602f8d0ba 100644 (file)
@@ -1,46 +1,51 @@
-name: CI Libpng
-on: [pull_request]
+name: Libpng
+on: [push, pull_request]
 jobs:
-  pngtest:
+  libpng:
     name: Ubuntu Clang
     runs-on: ubuntu-latest
-
     steps:
     - name: Checkout repository (zlib-ng)
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
 
     - name: Generate project files (zlib-ng)
       run: |
-        cmake . -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DZLIB_COMPAT=ON -DZLIB_ENABLE_TESTS=OFF
+        cmake . \
+          -DCMAKE_BUILD_TYPE=Release \
+          -DBUILD_SHARED_LIBS=OFF \
+          -DZLIB_COMPAT=ON \
+          -DZLIB_ENABLE_TESTS=OFF
       env:
         CC: clang
         CFLAGS: -fPIC
         CI: true
 
     - name: Compile source code (zlib-ng)
-      run: |
-        cmake --build . --config Release
+      run: cmake --build . --config Release
 
     - name: Checkout repository (libpng)
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
       with:
         repository: glennrp/libpng
         path: libpng
 
     - name: Generate project files (libpng)
       run: |
-        cd libpng
-        cmake . -DCMAKE_BUILD_TYPE=Release -DPNG_TESTS=ON -DPNG_STATIC=OFF -DZLIB_INCLUDE_DIR=.. -DZLIB_LIBRARY=$PWD/../libz.a
+        cmake . \
+          -DCMAKE_BUILD_TYPE=Release \
+          -DPNG_TESTS=ON \
+          -DPNG_STATIC=OFF \
+          -DZLIB_INCLUDE_DIR=.. \
+          -DZLIB_LIBRARY=$PWD/../libz.a
+      working-directory: libpng
       env:
         CC: clang
         CI: true
 
     - name: Compile source code (libpng)
-      run: |
-        cd libpng
-        cmake --build . --config Release
+      run: cmake --build . --config Release
+      working-directory: libpng
 
     - name: Run test cases (libpng)
-      run: |
-        cd libpng
-        ctest -C Release --output-on-failure --max-width 120
+      run: ctest -C Release --output-on-failure --max-width 120
+      working-directory: libpng
index cf1989866e4ccbf0ffa9001dd8bfcaae7bc5a77b..38e66909333fa75dc990b37b695322c92277f83f 100644 (file)
@@ -1,7 +1,7 @@
-name: CI NMake
+name: NMake
 on: [push, pull_request]
 jobs:
-  ci-cmake:
+  nmake:
     name: ${{ matrix.name }}
     runs-on: ${{ matrix.os }}
     strategy:
@@ -9,40 +9,60 @@ jobs:
       matrix:
         include:
           - name: Windows NMake x86
-            os: windows-latest
+            os: windows-2022
             makefile: win32/Makefile.msc
-            vc-vars: x86
+            arch: x86
+
+          - name: Windows NMake x64 compat
+            os: windows-2022
+            makefile: win32/Makefile.msc
+            arch: x86_amd64
+            additional-args: ZLIB_COMPAT=yes
+
+          - name: Windows NMake x64 Symbol Prefix
+            os: windows-2022
+            makefile: win32/Makefile.msc
+            arch: x86_amd64
+            additional-args: SYMBOL_PREFIX=zTest_
+
+          - name: Windows NMake x64 Symbol Prefix Compat
+            os: windows-2022
+            makefile: win32/Makefile.msc
+            arch: x86_amd64
+            additional-args: ZLIB_COMPAT=yes SYMBOL_PREFIX=zTest_
 
           - name: Windows NMake x64
-            os: windows-latest
+            os: windows-2022
             makefile: win32/Makefile.msc
-            vc-vars: x86_amd64
+            arch: x86_amd64
 
           - name: Windows NMake ARM No Test
-            os: windows-latest
+            os: windows-2022
             makefile: win32/Makefile.arm
-            vc-vars: x86_arm
+            arch: x86_arm
 
           - name: Windows NMake ARM64 No Test
-            os: windows-latest
+            os: windows-2022
             makefile: win32/Makefile.a64
-            vc-vars: x86_arm64
+            arch: x86_arm64
 
     steps:
     - name: Checkout repository
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
+
+    - name: Setup development environment
+      uses: ilammy/msvc-dev-cmd@v1.12.1
+      with:
+        arch: ${{ matrix.arch }}
 
     - name: Compile source code
       shell: cmd
-      run: |
-        call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.vc-vars }}
-        nmake -f ${{ matrix.makefile }}
+      run: nmake -f ${{ matrix.makefile }} ${{ matrix.additional-args }}
 
     - name: Run test cases
       shell: cmd
       # Don't run tests on Windows ARM
-      if: contains(matrix.vc-vars, 'arm') == false
+      if: contains(matrix.arch, 'arm') == false
       run: |
-        call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{ matrix.vc-vars }}
-        nmake -f ${{ matrix.makefile }} test
-        nmake -f ${{ matrix.makefile }} testdll
+        nmake -f ${{ matrix.makefile }} ${{ matrix.additional-args }} test
+        nmake -f ${{ matrix.makefile }} ${{ matrix.additional-args }} testdll
index 8260c82fb7663b080e3b2718d3759c1e2794d1e7..e90cb63ab27ca080ff4cc8da406bce9ae6c46c46 100644 (file)
@@ -1,7 +1,7 @@
-name: CI Pigz
+name: Pigz
 on: [push, pull_request]
 jobs:
-  ci-cmake:
+  pigz:
     name: ${{ matrix.name }}
     runs-on: ${{ matrix.os }}
     strategy:
@@ -13,62 +13,75 @@ jobs:
             compiler: gcc
             codecov: ubuntu_gcc_pigz
 
+          - name: Ubuntu GCC Symbol Prefix
+            os: ubuntu-latest
+            compiler: gcc
+            codecov: ubuntu_gcc_pigz
+            cmake-args: -DZLIB_SYMBOL_PREFIX=zTest_
+
           - name: Ubuntu Clang
             os: ubuntu-latest
             compiler: clang
-            packages: llvm-11-tools
+            packages: llvm-11 llvm-11-tools
             gcov-exec: llvm-cov-11 gcov
             codecov: ubuntu_clang_pigz
 
           - name: Ubuntu Clang No Optim
             os: ubuntu-latest
             compiler: clang
-            packages: llvm-11-tools
+            packages: llvm-11 llvm-11-tools
             gcov-exec: llvm-cov-11 gcov
             codecov: ubuntu_clang_pigz_no_optim
             cmake-args: -DWITH_OPTIM=OFF
 
+            # Use v2.6 due to NOTHREADS bug https://github.com/madler/pigz/issues/97
           - name: Ubuntu Clang No Threads
             os: ubuntu-latest
             compiler: clang
-            packages: llvm-11-tools
+            packages: llvm-11 llvm-11-tools
             gcov-exec: llvm-cov-11 gcov
             codecov: ubuntu_clang_pigz_no_threads
-            cmake-args: -DWITH_THREADS=OFF
+            cmake-args: -DWITH_THREADS=OFF -DPIGZ_VERSION=v2.6
 
           - name: Ubuntu GCC AARCH64
             os: ubuntu-latest
-            compiler: aarch64-linux-gnu-gcc
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=../../cmake/toolchain-aarch64.cmake
             packages: qemu qemu-user gcc-aarch64-linux-gnu libc-dev-arm64-cross
-            qemu-run: qemu-aarch64
             codecov: ubuntu_gcc_pigz_aarch64
 
     steps:
     - name: Checkout repository
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
 
     - name: Checkout test corpora
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
       with:
         repository: zlib-ng/corpora
         path: test/data/corpora
 
+    - name: Add ubuntu mirrors
+      if: runner.os == 'Linux' && matrix.packages
+      run: |
+        # Github Actions caching proxy is at times unreliable
+        echo -e 'http://azure.archive.ubuntu.com/ubuntu\tpriority:1\n' | sudo tee /etc/apt/mirrors.txt
+        curl http://mirrors.ubuntu.com/mirrors.txt | sudo tee --append /etc/apt/mirrors.txt
+        sudo sed -i 's#http://azure.archive.ubuntu.com/ubuntu/#mirror+file:/etc/apt/mirrors.txt#' /etc/apt/sources.list
+
     - name: Install packages (Ubuntu)
       if: runner.os == 'Linux' && matrix.packages
       run: |
         sudo apt-get update
         sudo apt-get install -y ${{ matrix.packages }}
 
-    - name: Install codecov.io tools
-      if: matrix.codecov
-      run: |
-        python -u -m pip install codecov
-
     - name: Generate project files
       run: |
-        cd test/pigz
-        cmake ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=${{ matrix.build-config || 'Release' }} -DBUILD_SHARED_LIBS=OFF -DZLIB_ROOT=../.. -DWITH_CODE_COVERAGE=ON -DWITH_MAINTAINER_WARNINGS=ON
+        cmake ${{ matrix.cmake-args }} \
+          -DCMAKE_BUILD_TYPE=${{ matrix.build-config || 'Release' }} \
+          -DBUILD_SHARED_LIBS=OFF \
+          -DZLIB_ROOT=../.. \
+          -DWITH_CODE_COVERAGE=ON \
+          -DWITH_MAINTAINER_WARNINGS=ON
+      working-directory: test/pigz
       env:
         CC: ${{ matrix.compiler }}
         CFLAGS: ${{ matrix.cflags }}
@@ -76,31 +89,37 @@ jobs:
         CI: true
 
     - name: Compile source code
-      run: |
-        cd test/pigz
-        cmake --build . --config ${{ matrix.build-config || 'Release' }}
+      run: cmake --build . --config ${{ matrix.build-config || 'Release' }}
+      working-directory: test/pigz
 
     - name: Run test cases
+      run: ctest --verbose -C Release --output-on-failure --max-width 120 -j ${{ matrix.parallels-jobs || '2' }}
+      working-directory: test/pigz
+
+    - name: Generate coverage report
+      if: matrix.codecov
       run: |
-        cd test/pigz
-        ctest --verbose -C Release --output-on-failure --max-width 120 -j ${{ matrix.parallels-jobs || '2' }}
+        python3 -u -m pip install --user gcovr==5.0
+        python3 -m gcovr -j 3 --verbose \
+          --exclude-unreachable-branches \
+          --gcov-executable "${{ matrix.gcov-exec || 'gcov' }}" \
+          --root . \
+          --xml --output coverage.xml
 
     - name: Upload coverage report
-      if: matrix.codecov && ( env.CODECOV_TOKEN_SECRET != '' || github.repository == 'zlib-ng/zlib-ng' )
-      shell: bash
-      run: |
-        bash tools/codecov-upload.sh
+      uses: codecov/codecov-action@v3
+      if: matrix.codecov && (env.CODECOV_TOKEN != '' || github.repository == 'zlib-ng/zlib-ng')
+      with:
+        token: ${{ secrets.CODECOV_TOKEN || 'e4fdf847-f541-4ab1-9d50-3d27e5913906' }}
+        flags: ${{ matrix.codecov }}
+        name: ${{ matrix.name }}
+        verbose: true
+        fail_ci_if_error: true
       env:
-        # Codecov does not yet support GitHub Actions
-        CODECOV_TOKEN_SECRET: "${{secrets.CODECOV_TOKEN}}"
-        CODECOV_TOKEN: "${{ secrets.CODECOV_TOKEN || 'e4fdf847-f541-4ab1-9d50-3d27e5913906' }}"
-        CODECOV_FLAGS: "${{ matrix.codecov }}"
-        CODECOV_NAME:  "${{ matrix.name }}"
-        CODECOV_EXEC:  "${{ matrix.gcov-exec || 'gcov' }}"
-        CODECOV_DIR:   "."
+        CODECOV_TOKEN: ${{secrets.CODECOV_TOKEN}}
 
     - name: Upload build errors
-      uses: actions/upload-artifact@v2
+      uses: actions/upload-artifact@v3
       if: failure()
       with:
         name: ${{ matrix.name }} (cmake)
@@ -108,4 +127,5 @@ jobs:
           **/CMakeFiles/CMakeOutput.log
           **/CMakeFiles/CMakeError.log
           **/Testing/Temporary/*
+          coverage.xml
         retention-days: 30
index dde91d372f9746e21e7e63f9fe689429245b1f8e..a335c1f04f8c9ee5bbd5aef333deea355d481a0d 100644 (file)
@@ -1,7 +1,7 @@
-name: CI Pkgcheck
+name: Package Check
 on: [push, pull_request]
 jobs:
-  ci-pkgcheck:
+  pkgcheck:
     name: ${{ matrix.name }}
     runs-on: ${{ matrix.os }}
     strategy:
@@ -15,63 +15,73 @@ jobs:
           - name: Ubuntu GCC -m32
             os: ubuntu-latest
             compiler: gcc
-            packages: gcc-multilib
+            packages: gcc-multilib g++-multilib
             cmake-args: -DCMAKE_C_FLAGS=-m32
             cflags: -m32
             ldflags: -m32
 
-          - name: Ubuntu GCC ARM HF
+          - name: Ubuntu GCC ARM SF
             os: ubuntu-latest
-            chost: arm-linux-gnueabihf
-            compiler: arm-linux-gnueabihf-gcc
-            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DCMAKE_C_COMPILER_TARGET=arm-linux-gnueabihf
-            packages: qemu gcc-arm-linux-gnueabihf libc6-dev-armhf-cross
+            chost: arm-linux-gnueabi
+            compiler: arm-linux-gnueabi-gcc
+            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake
+            packages: qemu gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc-dev-armel-cross
 
           - name: Ubuntu GCC AARCH64
             os: ubuntu-latest
             chost: aarch64-linux-gnu
             compiler: aarch64-linux-gnu-gcc
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake
-            packages: qemu gcc-aarch64-linux-gnu libc6-dev-arm64-cross
+            packages: qemu gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross
 
           - name: Ubuntu GCC PPC
             os: ubuntu-latest
             chost: powerpc-linux-gnu
             compiler: powerpc-linux-gnu-gcc
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc.cmake
-            packages: qemu gcc-powerpc-linux-gnu libc6-dev-powerpc-cross
+            packages: qemu gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc6-dev-powerpc-cross
 
           - name: Ubuntu GCC PPC64LE
             os: ubuntu-latest
             chost: powerpc64le-linux-gnu
             compiler: powerpc64le-linux-gnu-gcc
             cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le.cmake
-            packages: qemu gcc-powerpc64le-linux-gnu libc6-dev-ppc64el-cross
+            packages: qemu gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu libc6-dev-ppc64el-cross
 
           - name: macOS Clang
-            os: macOS-latest
+            os: macOS-11
             compiler: clang
 
           - name: macOS Clang Native
-            os: macOS-latest
+            os: macOS-11
             compiler: clang
             cmake-args: -DWITH_NATIVE_INSTRUCTIONS=ON
             configure-args: --native
 
     steps:
     - name: Checkout repository
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
+
+    - name: Add ubuntu mirrors
+      if: runner.os == 'Linux' && matrix.packages
+      run: |
+        # Github Actions caching proxy is at times unreliable
+        echo -e 'http://azure.archive.ubuntu.com/ubuntu\tpriority:1\n' | sudo tee /etc/apt/mirrors.txt
+        curl http://mirrors.ubuntu.com/mirrors.txt | sudo tee --append /etc/apt/mirrors.txt
+        sudo sed -i 's#http://azure.archive.ubuntu.com/ubuntu/#mirror+file:/etc/apt/mirrors.txt#' /etc/apt/sources.list
 
     - name: Install packages (Ubuntu)
       if: runner.os == 'Linux'
       run: |
         sudo apt-get update
-        sudo apt-get install -y --no-install-recommends abigail-tools ninja-build diffoscope ${{ matrix.packages }}
+        sudo apt-get install -y --no-install-recommends ${{ matrix.packages }} \
+          abigail-tools \
+          diffoscope \
+          ninja-build
 
     - name: Install packages (macOS)
       if: runner.os == 'macOS'
-      run: |
-        brew install ninja diffoscope ${{ matrix.packages }}
+      run: brew install ninja diffoscope ${{ matrix.packages }}
       env:
         HOMEBREW_NO_INSTALL_CLEANUP: 1
 
@@ -85,8 +95,7 @@ jobs:
         xcode-version: '11.7.0'
 
     - name: Compare builds
-      run: |
-        sh test/pkgcheck.sh
+      run: sh test/pkgcheck.sh
       env:
         CC: ${{ matrix.compiler }}
         CFLAGS: ${{ matrix.cflags }}
@@ -96,8 +105,7 @@ jobs:
         LDFLAGS: ${{ matrix.ldflags }}
 
     - name: Compare builds (compat)
-      run: |
-        sh test/pkgcheck.sh --zlib-compat
+      run: sh test/pkgcheck.sh --zlib-compat
       env:
         CC: ${{ matrix.compiler }}
         CFLAGS: ${{ matrix.cflags }}
@@ -109,8 +117,7 @@ jobs:
     - name: Check ABI
       # macOS runner does not contain abigail
       if: runner.os != 'macOS'
-      run: |
-        sh test/abicheck.sh --refresh_if
+      run: sh test/abicheck.sh --refresh-if
       env:
         CC: ${{ matrix.compiler }}
         CFLAGS: ${{ matrix.cflags }}
@@ -122,8 +129,7 @@ jobs:
     - name: Check ABI (compat)
       # macOS runner does not contain abigail
       if: runner.os != 'macOS'
-      run: |
-        sh test/abicheck.sh --zlib-compat --refresh_if
+      run: sh test/abicheck.sh --zlib-compat --refresh-if
       env:
         CC: ${{ matrix.compiler }}
         CFLAGS: ${{ matrix.cflags }}
@@ -133,11 +139,12 @@ jobs:
         LDFLAGS: ${{ matrix.ldflags }}
 
     - name: Upload build errors
-      uses: actions/upload-artifact@v2
+      uses: actions/upload-artifact@v3
       if: failure()
       with:
         name: ${{ matrix.name }}
         path: |
+          **/*.abi
           btmp1/configure.log
           btmp1/CMakeFiles/CMakeOutput.log
           btmp1/CMakeFiles/CMakeError.log
index e52d6a6d8c10f45c10e7ddb4e9d24bdb37952880..768cf48bcb77ff496ce1b2f604af115730564904 100644 (file)
@@ -1,10 +1,10 @@
-name: CI Release
+name: Release
 on:
   push:
     tags:
     - '*'
 jobs:
-  ci-cmake:
+  release:
     name: ${{ matrix.name }}
     runs-on: ${{ matrix.os }}
     strategy:
@@ -61,31 +61,34 @@ jobs:
 
     steps:
     - name: Checkout repository
-      uses: actions/checkout@v2
+      uses: actions/checkout@v3
 
     - name: Set environment variables
       shell: bash
       run:  echo "tag=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
 
     - name: Generate project files
+      shell: bash
       run: |
-        cmake . ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=Release -DZLIB_ENABLE_TESTS=ON -DCMAKE_INSTALL_PREFIX=out -DINSTALL_UTILS=ON
+        cmake . ${{ matrix.cmake-args }} \
+          -DCMAKE_BUILD_TYPE=Release \
+          -DZLIB_ENABLE_TESTS=ON \
+          -DCMAKE_INSTALL_PREFIX=out \
+          -DINSTALL_UTILS=ON
       env:
         CC: ${{ matrix.compiler }}
         CI: true
 
     - name: Compile source code
-      run: |
-        cmake --build . --config Release --target install
+      run: cmake --build . --config Release --target install
 
     - name: Package release (Windows)
       if: runner.os == 'Windows'
-      run: |
-        cd out
-        7z a -tzip ../zlib-ng-${{ matrix.deploy-name }}.zip bin include lib ../LICENSE.md ../PORTING.md ../README.md
+      run: 7z a -tzip ../zlib-ng-${{ matrix.deploy-name }}.zip bin include lib ../LICENSE.md ../PORTING.md ../README.md
+      working-directory: out
 
     - name: Upload release (Windows)
-      uses: svenstaro/upload-release-action@v1-release
+      uses: svenstaro/upload-release-action@v2
       if: runner.os == 'Windows'
       with:
         asset_name: zlib-ng-${{ matrix.deploy-name }}.zip
index 43082cf263d3f77a79b4e3ebc19979bdb93845ea..0d5bc8643028741697f4e6c440cfd1aac5aa2ee7 100644 (file)
@@ -13,6 +13,7 @@
 #   WITH_CODE_COVERAGE  - Enable code coverage reporting
 #   WITH_THREADS        - Enable threading support
 #   PIGZ_ENABLE_TESTS   - Enable adding unit tests
+#   PIGZ_VERSION        - Set the version of pigz to build
 #   ZLIB_ROOT           - Path to the zlib source directory
 #   PTHREADS4W_ROOT     - Path to pthreads4w source directory on Windows.
 #                         If not specified then threading will be disabled.
@@ -28,6 +29,7 @@ include(../../cmake/detect-coverage.cmake)
 option(WITH_CODE_COVERAGE "Enable code coverage reporting" OFF)
 option(WITH_THREADS "Enable threading support" ON)
 option(PIGZ_ENABLE_TESTS "Build unit tests" ON)
+option(PIGZ_VERSION "Set the version of pigz to build" "")
 
 project(pigz LANGUAGES C)
 
@@ -54,8 +56,14 @@ elseif(WIN32)
 endif()
 
 # Fetch pigz source code from official repository
+if(PIGZ_VERSION STREQUAL "")
+    set(PIGZ_TAG master)
+else()
+    set(PIGZ_TAG ${PIGZ_VERSION})
+endif()
 FetchContent_Declare(pigz
-    GIT_REPOSITORY https://github.com/madler/pigz.git)
+    GIT_REPOSITORY https://github.com/madler/pigz.git
+    GIT_TAG ${PIGZ_TAG})
 FetchContent_MakeAvailable(pigz)
 FetchContent_GetProperties(pigz)