-
Notifications
You must be signed in to change notification settings - Fork 74
154 lines (148 loc) · 6.51 KB
/
Copy pathtest_t8code_macos.yml
File metadata and controls
154 lines (148 loc) · 6.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
name: CMake tests t8code on Mac OS
# This file is part of t8code.
# t8code is a C library to manage a collection (a forest) of multiple
# connected adaptive space-trees of general element types in parallel.
#
# Copyright (C) 2026 the developers
#
# t8code is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# t8code is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with t8code; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# This workflow checks whether building and testing works on Mac OS.
# In the past, this meant that Mac-OS-specific problems in t8code became
# apparrent only in Trixi and T8Code.jl, where they are very hard and
# cumbersome to debug. This workflow is intended to avoid that by catching
# such problems as early as possible, i.e., within t8code's CI.
# To reduce runtime, (for now) only one configuration is run, that is, Debug mode
# with MPI, mesh handle, and Fortran interface. The main reason the external
# libraries (VTK, OpenCASCADE) are deactivated is that github's Mac OS runners
# do not use containers, meaning we would have to install the libraries in every
# single CI run (or cache them).
env:
DEBUG_CONFIG: "-O1"
on:
workflow_call:
# Note: To simplify adding more configurations of this workflow later, the MPI mode and the BUILD_TYPE
# are passed as input, although currently only MPI on and Debug mode are tested.
inputs:
MAKEFLAGS:
required: true
type: string
description: 'Make flags to use for compilation (like -j4)'
MPI:
required: true
type: string
description: 'Use MPI for compilation (ON/OFF)'
BUILD_TYPE:
required: true
type: string
description: 'Build type (Release/Debug)'
TEST_LEVEL:
required: true
type: string
description: 'Test level used for configuring (T8_TEST_LEVEL_FULL, T8_TEST_LEVEL_MEDIUM, or T8_TEST_LEVEL_BASIC)'
default: 'T8_TEST_LEVEL_FULL'
jobs:
t8code_cmake_tests:
#
# Container setup: To avoid unwanted side effects of gcc or mpich, an own Clang version of the
# t8-dependencies Docker image is used. Aside from some basic packages, it contains a manually built
# Clang version of OpenMPI.
timeout-minutes: 25
runs-on: macos-latest
steps:
#
# Part 1: Preparation
# -------------------------------------
- uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Update packages
run: brew update
- name: Install missing packages via Homebrew
run: |
brew install open-mpi ninja cmake openssl gfortran
- name: Export correct OpenMPI path to environment variables
run: |
export OPENMPI_BIN="/opt/homebrew/opt/open-mpi/bin"
echo OPENMPI_BIN="$OPENMPI_BIN" >> $GITHUB_ENV
- name: Show gfortran version
run: $OPENMPI_BIN/mpifort --version
- name: Show mpicc version
run: $OPENMPI_BIN/mpicc --version
- name: Show mpiexec version
run: $OPENMPI_BIN/mpiexec --version
- name: MPI sanity check (should print hostname four times)
run: $OPENMPI_BIN/mpiexec --oversubscribe -n 4 hostname
- name: Get input vars
run: export MAKEFLAGS="${{ inputs.MAKEFLAGS }}"
&& export MPI="${{ inputs.MPI }}"
&& export BUILD_TYPE="${{ inputs.BUILD_TYPE }}"
&& echo MAKEFLAGS="$MAKEFLAGS" >> $GITHUB_ENV
&& echo MPI="$MPI" >> $GITHUB_ENV
&& echo BUILD_TYPE="$BUILD_TYPE" >> $GITHUB_ENV
#
# Part 2: Build t8code
# --------------------
# Define build config
- name: Set test level
run: export TEST_LEVEL_FLAG="-DT8CODE_TEST_LEVEL=${{ inputs.TEST_LEVEL }}"
&& echo TEST_LEVEL_FLAG="$TEST_LEVEL_FLAG" >> $GITHUB_ENV
- name: build config variables
run: |
export CONFIG_OPTIONS="-GNinja -DCMAKE_INSTALL_PREFIX=$(pwd)/install \
-DT8CODE_ENABLE_MPI=ON -DCMAKE_BUILD_TYPE=$BUILD_TYPE ${TEST_LEVEL_FLAG} -DCMAKE_C_FLAGS_DEBUG=${DEBUG_CONFIG} -DCMAKE_CXX_FLAGS_DEBUG=${DEBUG_CONFIG} \
-DT8CODE_BUILD_PEDANTIC=ON -DT8CODE_BUILD_WALL=ON -DT8CODE_BUILD_WERROR=OFF -DT8CODE_BUILD_WEXTRA=ON \
-DT8CODE_BUILD_FORTRAN_INTERFACE=ON -DT8CODE_BUILD_MESH_HANDLE=ON \
-DT8CODE_ENABLE_OCC=OFF -DT8CODE_ENABLE_VTK=OFF"
echo CONFIG_OPTIONS="$CONFIG_OPTIONS" >> $GITHUB_ENV
# Run cmake
# NOTE 1: We use -DT8CODE_CUSTOM_PARALLEL_TEST_COMMAND to activate oversubscription, which is required on the github runner.
# NOTE 2: DT8CODE_CUSTOM_PARALLEL_TEST_COMMAND is not included in $CONFIG_OPTIONS because of whitespace issues.
- name: echo cmake line
run: echo 'cmake ../ $CONFIG_OPTIONS -DT8CODE_CUSTOM_PARALLEL_TEST_COMMAND="mpirun --oversubscribe -np 4"'
- name: cmake
run: mkdir build && cd build && cmake ../ $CONFIG_OPTIONS -DT8CODE_CUSTOM_PARALLEL_TEST_COMMAND="mpirun --oversubscribe -np 4"
# On failure, upload logs
- name: OnFailUploadLog
if: failure()
uses: actions/upload-artifact@v7
with:
name: cmake_w_clang_and_ompi_${{ inputs.BUILD_TYPE }}_MPI_${{ inputs.MPI }}.log
path: build/CMakeFiles/CMakeOutput.log
# Build with ninja
- name: ninja
run: cd build && ninja $MAKEFLAGS
- name: ninja install
run: cd build && ninja install $MAKEFLAGS
#
# Part 3: Run t8code tests
# ------------------------
- name: serial tests (if MPI is enabled)
run: cd build && ctest -R _serial
if: ${{ inputs.MPI == 'ON' }}
- name: parallel tests (if MPI is enabled)
run: |
cd build
ctest -R _parallel
if: ${{ inputs.MPI == 'ON' }}
- name: tests (if MPI is disabled)
run: cd build && ctest $MAKEFLAGS
if: ${{ inputs.MPI == 'OFF' }}
# On failure, upload logs
- name: OnFailUploadLog
if: failure()
uses: actions/upload-artifact@v7
with:
name: test-suite_w_clang_and_ompi_${{ inputs.BUILD_TYPE }}_MPI_${{ inputs.MPI }}.log
path: build/Testing/Temporary/LastTest.log