From 3497947305afe9a8c209d930e9ecc7a92b1ebffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20K=C3=B6hler?= Date: Thu, 19 Feb 2026 07:29:45 +0100 Subject: [PATCH] Add coverage building to github --- .github/workflows/build-coverage.yml | 139 +++++++++++++++++++++++++++ .github/workflows/build-unix.yml | 45 +-------- 2 files changed, 140 insertions(+), 44 deletions(-) create mode 100644 .github/workflows/build-coverage.yml diff --git a/.github/workflows/build-coverage.yml b/.github/workflows/build-coverage.yml new file mode 100644 index 0000000..d0f548d --- /dev/null +++ b/.github/workflows/build-coverage.yml @@ -0,0 +1,139 @@ +name: Coverage Report + +on: + push: + branches: + - main + paths: + - .github/workflows/*.yml + - '**CMakeLists.txt' + - 'cmake/**' + - 'examples/**' + - 'src/**' + - '!**Makefile' + - '!**md' + pull_request: + branches: + - main + paths: + - .github/workflows/*.yml + - '**CMakeLists.txt' + - 'cmake/**' + - 'examples/**' + - 'src/**' + - '!**Makefile' + - '!**md' + +#env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + +defaults: + run: + shell: bash + +jobs: + + coverage: + name: Coverage Build + # Use GNU compilers + + # The CMake configure and build commands are platform agnostic and should work equally + # well on Windows or Mac. You can convert this to a matrix build if you need + # cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ${{ matrix.os }} + timeout-minutes: 5 + + env: + BUILD_TYPE: Debug + FFLAGS: ${{ matrix.fflags }} + + strategy: + fail-fast: true + matrix: + os: [ ubuntu-latest ] + fflags: [ + "-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -fimplicit-none -frecursive -fopenmp" ] + # Better flags but not used by now: + # "-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -Werror=conversion -fimplicit-none -frecursive -fcheck=all", + # "-Wall -Wno-unused-dummy-argument -Wno-unused-variable -Wno-unused-label -Werror=conversion -fimplicit-none -frecursive -fcheck=all -fopenmp" ] + + steps: + + - name: Checkout SLICOT + uses: actions/checkout@v4.2.2 + + - name: Install basics (Ubuntu) + if: ${{ matrix.os == 'ubuntu-latest' }} + run: | + sudo apt update + sudo apt install -y cmake liblapack-dev libblas-dev gcovr + + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: > + cmake -B build -G Ninja + -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install + -D SLICOT_TESTING:BOOL=ON + -D BUILD_SHARED_LIBS:BOOL=ON + -D ENABLE_COVERAGE:BOOL=ON + + - name: Build + working-directory: ${{github.workspace}}/build + run: ninja + + - name: Test + working-directory: ${{github.workspace}}/build + run: ninja test + - name: Collect coverage results + working-directory: ${{github.workspace}}/build + run: ninja gcov + + + - name: Generate HTML Report + uses: threeal/gcovr-action@v1.2.0 + with: + html-out: coverage.html + xml-out: cobertura.xml + coveralls-out: coveralls.json + print-summary: true + root: ${{github.workspace}} + + - name: Produce the coverage report + uses: insightsengineering/coverage-action@v3 + with: + # Path to the Cobertura XML report. + path: ./cobertura.xml + # Minimum total coverage, if you want to the + # workflow to enforce it as a standard. + # This has no effect if the `fail` arg is set to `false`. + threshold: 45.00 + # Fail the workflow if the minimum code coverage + # reuqirements are not satisfied. + fail: true + # Publish the rendered output as a PR comment + publish: true + exclude-detailed-coverage: true + # Create a coverage diff report. + diff: true + # Branch to diff against. + # Compare the current coverage to the coverage + # determined on this branch. + diff-branch: main + # This is where the coverage reports for the + # `diff-branch` are stored. + # Branch is created if it doesn't already exist'. + diff-storage: _xml_coverage_reports + # A custom title that can be added to the code + # coverage summary in the PR comment. + coverage-summary-title: "Code Coverage Summary" + # Failure modes for coverage regression detection: + # Fail if any changed file has more uncovered lines (pycobertura exit code 2) + uncovered-statements-increase-failure: false + # Fail if new uncovered statements are introduced despite overall improvement (pycobertura exit code 3) + new-uncovered-statements-failure: false + # Fail if the overall coverage percentage decreases (more forgiving approach) + coverage-rate-reduction-failure: true + diff --git a/.github/workflows/build-unix.yml b/.github/workflows/build-unix.yml index 416cdeb..192787d 100644 --- a/.github/workflows/build-unix.yml +++ b/.github/workflows/build-unix.yml @@ -116,50 +116,7 @@ jobs: - name: Install run: cmake --build build --target install -j2 - coverage: - runs-on: ubuntu-latest - env: - BUILD_TYPE: Coverage - FFLAGS: "-fopenmp" - steps: - - - name: Checkout SLICOT - uses: actions/checkout@v4.2.2 - - - name: Install ninja-build tool - uses: seanmiddleditch/gha-setup-ninja@v6 - - - name: Install basics - run: | - sudo apt update - sudo apt install -y cmake liblapack-dev libblas-dev - - - - name: Configure CMake - # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. - # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type - run: > - cmake -B build -G Ninja - -D CMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} - -D CMAKE_INSTALL_PREFIX=${{github.workspace}}/lapack_install - -D SLICOT_BUILD_TESTING:BOOL=ON - -D SLICOT_BUILD_SHARED_LIBS:BOOL=ON - - - name: Build - # Execute tests defined by the CMake configuration. - # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail - run: cmake --build build --config ${{env.BUILD_TYPE}} - - - name: Test with OpenMP - working-directory: ${{github.workspace}}/build - run: ctest -C ${{env.BUILD_TYPE}} --schedule-random -j1 --output-on-failure --timeout 100 - - - name: Generate HTML Report - uses: threeal/gcovr-action@v1.1.0 - with: - html-out: coverage.html - -# memory-check: + # memory-check: # runs-on: ubuntu-latest # env: # BUILD_TYPE: Debug