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.