Skip to content

Merge pull request #205 from tim-griesbach/feature-scda #797

Merge pull request #205 from tim-griesbach/feature-scda

Merge pull request #205 from tim-griesbach/feature-scda #797

Workflow file for this run

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