Skip to content

Commit 3bb082d

Browse files
Merge pull request #800 from laurynas-biveinis/coverage-gh-action
Split off coverage testing job out of the main build job
2 parents 33c74aa + 0e1b575 commit 3bb082d

2 files changed

Lines changed: 90 additions & 51 deletions

File tree

.github/workflows/build.yml

Lines changed: 8 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ env:
1313
DEFAULT_SANITIZE_THREAD: OFF
1414
DEFAULT_SANITIZE_UB: OFF
1515
DEFAULT_STATIC_ANALYSIS: OFF
16-
DEFAULT_COVERAGE: OFF
1716
DEFAULT_AVX2: ON
1817

1918
permissions: {}
@@ -28,7 +27,6 @@ jobs:
2827
SANITIZE_THREAD: ${{matrix.SANITIZE_THREAD}}
2928
SANITIZE_UB: ${{matrix.SANITIZE_UB}}
3029
STATIC_ANALYSIS: ${{matrix.STATIC_ANALYSIS}}
31-
COVERAGE: ${{matrix.COVERAGE}}
3230
COMPILER: ${{matrix.COMPILER}}
3331
CPPLINT: ${{matrix.CPPLINT}}
3432
CPPCHECK: ${{matrix.CPPCHECK}}
@@ -269,20 +267,6 @@ jobs:
269267
SANITIZE_UB: ON
270268
AVX2: OFF
271269

272-
- name: Debug coverage
273-
os: ubuntu-22.04
274-
BUILD_TYPE: Debug
275-
COMPILER: gcc
276-
COVERAGE: ON
277-
AVX2: OFF
278-
279-
- name: Release coverage
280-
os: ubuntu-22.04
281-
BUILD_TYPE: Release
282-
COMPILER: gcc
283-
COVERAGE: ON
284-
AVX2: OFF
285-
286270
steps:
287271
- uses: actions/checkout@v5
288272
with:
@@ -335,12 +319,6 @@ jobs:
335319
runner.os == 'Linux' && env.COMPILER == 'clang'
336320
&& env.STATIC_ANALYSIS != 'ON'
337321
338-
- name: Set up dependencies for Linux (coverage)
339-
run: |
340-
sudo apt-get install lcov cpanminus
341-
sudo cpanm install JSON
342-
if: runner.os == 'Linux' && env.COVERAGE == 'ON'
343-
344322
- name: Set up dependencies for macOS (common)
345323
run: |
346324
brew install boost include-what-you-use python-setuptools
@@ -360,7 +338,6 @@ jobs:
360338
SANITIZE_THREAD="${SANITIZE_THREAD:-$DEFAULT_SANITIZE_THREAD}"
361339
SANITIZE_UB="${SANITIZE_UB:-$DEFAULT_SANITIZE_UB}"
362340
STATIC_ANALYSIS="${STATIC_ANALYSIS:-$DEFAULT_STATIC_ANALYSIS}"
363-
COVERAGE="${COVERAGE:-$DEFAULT_COVERAGE}"
364341
AVX2="${AVX2:-$DEFAULT_AVX2}"
365342
export PATH="$HOME/.local/bin:$PATH"
366343
if [[ -n "$BUILD_TYPE" ]]; then
@@ -369,12 +346,8 @@ jobs:
369346
CBT=""
370347
fi
371348
if [[ $COMPILER == "gcc" ]]; then
372-
V=13
373-
if [[ $COVERAGE == "ON" ]]; then
374-
EXTRA_CMAKE_ARGS=("-DGCOV_PATH=/usr/bin/gcov-$V")
375-
else
376-
EXTRA_CMAKE_ARGS=()
377-
fi
349+
V=13
350+
EXTRA_CMAKE_ARGS=()
378351
export CC=gcc-$V
379352
export CXX=g++-$V
380353
elif [[ $COMPILER == "clang" ]]; then
@@ -410,7 +383,7 @@ jobs:
410383
"-DSANITIZE_ADDRESS=${SANITIZE_ADDRESS}" \
411384
"-DSANITIZE_THREAD=${SANITIZE_THREAD}" \
412385
"-DSANITIZE_UB=${SANITIZE_UB}" \
413-
"-DSTATIC_ANALYSIS=${STATIC_ANALYSIS}" "-DCOVERAGE=${COVERAGE}" \
386+
"-DSTATIC_ANALYSIS=${STATIC_ANALYSIS}" \
414387
"-DAVX2=${AVX2}" "${EXTRA_CMAKE_ARGS[@]}"
415388
CMAKE_EXIT_CODE=$?
416389
set -e
@@ -438,40 +411,24 @@ jobs:
438411
- name: Correctness test
439412
working-directory: ${{github.workspace}}/build
440413
run: ctest -j3 -V
441-
if: env.STATIC_ANALYSIS != 'ON' && env.COVERAGE != 'ON'
414+
if: env.STATIC_ANALYSIS != 'ON'
442415

