@@ -21,22 +21,50 @@ jobs:
2121 - name : Setup dependencies
2222 run : |
2323 sudo apt-get update
24- sudo apt-get install -y ninja-build libspdlog-dev gcc-11 g++-11
24+ sudo apt-get install -y ninja-build libspdlog-dev gcc-11 g++-11 lcov python3-pip
25+ python3 -m pip install --user anybadge
2526
2627 - name : Set up CMake
2728 uses : jwlawson/actions-setup-cmake@v1.14
2829 with :
2930 cmake-version : 3.20.0
3031
31- - name : Quick build test
32+ - name : Quick build test (with coverage)
3233 run : |
33- cmake -B build -G Ninja -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11 -DCMAKE_BUILD_TYPE=Release -DWITH_UNIT_TEST=ON
34+ cmake -B build -G Ninja \
35+ -DCMAKE_C_COMPILER=gcc-11 \
36+ -DCMAKE_CXX_COMPILER=g++-11 \
37+ -DCMAKE_BUILD_TYPE=Debug \
38+ -DWITH_UNIT_TEST=ON \
39+ -DCMAKE_CXX_FLAGS="--coverage" \
40+ -DCMAKE_C_FLAGS="--coverage"
3441 cmake --build build --parallel 4
3542
3643 - name : Quick test run
3744 working-directory : build
3845 run : ctest --output-on-failure
3946
47+ - name : Generate coverage report
48+ run : |
49+ lcov --capture --directory build --output-file coverage.badge.info
50+ lcov --remove coverage.badge.info '/usr/*' '*/test/*' '*/build/*' --output-file coverage.badge.info
51+ echo "Coverage summary:" && lcov --summary coverage.badge.info
52+ PCT=$(lcov --summary coverage.badge.info | awk '/lines/ {gsub("%","", $2); print $2}')
53+ echo "CODE_COVERAGE=$PCT" >> $GITHUB_ENV
54+
55+ - name : Generate coverage badge
56+ env :
57+ PATH : ${{ env.HOME }}/.local/bin:${{ env.PATH }}
58+ run : |
59+ anybadge --value=${CODE_COVERAGE} --file=coverage.svg --label="coverage" --suffix="%" \
60+ 0=red 50=orange 70=yellow 80=yellowgreen 90=green
61+
62+ - name : Upload coverage badge artifact
63+ uses : actions/upload-artifact@v4
64+ with :
65+ name : coverage-badge
66+ path : coverage.svg
67+
4068 - name : Generate badge data
4169 run : |
4270 echo "BUILD_STATUS=passing" >> $GITHUB_ENV
0 commit comments