Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
139 changes: 139 additions & 0 deletions .github/workflows/build-coverage.yml
Original file line number Diff line number Diff line change
@@ -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

45 changes: 1 addition & 44 deletions .github/workflows/build-unix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down