443416
- name: Benchmark correctness test
444417
working-directory: ${{github.workspace}}/build
445418
run: make -k quick_benchmarks
446-
if: env.STATIC_ANALYSIS != 'ON' && env.COVERAGE != 'ON'
419+
if: env.STATIC_ANALYSIS != 'ON'
447420

448421
- name: DeepState 1 minute fuzzing
449422
working-directory: ${{github.workspace}}/build
450423
run: make -j2 -k deepstate_1m
451424
if: >
452-
env.STATIC_ANALYSIS != 'ON' && env.COVERAGE != 'ON'
453-
&& (runner.os != 'macOS'
425+
env.STATIC_ANALYSIS != 'ON' && (runner.os != 'macOS'
454426
|| (env.SANITIZE_ADDRESS == 'OFF' && env.SANITIZE_THREAD == 'OFF'))
455427
456428
- name: DeepState libfuzzer 1 minute fuzzing
457429
working-directory: ${{github.workspace}}/build
458430
run: make -j2 -k deepstate_lf_1m
459431
if: >
460-
env.STATIC_ANALYSIS != 'ON' && env.COVERAGE != 'ON'
461-
&& env.COMPILER == 'clang' && env.BUILD_TYPE != 'Release'
432+
env.STATIC_ANALYSIS != 'ON' && env.COMPILER == 'clang'
433+
&& env.BUILD_TYPE != 'Release'
462434
&& env.SANITIZE_THREAD != 'ON'
463-
464-
- name: Gather coverage data
465-
working-directory: ${{github.workspace}}/build
466-
run: |
467-
make -j3 -k coverage
468-
if: env.COVERAGE == 'ON'
469-
470-
- name: Upload coverage data
471-
uses: codecov/codecov-action@v5 # zizmor: ignore[unpinned-uses]
472-
with:
473-
token: ${{ secrets.CODECOV_TOKEN }}
474-
flags: ${{matrix.BUILD_TYPE}}
475-
fail_ci_if_error: true
476-
directory: ${{github.workspace}}/build
477-
if: env.COVERAGE == 'ON'

.github/workflows/coverage.yml

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
---
2+
name: coverage
3+
4+
on:
5+
push:
6+
branches:
7+
- master
8+
pull_request:
9+
10+
permissions: {}
11+
12+
jobs:
13+
build:
14+
runs-on: ubuntu-22.04
15+
16+
env:
17+
BUILD_TYPE: ${{matrix.BUILD_TYPE}}
18+
19+
strategy:
20+
fail-fast: false
21+
matrix:
22+
include:
23+
- name: Debug
24+
BUILD_TYPE: Debug
25+
26+
- name: Release
27+
BUILD_TYPE: Release
28+
29+
steps:
30+
- uses: actions/checkout@v5
31+
with:
32+
submodules: true
33+
persist-credentials: false
34+
35+
- name: Setup dependencies
36+
run: |
37+
sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
38+
sudo apt-get update
39+
sudo apt-get install -y libboost-dev libc6-dev-i386 g++-13 \
40+
g++-13-multilib lcov cpanminus
41+
sudo cpanm install JSON
42+
43+
- name: Configure CMake
44+
# Use a bash shell so we can use the same syntax for environment
45+
# variable access regardless of the host operating system
46+
shell: bash
47+
run: |
48+
export PATH="$HOME/.local/bin:$PATH"
49+
V=13
50+
export CC=gcc-$V
51+
export CXX=g++-$V
52+
set +e
53+
cmake -B build "$GITHUB_WORKSPACE" "-DCMAKE_BUILD_TYPE=$BUILD_TYPE" \
54+
-DSTANDALONE=ON -DMAINTAINER_MODE=ON -DCOVERAGE=ON \
55+
"-DGCOV_PATH=/usr/bin/gcov-$V"
56+
CMAKE_EXIT_CODE=$?
57+
set -e
58+
if [ $CMAKE_EXIT_CODE -ne 0 ]; then
59+
if [ -f build/CMakeFiles/CMakeConfigureLog.yaml ]; then
60+
echo "::group::CMakeConfigureLog.yaml"
61+
cat build/CMakeFiles/CMakeConfigureLog.yaml
62+
echo "::endgroup::"
63+
fi
64+
exit $CMAKE_EXIT_CODE
65+
fi
66+
67+
- name: Build
68+
working-directory: ${{github.workspace}}/build
69+
run: make -j3 -k
70+
71+
- name: Gather coverage data
72+
working-directory: ${{github.workspace}}/build
73+
run: |
74+
make -j3 -k coverage
75+
76+
- name: Upload coverage data
77+
uses: codecov/codecov-action@v5 # zizmor: ignore[unpinned-uses]
78+
with:
79+
token: ${{secrets.CODECOV_TOKEN}}
80+
flags: ${{matrix.BUILD_TYPE}}
81+
fail_ci_if_error: true
82+
directory: ${{github.workspace}}/build

0 commit comments

Comments
 (0)