From c5cefad04fc58da8878cbd3b7af3ced7858e325e Mon Sep 17 00:00:00 2001 From: Tian Liao Date: Thu, 25 Jun 2026 23:21:18 +0800 Subject: [PATCH 1/5] code coverage job --- .github/workflows/bvt-codecoverage.yml | 53 ++++++++++++++++++++++++++ .github/workflows/pipeline-ci.yml | 5 +++ CMakePresets.json | 42 ++++++++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 .github/workflows/bvt-codecoverage.yml diff --git a/.github/workflows/bvt-codecoverage.yml b/.github/workflows/bvt-codecoverage.yml new file mode 100644 index 0000000..a679933 --- /dev/null +++ b/.github/workflows/bvt-codecoverage.yml @@ -0,0 +1,53 @@ +on: + workflow_call: + workflow_dispatch: + +jobs: + bvt-codecoverage: + runs-on: ubuntu-24.04 + container: gcc:16 + steps: + - uses: actions/checkout@v7 + + - name: Install CMake, Ninja, and gcovr + run: | + apt-get update + apt-get install -y cmake ninja-build gcovr + + - name: Check toolchain versions + run: | + g++ --version + gcov --version + cmake --version + ninja --version + gcovr --version + + - name: Build and run tests with code coverage instrumentation + run: | + cmake --preset coverage -DCMAKE_CXX_STANDARD=23 -DPROXY_BUILD_MODULES=TRUE + cmake --build --preset coverage -j + ctest --preset coverage -j + + - name: Build and run freestanding tests with code coverage instrumentation + run: | + cmake --preset coverage-freestanding -DCMAKE_CXX_STANDARD=23 -DPROXY_BUILD_MODULES=TRUE + cmake --build --preset coverage-freestanding -j + ctest --preset coverage-freestanding -j + + - name: Generate code coverage report + run: | + mkdir -p build/coverage/report + gcovr --root . \ + --filter 'include/proxy/' \ + --gcov-executable gcov \ + --exclude-unreachable-branches \ + --print-summary \ + --txt build/coverage/report/coverage.txt \ + --xml-pretty --output build/coverage/report/coverage.xml \ + --html-details build/coverage/report/coverage.html + + - name: Upload code coverage report + uses: actions/upload-artifact@v7 + with: + name: coverage-report + path: build/coverage/report/ diff --git a/.github/workflows/pipeline-ci.yml b/.github/workflows/pipeline-ci.yml index 164203c..46e3702 100644 --- a/.github/workflows/pipeline-ci.yml +++ b/.github/workflows/pipeline-ci.yml @@ -48,6 +48,11 @@ jobs: name: Run BVT for compatibility if: github.event_name != 'push' || github.repository == 'ngcpp/proxy' + run-bvt-codecoverage: + uses: ./.github/workflows/bvt-codecoverage.yml + name: Run BVT for code coverage + if: github.event_name != 'push' || github.repository == 'ngcpp/proxy' + report: uses: ./.github/workflows/bvt-report.yml name: Generate report diff --git a/CMakePresets.json b/CMakePresets.json index e5c7ddc..d393028 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -24,6 +24,26 @@ "cacheVariables": { "PROXY_FREESTANDING": "ON" } + }, + { + "name": "coverage", + "displayName": "Code coverage build", + "inherits": "default", + "binaryDir": "${sourceDir}/build/coverage", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_CXX_FLAGS": "--coverage -O0 -g", + "CMAKE_EXE_LINKER_FLAGS": "--coverage" + } + }, + { + "name": "coverage-freestanding", + "displayName": "Code coverage freestanding build", + "inherits": "coverage", + "binaryDir": "${sourceDir}/build/coverage-freestanding", + "cacheVariables": { + "PROXY_FREESTANDING": "ON" + } } ], "buildPresets": [ @@ -34,6 +54,14 @@ { "name": "freestanding", "configurePreset": "freestanding" + }, + { + "name": "coverage", + "configurePreset": "coverage" + }, + { + "name": "coverage-freestanding", + "configurePreset": "coverage-freestanding" } ], "testPresets": [ @@ -50,6 +78,20 @@ "output": { "outputOnFailure": true } + }, + { + "name": "coverage", + "configurePreset": "coverage", + "output": { + "outputOnFailure": true + } + }, + { + "name": "coverage-freestanding", + "configurePreset": "coverage-freestanding", + "output": { + "outputOnFailure": true + } } ] } From fbb537b72323dce8176c9d3446b2bce3c0905c0c Mon Sep 17 00:00:00 2001 From: Tian Liao Date: Thu, 25 Jun 2026 23:41:17 +0800 Subject: [PATCH 2/5] try printing the summary --- .github/workflows/bvt-codecoverage.yml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/workflows/bvt-codecoverage.yml b/.github/workflows/bvt-codecoverage.yml index a679933..0beffcf 100644 --- a/.github/workflows/bvt-codecoverage.yml +++ b/.github/workflows/bvt-codecoverage.yml @@ -12,7 +12,8 @@ jobs: - name: Install CMake, Ninja, and gcovr run: | apt-get update - apt-get install -y cmake ninja-build gcovr + apt-get install -y cmake ninja-build python3-pip + pip install --break-system-packages gcovr - name: Check toolchain versions run: | @@ -44,7 +45,16 @@ jobs: --print-summary \ --txt build/coverage/report/coverage.txt \ --xml-pretty --output build/coverage/report/coverage.xml \ - --html-details build/coverage/report/coverage.html + --html-details build/coverage/report/coverage.html \ + --markdown-summary build/coverage/report/coverage.md \ + build/coverage build/coverage-freestanding + + - name: Publish coverage summary + run: | + { + echo "## Code coverage" + cat build/coverage/report/coverage.md + } >> "$GITHUB_STEP_SUMMARY" - name: Upload code coverage report uses: actions/upload-artifact@v7 From 8d191aa23ca9007e4c29d0c165077846457904bf Mon Sep 17 00:00:00 2001 From: Tian Liao Date: Fri, 26 Jun 2026 00:02:22 +0800 Subject: [PATCH 3/5] resolve comments --- CMakePresets.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index d393028..a858104 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -32,8 +32,8 @@ "binaryDir": "${sourceDir}/build/coverage", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", - "CMAKE_CXX_FLAGS": "--coverage -O0 -g", - "CMAKE_EXE_LINKER_FLAGS": "--coverage" + "CMAKE_CXX_FLAGS_DEBUG": "--coverage", + "CMAKE_EXE_LINKER_FLAGS_DEBUG": "--coverage" } }, { From 877f30878785b135e9925f10cbba291f6af3f669 Mon Sep 17 00:00:00 2001 From: Tian Liao Date: Fri, 26 Jun 2026 00:04:05 +0800 Subject: [PATCH 4/5] use the gcovr from apt --- .github/workflows/bvt-codecoverage.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/bvt-codecoverage.yml b/.github/workflows/bvt-codecoverage.yml index 0beffcf..0cab354 100644 --- a/.github/workflows/bvt-codecoverage.yml +++ b/.github/workflows/bvt-codecoverage.yml @@ -12,8 +12,7 @@ jobs: - name: Install CMake, Ninja, and gcovr run: | apt-get update - apt-get install -y cmake ninja-build python3-pip - pip install --break-system-packages gcovr + apt-get install -y cmake ninja-build gcovr - name: Check toolchain versions run: | @@ -46,14 +45,16 @@ jobs: --txt build/coverage/report/coverage.txt \ --xml-pretty --output build/coverage/report/coverage.xml \ --html-details build/coverage/report/coverage.html \ - --markdown-summary build/coverage/report/coverage.md \ - build/coverage build/coverage-freestanding + build/coverage build/coverage-freestanding \ + | tee build/coverage/report/summary.txt - name: Publish coverage summary run: | { echo "## Code coverage" - cat build/coverage/report/coverage.md + echo '```' + cat build/coverage/report/summary.txt + echo '```' } >> "$GITHUB_STEP_SUMMARY" - name: Upload code coverage report From 2b9345a9980330f51028658aac0f5efaab2a6de0 Mon Sep 17 00:00:00 2001 From: Tian Liao Date: Fri, 26 Jun 2026 00:12:14 +0800 Subject: [PATCH 5/5] comment --- CMakePresets.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index a858104..d393028 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -32,8 +32,8 @@ "binaryDir": "${sourceDir}/build/coverage", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", - "CMAKE_CXX_FLAGS_DEBUG": "--coverage", - "CMAKE_EXE_LINKER_FLAGS_DEBUG": "--coverage" + "CMAKE_CXX_FLAGS": "--coverage -O0 -g", + "CMAKE_EXE_LINKER_FLAGS": "--coverage" } }, {