summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Kristian Rosbach <hk-git@circlestorm.org>2023-02-08 15:52:07 +0100
committerHans Kristian Rosbach <hk-github@circlestorm.org>2023-03-17 21:27:56 +0100
commitd0c38d16145860a092f6933b616b26a3afd49b57 (patch)
treed480ff09ac6744dceee396aa5247131ccc9795be
parentb0f2b37c36bede7fcc1c752cba0b002091dc197c (diff)
Backport latest CI workflows from 'develop'.
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
-rw-r--r--.github/workflows/analyze.yml62
-rw-r--r--.github/workflows/cmake.yml392
-rw-r--r--.github/workflows/configure.yml61
-rw-r--r--.github/workflows/fuzz.yml23
-rw-r--r--.github/workflows/libpng.yml39
-rw-r--r--.github/workflows/nmake.yml56
-rw-r--r--.github/workflows/pigz.yml88
-rw-r--r--.github/workflows/pkgcheck.yml59
-rw-r--r--.github/workflows/release.yml23
-rw-r--r--test/pigz/CMakeLists.txt10
10 files changed, 455 insertions, 358 deletions
diff --git a/.github/workflows/analyze.yml b/.github/workflows/analyze.yml
index d9d2555..17333d2 100644
--- a/.github/workflows/analyze.yml
+++ b/.github/workflows/analyze.yml
@@ -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
diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml
index f94273f..987e35f 100644
--- a/.github/workflows/cmake.yml
+++ b/.github/workflows/cmake.yml
@@ -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
diff --git a/.github/workflows/configure.yml b/.github/workflows/configure.yml
index b827c6a..6fa2e3c 100644
--- a/.github/workflows/configure.yml
+++ b/.github/workflows/configure.yml
@@ -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
index e7ddaea..0000000
--- a/.github/workflows/fuzz.yml
+++ /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
diff --git a/.github/workflows/libpng.yml b/.github/workflows/libpng.yml
index b3d989f..9118a96 100644
--- a/.github/workflows/libpng.yml
+++ b/.github/workflows/libpng.yml
@@ -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
diff --git a/.github/workflows/nmake.yml b/.github/workflows/nmake.yml
index cf19898..38e6690 100644
--- a/.github/workflows/nmake.yml
+++ b/.github/workflows/nmake.yml
@@ -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
diff --git a/.github/workflows/pigz.yml b/.github/workflows/pigz.yml
index 8260c82..e90cb63 100644
--- a/.github/workflows/pigz.yml
+++ b/.github/workflows/pigz.yml
@@ -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
diff --git a/.github/workflows/pkgcheck.yml b/.github/workflows/pkgcheck.yml
index dde91d3..a335c1f 100644
--- a/.github/workflows/pkgcheck.yml
+++ b/.github/workflows/pkgcheck.yml
@@ -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
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index e52d6a6..768cf48 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -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
diff --git a/test/pigz/CMakeLists.txt b/test/pigz/CMakeLists.txt
index 43082cf..0d5bc86 100644
--- a/test/pigz/CMakeLists.txt
+++ b/test/pigz/CMakeLists.txt
@@ -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)