• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1name: CI CMake
2on: [push, pull_request]
3jobs:
4  ci-cmake:
5    name: ${{ matrix.name }}
6    runs-on: ${{ matrix.os }}
7    strategy:
8      fail-fast: false
9      matrix:
10        include:
11          - name: Ubuntu 18.04 GCC
12            os: ubuntu-18.04
13            compiler: gcc
14            cxx-compiler: g++
15
16          - name: Ubuntu GCC ASAN
17            os: ubuntu-latest
18            compiler: gcc
19            cxx-compiler: g++
20            cmake-args: -DWITH_SANITIZER=Address
21            codecov: ubuntu_gcc
22
23          - name: Ubuntu GCC Benchmark
24            os: ubuntu-latest
25            compiler: gcc
26            cxx-compiler: g++
27            cmake-args: -DWITH_BENCHMARKS=ON
28            codecov: ubuntu_gcc_benchmark
29
30          - name: Ubuntu GCC Symbol Prefix
31            os: ubuntu-latest
32            compiler: gcc
33            cxx-compiler: g++
34            cmake-args: -DZLIB_SYMBOL_PREFIX=zTest_
35            codecov: ubuntu_gcc_sprefix
36
37          - name: Ubuntu GCC Compat Symbol Prefix
38            os: ubuntu-latest
39            compiler: gcc
40            cxx-compiler: g++
41            cmake-args: -DZLIB_COMPAT=ON -DZLIB_SYMBOL_PREFIX=zTest_
42            codecov: ubuntu_gcc_compat_sprefix
43
44          - name: Ubuntu GCC -O3 OSB
45            os: ubuntu-latest
46            compiler: gcc
47            cxx-compiler: g++
48            build-dir: ../build
49            build-src-dir: ../zlib-ng
50            codecov: ubuntu_gcc_osb
51            cflags: -O3
52
53          - name: Ubuntu GCC -O1 No Unaligned UBSAN
54            os: ubuntu-latest
55            compiler: gcc
56            cxx-compiler: g++
57            cmake-args: -DWITH_UNALIGNED=OFF -DWITH_SANITIZER=Undefined
58            codecov: ubuntu_gcc_o1
59            cflags: -O1
60
61          - name: Ubuntu GCC 32-bit
62            os: ubuntu-latest
63            compiler: gcc
64            cxx-compiler: g++
65            cmake-args: -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32 -DCMAKE_SHARED_LINKER_FLAGS=-m32 -DCMAKE_EXE_LINKER_FLAGS=-m32
66            packages: gcc-multilib g++-multilib
67            codecov: ubuntu_gcc_m32
68
69          - name: Ubuntu GCC No CTZLL
70            os: ubuntu-latest
71            compiler: gcc
72            cxx-compiler: g++
73            cmake-args: -DWITH_OPTIM=OFF -DHAVE_BUILTIN_CTZLL=OFF
74            codecov: ubuntu_gcc_no_ctzll
75
76          - name: Ubuntu GCC No CTZ
77            os: ubuntu-latest
78            compiler: gcc
79            cxx-compiler: g++
80            cmake-args: -DWITH_OPTIM=OFF -DHAVE_BUILTIN_CTZLL=OFF -DHAVE_BUILTIN_CTZ=OFF
81            codecov: ubuntu_gcc_no_ctz
82
83          - name: Ubuntu GCC Link Zlib
84            os: ubuntu-latest
85            compiler: gcc
86            cxx-compiler: g++
87            cmake-args: -DZLIB_DUAL_LINK=ON
88
89          - name: Ubuntu GCC No AVX2 UBSAN
90            os: ubuntu-latest
91            compiler: gcc
92            cxx-compiler: g++
93            cmake-args: -DWITH_AVX2=OFF -DWITH_SANITIZER=Undefined
94            codecov: ubuntu_gcc_no_avx2
95
96          - name: Ubuntu GCC No SSE2 UBSAN
97            os: ubuntu-latest
98            compiler: gcc
99            cxx-compiler: g++
100            cmake-args: -DWITH_SSE2=OFF -DWITH_SANITIZER=Undefined
101            codecov: ubuntu_gcc_no_sse2
102
103          - name: Ubuntu GCC No SSE4 UBSAN
104            os: ubuntu-latest
105            compiler: gcc
106            cxx-compiler: g++
107            cmake-args: -DWITH_SSE4=OFF -DWITH_SANITIZER=Undefined
108            codecov: ubuntu_gcc_no_sse4
109
110          - name: Ubuntu GCC No PCLMULQDQ UBSAN
111            os: ubuntu-latest
112            compiler: gcc
113            cxx-compiler: g++
114            cmake-args: -DWITH_PCLMULQDQ=OFF -DWITH_SANITIZER=Undefined
115            codecov: ubuntu_gcc_no_pclmulqdq
116
117          - name: Ubuntu GCC Compat No Opt ASAN
118            os: ubuntu-latest
119            compiler: gcc
120            cxx-compiler: g++
121            cmake-args: -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Address
122            codecov: ubuntu_gcc_compat_no_opt
123            cflags: -DNOT_TWEAK_COMPILER
124
125          - name: Ubuntu GCC ARM SF ASAN
126            os: ubuntu-latest
127            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DWITH_SANITIZER=Address
128            asan-options: detect_leaks=0
129            packages: qemu qemu-user gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc-dev-armel-cross
130            codecov: ubuntu_gcc_armsf
131
132          - name: Ubuntu GCC ARM SF Compat No Opt UBSAN
133            os: ubuntu-latest
134            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-arm.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined
135            packages: qemu qemu-user gcc-arm-linux-gnueabi g++-arm-linux-gnueabi libc-dev-armel-cross
136            codecov: ubuntu_gcc_armsf_compat_no_opt
137
138          - name: Ubuntu GCC ARM HF ASAN
139            os: ubuntu-latest
140            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DWITH_SANITIZER=Address
141            asan-options: detect_leaks=0
142            packages: qemu qemu-user gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc-dev-armel-cross
143            codecov: ubuntu_gcc_armhf
144
145          - name: Ubuntu GCC ARM HF No ACLE ASAN
146            os: ubuntu-latest
147            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DWITH_ACLE=OFF -DWITH_SANITIZER=Address
148            asan-options: detect_leaks=0
149            packages: qemu qemu-user gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc-dev-armel-cross
150            codecov: ubuntu_gcc_armhf_no_acle
151
152          - name: Ubuntu GCC ARM HF No NEON ASAN
153            os: ubuntu-latest
154            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DWITH_NEON=OFF -DWITH_SANITIZER=Address
155            asan-options: detect_leaks=0
156            packages: qemu qemu-user gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc-dev-armel-cross
157            codecov: ubuntu_gcc_armhf_no_neon
158
159          - name: Ubuntu GCC ARM HF Compat No Opt UBSAN
160            os: ubuntu-latest
161            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-armhf.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined
162            packages: qemu qemu-user gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libc-dev-armel-cross
163            codecov: ubuntu_gcc_armhf_compat_no_opt
164
165          - name: Ubuntu GCC AARCH64 ASAN
166            os: ubuntu-latest
167            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DWITH_SANITIZER=Address
168            asan-options: detect_leaks=0
169            packages: qemu qemu-user gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc-dev-arm64-cross
170            codecov: ubuntu_gcc_aarch64
171
172          - name: Ubuntu GCC AARCH64 No ACLE UBSAN
173            os: ubuntu-latest
174            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DWITH_ACLE=OFF -DWITH_SANITIZER=Undefined
175            packages: qemu qemu-user gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc-dev-arm64-cross
176            codecov: ubuntu_gcc_aarch64_no_acle
177
178          - name: Ubuntu GCC AARCH64 No NEON UBSAN
179            os: ubuntu-latest
180            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DWITH_NEON=OFF -DWITH_SANITIZER=Undefined
181            packages: qemu qemu-user gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc-dev-arm64-cross
182            codecov: ubuntu_gcc_aarch64_no_neon
183
184          - name: Ubuntu GCC AARCH64 Compat No Opt UBSAN
185            os: ubuntu-latest
186            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-aarch64.cmake -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF -DWITH_SANITIZER=Undefined
187            packages: qemu qemu-user gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc-dev-arm64-cross
188            codecov: ubuntu_gcc_aarch64_compat_no_opt
189
190          - name: Ubuntu GCC PPC
191            os: ubuntu-latest
192            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc.cmake
193            packages: qemu qemu-user gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc-dev-powerpc-cross
194            codecov: ubuntu_gcc_ppc
195
196          - name: Ubuntu GCC PPC No Power8
197            os: ubuntu-latest
198            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc.cmake -DWITH_POWER8=OFF
199            packages: qemu qemu-user gcc-powerpc-linux-gnu g++-powerpc-linux-gnu libc-dev-powerpc-cross
200            codecov: ubuntu_gcc_ppc_no_power8
201
202          - name: Ubuntu GCC PPC64
203            os: ubuntu-latest
204            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64.cmake
205            packages: qemu qemu-user gcc-powerpc64-linux-gnu g++-powerpc64-linux-gnu libc-dev-ppc64-cross
206            ldflags: -static
207            codecov: ubuntu_gcc_ppc64
208
209          - name: Ubuntu GCC PPC64LE
210            os: ubuntu-latest
211            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-powerpc64le.cmake
212            packages: qemu qemu-user gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu libc-dev-ppc64el-cross
213            codecov: ubuntu_gcc_ppc64le
214
215          - name: Ubuntu GCC SPARC64
216            os: ubuntu-latest
217            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-sparc64.cmake
218            packages: qemu qemu-user gcc-sparc64-linux-gnu g++-sparc64-linux-gnu libc-dev-sparc64-cross
219            ldflags: -static
220            codecov: ubuntu_gcc_sparc64
221
222          - name: Ubuntu GCC S390X ASAN
223            os: ubuntu-latest
224            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake -DWITH_SANITIZER=Address
225            asan-options: detect_leaks=0
226            packages: qemu qemu-user gcc-s390x-linux-gnu g++-s390x-linux-gnu libc-dev-s390x-cross
227            ldflags: -static
228            codecov: ubuntu_gcc_s390x
229
230          - name: Ubuntu GCC S390X No vectorized CRC32 ASAN
231            os: ubuntu-latest
232            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-s390x.cmake -DWITH_CRC32_VX=OFF -DWITH_SANITIZER=Address
233            asan-options: detect_leaks=0
234            packages: qemu qemu-user gcc-s390x-linux-gnu g++-s390x-linux-gnu libc-dev-s390x-cross
235            ldflags: -static
236            codecov: ubuntu_gcc_s390x_no_crc32
237
238          - name: Ubuntu GCC S390X DFLTCC ASAN
239            os: z15
240            compiler: gcc
241            cxx-compiler: g++
242            cmake-args: -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON -DWITH_SANITIZER=Address
243            asan-options: detect_leaks=0
244            ldflags: -static
245            codecov: ubuntu_gcc_s390x_dfltcc
246
247          - name: Ubuntu GCC S390X DFLTCC Compat UBSAN
248            os: z15
249            compiler: gcc
250            cxx-compiler: g++
251            cmake-args: -DZLIB_COMPAT=ON -DWITH_DFLTCC_DEFLATE=ON -DWITH_DFLTCC_INFLATE=ON -DWITH_SANITIZER=Undefined
252            ldflags: -static
253            codecov: ubuntu_gcc_s390x_dfltcc_compat
254
255          - name: Ubuntu MinGW i686
256            os: ubuntu-latest
257            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mingw-i686.cmake
258            packages: wine32 gcc-mingw-w64-i686 g++-mingw-w64-i686 libpcre2-8-0=10.34-7 libpcre2-8-0:i386=10.34-7 libodbc1=2.3.6-0.1build1 libodbc1:i386=2.3.6-0.1build1
259            ldflags: -static
260            codecov: ubuntu_gcc_mingw_i686
261            # Limit parallel test jobs to prevent wine errors
262            parallels-jobs: 1
263
264          - name: Ubuntu MinGW x86_64
265            os: ubuntu-latest
266            cmake-args: -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-mingw-x86_64.cmake
267            packages: wine-stable gcc-mingw-w64 g++-mingw-w64
268            ldflags: -static
269            codecov: ubuntu_gcc_mingw_x86_64
270             # Limit parallel test jobs to prevent wine errors
271            parallels-jobs: 1
272
273          - name: Ubuntu 18.04 Clang
274            os: ubuntu-18.04
275            compiler: clang-6.0
276            cxx-compiler: clang++-6.0
277            packages: clang-6.0
278
279          - name: Ubuntu Clang
280            os: ubuntu-latest
281            compiler: clang-11
282            cxx-compiler: clang++-11
283            packages: llvm-11-tools
284            gcov-exec: llvm-cov-11 gcov
285            codecov: ubuntu_clang
286
287          - name: Ubuntu Clang Inflate Strict
288            os: ubuntu-latest
289            compiler: clang-11
290            cxx-compiler: clang++-11
291            cmake-args: -DWITH_INFLATE_STRICT=ON
292            packages: llvm-11-tools
293            gcov-exec: llvm-cov-11 gcov
294            codecov: ubuntu_clang_inflate_strict
295
296          - name: Ubuntu Clang Inflate Allow Invalid Dist
297            os: ubuntu-latest
298            compiler: clang-11
299            cxx-compiler: clang++-11
300            cmake-args: -DWITH_INFLATE_ALLOW_INVALID_DIST=ON
301            packages: llvm-11-tools
302            gcov-exec: llvm-cov-11 gcov
303            codecov: ubuntu_clang_inflate_allow_invalid_dist
304
305          - name: Ubuntu Clang Reduced Memory
306            os: ubuntu-latest
307            compiler: clang-11
308            cxx-compiler: clang++-11
309            cmake-args: -DWITH_REDUCED_MEM=ON
310            packages: llvm-11-tools
311            gcov-exec: llvm-cov-11 gcov
312            codecov: ubuntu_clang_reduced_mem
313
314          - name: Ubuntu Clang Memory Map
315            os: ubuntu-latest
316            compiler: clang-11
317            cxx-compiler: clang++-11
318            cflags: -DUSE_MMAP
319            packages: llvm-11-tools
320            gcov-exec: llvm-cov-11 gcov
321            codecov: ubuntu_clang_mmap
322
323          - name: Ubuntu Clang Debug
324            os: ubuntu-latest
325            compiler: clang-11
326            cxx-compiler: clang++-11
327            packages: llvm-11-tools
328            gcov-exec: llvm-cov-11 gcov
329            codecov: ubuntu_clang_debug
330            build-config: Debug
331
332          - name: Ubuntu Clang MSAN
333            os: ubuntu-latest
334            compiler: clang-11
335            cxx-compiler: clang++-11
336            cmake-args: -GNinja -DWITH_SANITIZER=Memory
337            packages:  ninja-build llvm-11-tools
338            gcov-exec: llvm-cov-11 gcov
339
340          - name: Windows MSVC Win32
341            os: windows-latest
342            compiler: cl
343            cmake-args: -A Win32
344
345          - name: Windows MSVC Win64
346            os: windows-latest
347            compiler: cl
348            cmake-args: -A x64
349
350          - name: Windows MSVC ARM No Test
351            os: windows-latest
352            compiler: cl
353            cmake-args: -A ARM
354
355          - name: Windows MSVC ARM64 No Test
356            os: windows-latest
357            compiler: cl
358            cmake-args: -A ARM64
359
360          - name: Windows ClangCl Win32
361            os: windows-latest
362            cmake-args: -T ClangCl -A Win32
363
364          - name: Windows ClangCl Win64
365            os: windows-latest
366            cmake-args: -T ClangCl -A x64
367
368          - name: Windows GCC
369            os: windows-latest
370            compiler: gcc
371            cxx-compiler: g++
372            cmake-args: -G Ninja
373            codecov: win64_gcc
374
375          - name: Windows GCC Compat No Opt
376            os: windows-latest
377            compiler: gcc
378            cxx-compiler: g++
379            cmake-args: -G Ninja -DZLIB_COMPAT=ON -DWITH_NEW_STRATEGIES=OFF -DWITH_OPTIM=OFF
380            codecov: win64_gcc_compat_no_opt
381
382          - name: macOS Clang ASAN
383            os: macos-latest
384            compiler: clang
385            cxx-compiler: clang++
386            cmake-args: -DWITH_SANITIZER=Address
387            codecov: macos_clang
388
389          - name: macOS GCC UBSAN
390            os: macos-latest
391            compiler: gcc-10
392            cxx-compiler: g++-10
393            cmake-args: -DWITH_SANITIZER=Undefined
394            packages: gcc@10
395            gcov-exec: gcov-10
396            codecov: macos_gcc
397
398    steps:
399    - name: Checkout repository
400      uses: actions/checkout@v2
401
402    - name: Checkout test corpora
403      uses: actions/checkout@v2
404      # Don't test against all corpora with MinGW due to Wine being unable to run parallel jobs
405      # without connection timeout. Without parallel jobs test runs using Wine take close to an hour.
406      if: contains(matrix.name, 'MinGW') == false
407      with:
408        repository: zlib-ng/corpora
409        path: test/data/corpora
410
411    - name: Add repositories (Wine)
412      if: contains(matrix.packages, 'wine')
413      run: |
414        sudo dpkg --add-architecture i386
415
416    - name: Install packages (Ubuntu)
417      if: runner.os == 'Linux' && matrix.packages
418      run: |
419        sudo apt-get update
420        sudo apt-get install -y --allow-downgrades ${{ matrix.packages }}
421
422    - name: Install packages (Windows)
423      if: runner.os == 'Windows'
424      run: |
425        choco install ninja ${{ matrix.packages }} --no-progress
426
427    - name: Install packages (macOS)
428      if: runner.os == 'macOS'
429      run: |
430        brew install ninja ${{ matrix.packages }}
431      env:
432        HOMEBREW_NO_INSTALL_CLEANUP: 1
433
434    - name: Initialize Wine
435      # Prevent parallel test jobs from initializing Wine at the same time
436      if: contains(matrix.packages, 'wine')
437      run: |
438        wineboot --init
439
440    - name: Compile LLVM C++ libraries (MSAN)
441      if: contains(matrix.name, 'MSAN')
442      run: |
443        git clone --depth=1 https://github.com/llvm/llvm-project --single-branch --branch llvmorg-11.0.0
444        cd llvm-project
445        mkdir build
446        cd build
447        cmake -G Ninja ../llvm -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="libcxx;libcxxabi" -DLLVM_USE_SANITIZER=MemoryWithOrigins -DLLVM_LIBC_ENABLE_LINTING=OFF
448        cmake --build . -- cxx cxxabi
449        echo "LLVM_BUILD_DIR=`pwd`" >> $GITHUB_ENV
450      env:
451        CC: ${{ matrix.compiler }}
452        CXX: ${{ matrix.cxx-compiler }}
453
454    - name: Generate project files
455      # Shared libraries turned off for qemu ppc* and sparc & reduce code coverage sources
456      run: |
457        mkdir ${{ matrix.build-dir || '.not-used' }}
458        cd ${{ matrix.build-dir || '.' }}
459        cmake ${{ matrix.build-src-dir || '.' }} ${{ matrix.cmake-args }} -DCMAKE_BUILD_TYPE=${{ matrix.build-config || 'Release' }} -DBUILD_SHARED_LIBS=OFF -DWITH_FUZZERS=ON ${{ matrix.codecov && '-DWITH_CODE_COVERAGE=ON' }} -DWITH_MAINTAINER_WARNINGS=ON
460      env:
461        CC: ${{ matrix.compiler }}
462        CXX: ${{ matrix.cxx-compiler }}
463        CFLAGS: ${{ matrix.cflags }}
464        LDFLAGS: ${{ matrix.ldflags }}
465        CI: true
466
467    - name: Compile source code
468      run: |
469        cd ${{ matrix.build-dir || '.' }}
470        cmake --build . --config ${{ matrix.build-config || 'Release' }}
471
472    - name: Run test cases
473      # Don't run tests on Windows ARM
474      if: runner.os != 'Windows' || contains(matrix.name, 'ARM') == false
475      run: |
476        cd ${{ matrix.build-dir || '.' }}
477        ctest --verbose -C Release --output-on-failure --max-width 120 -j ${{ matrix.parallels-jobs || '6' }}
478      env:
479        ASAN_OPTIONS: ${{ matrix.asan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1
480        MSAN_OPTIONS: ${{ matrix.msan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1
481        TSAN_OPTIONS: ${{ matrix.tsan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1
482        LSAN_OPTIONS: ${{ matrix.lsan-options || 'verbosity=0' }}:abort_on_error=1:halt_on_error=1
483        UBSAN_OPTIONS: ${{ matrix.ubsan-options || 'verbosity=0' }}:print_stacktrace=1:abort_on_error=1:halt_on_error=1
484
485    - name: Generate coverage report
486      if: matrix.codecov
487      shell: bash
488      run: |
489        python3 -u -m pip install --user gcovr==5.0
490        python3 -m gcovr --exclude-unreachable-branches --gcov-executable "${{ matrix.gcov-exec || 'gcov' }}" --root ${{ matrix.build-src-dir || '.' }} --xml --output coverage.xml -j 3 --verbose
491
492    - name: Upload coverage report
493      uses: codecov/codecov-action@v2
494      if: matrix.codecov && (env.CODECOV_TOKEN != '' || github.repository == 'zlib-ng/zlib-ng')
495      with:
496        token: ${{ secrets.CODECOV_TOKEN || 'e4fdf847-f541-4ab1-9d50-3d27e5913906' }}
497        flags: ${{ matrix.codecov }}
498        name: ${{ matrix.name }}
499        directory: ${{ matrix.build-src-dir || '.' }}
500        verbose: true
501        fail_ci_if_error: true
502      env:
503        CODECOV_TOKEN: "${{secrets.CODECOV_TOKEN}}"
504
505    - name: Upload build errors
506      uses: actions/upload-artifact@v2
507      if: failure()
508      with:
509        name: ${{ matrix.name }} (cmake)
510        path: |
511          **/CMakeFiles/CMakeOutput.log
512          **/CMakeFiles/CMakeError.log
513          **/Testing/Temporary/*
514          coverage.xml
515        retention-days: 30
516