Skip to content

Switch coverage format to LCOV #50

Switch coverage format to LCOV

Switch coverage format to LCOV #50

Workflow file for this run

name: Action workflow
on: [push, pull_request]
jobs:
build:
name: Build Project
strategy:
fail-fast: false
matrix:
configuration:
- Debug
- Release
runs-on: ubuntu-latest
env:
build_dir: .build
steps:
- name: checkout
uses: actions/checkout@v4
- name: configure
shell: bash
run: |
mkdir ${build_dir}
cd ${build_dir}
cmake \
-DCMAKE_BUILD_TYPE=${{ matrix.configuration }} \
-DCMAKE_C_COMPILER=$(which gcc) \
-DCMAKE_CXX_COMPILER=$(which g++) \
..
- name: build all targets
shell: bash
run: |
pushd ${build_dir}
cmake --build . --target all
popd
mv ${build_dir}/tests/tests ./tests-${{ matrix.configuration }}
- name: upload tests binary
uses: actions/upload-artifact@v4
with:
name: tests-${{ matrix.configuration }}
path: tests-${{ matrix.configuration }}
if-no-files-found: error
tests:
name: Run Tests
strategy:
fail-fast: false
matrix:
configuration:
- Debug
- Release
needs: build
runs-on: ubuntu-latest
env:
build_dir: .build
steps:
- name: download tests binary
uses: actions/download-artifact@v4
with:
name: tests-${{ matrix.configuration }}
- name: prepare tests location
shell: bash
run: |
mkdir ${build_dir}
mv ./tests-${{ matrix.configuration }} ${build_dir}/tests
chmod 755 ${build_dir}/tests
- name: run tests
shell: bash
run: |
cd ${build_dir}
./tests -r compact
coverage:
if: ${{ github.event_name == 'push' }}
name: Prepare Coverage Report
strategy:
fail-fast: false
matrix:
configuration:
- Debug
runs-on: ubuntu-latest
env:
build_dir: .build
steps:
- name: checkout
uses: actions/checkout@v4
- name: configure
shell: bash
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends lcov
sudo apt-get clean
mkdir ${build_dir}
cd ${build_dir}
cmake \
-DCMAKE_BUILD_TYPE=${{ matrix.configuration }} \
-DCMAKE_C_COMPILER=$(which gcc) \
-DCMAKE_C_FLAGS="-g --coverage -fprofile-abs-path -fno-early-inlining" \
-DCMAKE_CXX_COMPILER=$(which g++) \
-DCMAKE_CXX_FLAGS="-g --coverage -fprofile-abs-path -fno-early-inlining" \
..
- name: build, run tests, prepare coverage data
shell: bash
run: |
cd ${build_dir}
cmake --build .
lcov --rc no_exception_branch=1 --rc lcov_branch_coverage=1 --no-external --capture --initial --directory $( realpath .. ) --output-file /tmp/base.info
tests/tests -a
lcov --rc no_exception_branch=1 --rc lcov_branch_coverage=1 --no-external --capture --directory $( realpath .. ) --output-file /tmp/test.info
lcov --rc no_exception_branch=1 --rc lcov_branch_coverage=1 --add-tracefile /tmp/base.info --add-tracefile /tmp/test.info --output-file /tmp/total.info
lcov --rc no_exception_branch=1 --rc lcov_branch_coverage=1 --remove /tmp/total.info "$( realpath . )/*" "$( realpath ../tests )/*" --output-file /tmp/filtered.info
cp /tmp/filtered.info "$( realpath .. )/coverage.txt"
- name: archive coverage data
uses: actions/upload-artifact@v4
with:
name: coverage.lcov
path: coverage.lcov
retention-days: 30
- name: upload coverage report
uses: codecov/[email protected]
with:
fail_ci_if_error: true
file: coverage.lcov
disable_search: true
verbose: true
plugin: noop
token: ${{ secrets.CODECOV_TOKEN }}