@@ -19,39 +19,97 @@ jobs:
19
19
build :
20
20
runs-on : ${{ matrix.os }}
21
21
strategy :
22
+ fail-fast : false
22
23
matrix :
23
- os : [ubuntu-22.04, ubuntu-24.04, macos-latest]
24
+ cmake_version : [4.0.1, 3.31.7, 3.28.6, 3.26.6, 3.21.7, 3.20.6, 3.16.9, 3.12.4, 3.10.3]
25
+ os : [ubuntu-24.04]
24
26
compiler : [gcc, clang]
27
+ generator : [Ninja, Unix Makefiles]
28
+ # CMake-Codecov relies on compiling with absolute paths, but CMake uses absolute paths
29
+ # with Ninja only starting with 3.21, so exclude older (non-supported) versions
25
30
exclude :
26
- - os : macos-latest
31
+ - cmake_version : 3.20.6
32
+ generator : Ninja
33
+ - cmake_version : 3.16.9
34
+ generator : Ninja
35
+ - cmake_version : 3.12.4
36
+ generator : Ninja
37
+ - cmake_version : 3.10.3
38
+ generator : Ninja
39
+
40
+ # Additionally test Ubuntu and macOS with default packages
41
+ include :
42
+ - os : ubuntu-22.04
43
+ cmake_version : default
44
+ generator : Unix Makefiles
27
45
compiler : gcc
28
-
46
+ - os : ubuntu-22.04
47
+ cmake_version : default
48
+ generator : Unix Makefiles
49
+ compiler : clang
50
+ - os : ubuntu-22.04
51
+ cmake_version : default
52
+ generator : Ninja
53
+ compiler : gcc
54
+ - os : ubuntu-22.04
55
+ cmake_version : default
56
+ generator : Ninja
57
+ compiler : clang
58
+ - os : macos-latest
59
+ compiler : clang
60
+ cmake_version : default
61
+ generator : Unix Makefiles
62
+ - os : macos-latest
63
+ compiler : clang
64
+ cmake_version : default
65
+ generator : Ninja
66
+
29
67
steps :
30
68
- name : Checkout code
31
69
uses : actions/checkout@v4
32
70
33
- - name : Install CMake, lcov, gfortran on Linux
71
+ - name : Install lcov, compilers on Linux
34
72
if : runner.os == 'Linux'
35
73
run : |
36
74
sudo apt-get update
37
- sudo apt-get install -y cmake lcov gfortran
75
+ sudo apt-get install -y lcov gfortran ${{ matrix.compiler }}
76
+
77
+ - name : Install default CMake
78
+ if : runner.os == 'Linux' && matrix.cmake_version == 'default'
79
+ run : |
80
+ sudo apt-get update
81
+ sudo apt-get install -y cmake
82
+
83
+ - name : Install specific CMake version
84
+ if : runner.os == 'Linux' && matrix.cmake_version != 'default'
85
+ run : |
86
+ sudo apt-get update
87
+ sudo apt-get install -y wget
88
+ wget https://github.com/Kitware/CMake/releases/download/v${{ matrix.cmake_version }}/cmake-${{ matrix.cmake_version }}-linux-x86_64.tar.gz
89
+ tar -xzf cmake-${{ matrix.cmake_version }}-linux-x86_64.tar.gz --strip-components=1 -C cmake
90
+ sudo cp -r cmake/* /usr/local/
38
91
39
92
- name : Install CMake, lcov on macOS
40
93
if : runner.os == 'macOS'
41
94
run : |
42
95
brew update
43
96
brew install cmake lcov
44
97
98
+ - name : Print CMake version
99
+ run : cmake --version
100
+
45
101
- name : Configure and build
46
102
run : |
47
103
mkdir build && cd build
48
- cmake .. -DENABLE_COVERAGE=On
49
- make
50
- make gcov lcov test
51
-
52
- - name : lcov report
53
- uses : actions/upload-artifact@v4
54
- with :
55
- name : code-coverage-report
56
- path : ./build/lcov
104
+ cmake .. -DCMAKE_C_COMPILER="${{ matrix.compiler }}" -G "${{ matrix.generator }}" -DENABLE_COVERAGE=On
105
+ cmake --build .
106
+ cmake --build . --target test
107
+ cmake --build . --target gcov
108
+ cmake --build . --target lcov
57
109
110
+ # - name: Codecov upload
111
+ # uses: codecov/codecov-action@v5
112
+ # with:
113
+ # name: codecov-coverage
114
+ # token: ${{ secrets.CODECOV_TOKEN }}
115
+ # fail_ci_if_error: true
0 commit comments