Merge pull request #205 from tim-griesbach/feature-scda #797
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI for CMake | |
on: | |
push: | |
paths: | |
- "**/CMakeLists.txt" | |
- "**.cmake" | |
- "**.cmake.in" | |
- "**.c" | |
- "**.h" | |
- "**.h.in" | |
- ".github/workflows/ci_cmake.yml" | |
pull_request: | |
release: | |
types: [published] | |
env: | |
CTEST_NO_TESTS_ACTION: "error" | |
CMAKE_BUILD_PARALLEL_LEVEL: 4 | |
CTEST_PARALLEL_LEVEL: 0 | |
CMAKE_INSTALL_PREFIX: ~/local | |
CMAKE_PREFIX_PATH: ~/local | |
jobs: | |
ubuntu-24: | |
runs-on: ubuntu-24.04 | |
name: Linux mpi=${{ matrix.mpi }} CC=${{ matrix.cc }} shared=${{ matrix.shared }} | |
timeout-minutes: 60 | |
strategy: | |
matrix: | |
cc: [gcc, clang] | |
shared: [false] | |
mpi: [true, false] | |
# we only include one "shared=true" as it's less common usage | |
# but we want to be sure CMake is OK with it | |
include: | |
- cc: gcc | |
shared: true | |
mpi: true | |
env: | |
CC: ${{ matrix.cc }} | |
steps: | |
- uses: actions/checkout@v4 | |
name: Checkout source code | |
- name: Install system dependencies | |
if: ${{ matrix.mpi }} | |
run: | | |
sudo apt-get update | |
sudo apt-get install --no-install-recommends \ | |
libmpich-dev mpich | |
- name: CMake composite steps (build, test, install, examples) | |
uses: ./.github/workflows/composite-cmake | |
ubuntu-22: | |
runs-on: ubuntu-22.04 | |
name: Linux mpi=${{ matrix.mpi }} CC=${{ matrix.cc }} shared=${{ matrix.shared }} | |
timeout-minutes: 60 | |
strategy: | |
matrix: | |
cc: [gcc] | |
shared: [false] | |
mpi: [true] | |
env: | |
CC: ${{ matrix.cc }} | |
steps: | |
- uses: actions/checkout@v4 | |
name: Checkout source code | |
- name: Install system dependencies | |
if: ${{ matrix.mpi }} | |
run: | | |
sudo apt-get update | |
sudo apt-get install --no-install-recommends \ | |
libmpich-dev mpich | |
- name: CMake composite steps (build, test, install, examples) | |
uses: ./.github/workflows/composite-cmake | |
linux-valgrind: | |
needs: ubuntu-24 | |
runs-on: ubuntu-24.04 | |
name: Valgrind Linux mpi=${{ matrix.mpi }} CC=${{ matrix.cc }} | |
timeout-minutes: 60 | |
strategy: | |
matrix: | |
cc: [gcc] | |
mpi: [true] | |
valgrind: [ON] | |
env: | |
CC: ${{ matrix.cc }} | |
steps: | |
- name: Install system dependencies | |
run: | | |
sudo apt-get update -yq | |
sudo apt-get install -yq --no-install-recommends \ | |
libmpich-dev mpich valgrind | |
- name: Checkout source code | |
uses: actions/checkout@v4 | |
- name: CMake configure | |
run: cmake --preset default -DSC_ENABLE_MPI:BOOL=${{ matrix.mpi }} -DSC_TEST_WITH_VALGRIND:BOOL=${{ matrix.valgrind }} | |
- name: CMake build | |
run: cmake --build --preset default | |
- name: CMake Test | |
run: ctest --preset default | |
- name: Upload log files | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: linux_cmake_valgrind_log | |
path: | | |
./build/CMakeFiles/CMakeConfigureLog.yaml | |
./build/Testing/Temporary/LastTest.log | |
mac: | |
runs-on: macos-14 | |
name: macOS mpi=${{ matrix.mpi }} CC=${{ matrix.cc }} shared=${{ matrix.shared }} | |
timeout-minutes: 60 | |
strategy: | |
matrix: | |
cc: [clang] | |
# gcc-13 is broken in general for macOS GItHub Actions, but works fine on real computers. | |
mpi: [true] | |
shared: [false] | |
# shared=true is not common usage, but let's test one case of it | |
include: | |
- shared: true | |
cc: clang | |
env: | |
HOMEBREW_NO_INSTALL_CLEANUP: 1 | |
CC: ${{ matrix.cc }} | |
steps: | |
- uses: actions/checkout@v4 | |
name: Checkout source code | |
- name: Install system dependencies | |
run: brew install open-mpi | |
- name: CMake composite steps (build, test, install, examples) | |
uses: ./.github/workflows/composite-cmake | |
windows: | |
runs-on: windows-latest | |
name: Windows | |
timeout-minutes: 60 | |
strategy: | |
matrix: | |
shared: [false] | |
# GitHub Action Windows shared libs is generally broken, even with MSYS2, but works on real laptops etc. | |
env: | |
CMAKE_GENERATOR: "MinGW Makefiles" | |
steps: | |
- uses: actions/checkout@v4 | |
name: Checkout source code | |
- run: echo "CMAKE_INSTALL_PREFIX=$HOME/local" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | |
- run: echo "CMAKE_PREFIX_PATH=$HOME/local" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append | |
- name: CMake configure without MPI | |
run: cmake --preset default -DSC_ENABLE_MPI:BOOL=no -DSC_BUILD_SHARED_LIBS:BOOL=${{ matrix.shared }} | |
- name: CMake build | |
run: cmake --build --preset default --parallel | |
- name: CMake Test | |
run: ctest --preset default | |
- name: CMake install (for examples) | |
run: cmake --install build | |
- name: CMake configure examples without MPI | |
run: cmake -B example/build -S example | |
- name: CMake build examples | |
run: cmake --build example/build --parallel | |
- name: Create package | |
if: github.event.action == 'published' | |
run: cpack --config build/CPackConfig.cmake | |
- name: Upload package | |
if: github.event.action == 'published' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: windows-binary-archive | |
path: build/package | |
- name: Upload log files | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: windows_cmake_log | |
path: | | |
./build/CMakeFiles/CMakeConfigureLog.yaml | |
./build/Testing/Temporary/LastTest.log |