Patch transient CI failures due to busy file system #825
Workflow file for this run
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 | |
# Due to busy file system problems on the CI runners, we introduced a patch to | |
# sleep if the MPI count of an I/O operation is unexpectedly 0 and then retry | |
# the I/O operation once. The time is in milliseconds. | |
SC_IO_SLEEP_TIME: 500 | |
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: Patch I/O for CI by sleeping if I/O intensity is too high | |
run: git apply doc/patch/patch-CI-IO.patch | |
- 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: Patch I/O for CI by sleeping if I/O intensity is too high | |
run: git apply doc/patch/patch-CI-IO.patch | |
- 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: Patch I/O for CI by sleeping if I/O intensity is too high | |
run: git apply doc/patch/patch-CI-IO.patch | |
- name: Set macro for I/O waiting | |
shell: bash | |
# use an enviroment variable to prepend the flag to the bulit-in compiler flags | |
run: echo "CFLAGS=-DSC_HACK_MPI_SLEEP=$SC_IO_SLEEP_TIME" >> "$GITHUB_ENV" | |
- 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: Patch I/O for CI by sleeping if I/O intensity is too high | |
run: git apply doc/patch/patch-CI-IO.patch | |
- 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 | |
- name: Patch I/O for CI by sleeping if I/O intensity is too high | |
run: git apply doc/patch/patch-CI-IO.patch | |
- 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 |