A very short one on generating code coverage for C++, with lcov and codecov, inside GitHub actions.
Although I have tests covering all scenarios, I saw a boolean condition being reported as partially covered by Codecov.
bool is_closed; if (is_closed) { //... }
coverage: name: Coverage runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Create Build Environment run: cmake -E make_directory ${{github.workspace}}/build - name: Configure CMake working-directory: ${{github.workspace}}/build run: cmake ${{ github.workspace }} -DCMAKE_BUILD_TYPE=Debug -DCPP_CHANNEL_BUILD_TESTS=ON -DCPP_CHANNEL_COVERAGE=ON - name: Build working-directory: ${{github.workspace}}/build run: cmake --build . --config Debug --target channel_tests -j - name: Test working-directory: ${{github.workspace}}/build run: ctest -C Debug --verbose -L channel_tests -j - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }}
You can help Codecov by generating coverage.info
with lcov.
coverage: name: Coverage runs-on: ubuntu-latest steps: # ... - name: Generate coverage working-directory: ${{github.workspace}}/build run: | sudo apt-get install lcov -y lcov --capture --directory . --output-file coverage.info --ignore-errors mismatch lcov --remove coverage.info "*/usr/*" -o coverage.info - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} files: ${{github.workspace}}/build/coverage.info
It depends on your situation if you need --ignore-errors mismatch
and lcov --remove
.