diff options
author | Hans Kristian Rosbach <hk-git@circlestorm.org> | 2023-02-08 15:52:07 +0100 |
---|---|---|
committer | Hans Kristian Rosbach <hk-github@circlestorm.org> | 2023-03-17 21:27:56 +0100 |
commit | d0c38d16145860a092f6933b616b26a3afd49b57 (patch) | |
tree | d480ff09ac6744dceee396aa5247131ccc9795be | |
parent | b0f2b37c36bede7fcc1c752cba0b002091dc197c (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.yml | 62 | ||||
-rw-r--r-- | .github/workflows/cmake.yml | 392 | ||||
-rw-r--r-- | .github/workflows/configure.yml | 61 | ||||
-rw-r--r-- | .github/workflows/fuzz.yml | 23 | ||||
-rw-r--r-- | .github/workflows/libpng.yml | 39 | ||||
-rw-r--r-- | .github/workflows/nmake.yml | 56 | ||||
-rw-r--r-- | .github/workflows/pigz.yml | 88 | ||||
-rw-r--r-- | .github/workflows/pkgcheck.yml | 59 | ||||
-rw-r--r-- | .github/workflows/release.yml | 23 | ||||
-rw-r--r-- | test/pigz/CMakeLists.txt | 10 |
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) |