-
-
Notifications
You must be signed in to change notification settings - Fork 244
214 lines (191 loc) · 9.69 KB
/
ci.yml
File metadata and controls
214 lines (191 loc) · 9.69 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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
name: CI (via Spack, experimental)
on:
# Uncomment the below 'push' to trigger on push
push:
branches:
- release
pull_request:
branches:
- main
workflow_dispatch:
env:
GITHUB_USER: ${{ github.actor }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OMPI_ALLOW_RUN_AS_ROOT: 1
OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1
PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe
dolfinx_ref: ${{ github.event_name == 'pull_request' && github.head_ref || github.ref_name }}
jobs:
ci-spack-experimental-build:
runs-on: ubuntu-latest
container: ubuntu:24.04
permissions:
packages: write
steps:
- name: Branch and commit SHA
run: |
echo "Branch and commit SHA: ${{ env.dolfinx_ref }}, ${{ github.sha }}"
- name: Install Spack requirements
run: |
apt-get -y update
apt-get install -y bzip2 curl file git gzip make patch python3-minimal \
tar unzip xz-utils g++ gcc gfortran
apt-get install -y llvm-15-dev
- name: Get DOLFINx code
uses: actions/checkout@v6
with:
path: dolfinx-src
- name: Load dev branch environment variables
run: cat dolfinx-src/.github/workflows/fenicsx-refs.env >> $GITHUB_ENV
- name: Get UFL code
uses: actions/checkout@v6
with:
repository: ${{ env.ufl_repository }}
ref: ${{ env.ufl_ref }}
path: ufl-src
- name: Get FFCx code
uses: actions/checkout@v6
with:
repository: ${{ env.ffcx_repository }}
ref: ${{ env.ffcx_ref }}
path: ffcx-src
- name: Get Basix code
uses: actions/checkout@v6
with:
repository: ${{ env.basix_repository }}
ref: ${{ env.basix_ref }}
path: basix-src
- name: Get Spack
uses: actions/checkout@v6
with:
repository: spack/spack
ref: develop
path: spack-src
- name: Get upstream Spack packages
uses: actions/checkout@v6
with:
repository: spack/spack-packages
ref: develop
path: spack-packages
- name: Get FEniCS Spack packages
uses: actions/checkout@v6
with:
repository: fenics/spack-fenics
ref: main
path: spack-fenics
# Use upstream Spack packages and overlay FEniCS Spack packages
- name: Add Spack packages repo
run: |
. $GITHUB_WORKSPACE/spack-src/share/spack/setup-env.sh
spack repo add --name builtin $GITHUB_WORKSPACE/spack-packages/repos/spack_repo/builtin
spack repo add --name fenics $GITHUB_WORKSPACE/spack-fenics/spack_repo/fenics
spack config get repos
spack repo list
- name: Prepare C++ environment
run: |
. $GITHUB_WORKSPACE/spack-src/share/spack/setup-env.sh
spack info fenics-dolfinx
spack env create cxx dolfinx-src/.github/workflows/spack-config/gh-actions-env-test.yml
spack -e cxx develop --no-clone --path $GITHUB_WORKSPACE/basix-src fenics-basix@main
spack -e cxx develop --no-clone --path $GITHUB_WORKSPACE/basix-src py-fenics-basix@main
spack -e cxx develop --no-clone --path $GITHUB_WORKSPACE/ufl-src py-fenics-ufl@main
spack -e cxx develop --no-clone --path $GITHUB_WORKSPACE/ffcx-src py-fenics-ffcx@main
spack -e cxx develop --no-clone --path $GITHUB_WORKSPACE/ffcx-src fenics-ufcx@main
spack -e cxx develop --no-clone --path $GITHUB_WORKSPACE/dolfinx-src fenics-dolfinx@main
- name: Build library (C++)
run: |
. $GITHUB_WORKSPACE/spack-src/share/spack/setup-env.sh
# Ensure build provenance by adding manually and providing git sha
spack -e cxx add fenics-basix@main commit=$(git -C $GITHUB_WORKSPACE/basix-src rev-parse HEAD)
spack -e cxx add py-fenics-basix@main commit=$(git -C $GITHUB_WORKSPACE/basix-src rev-parse HEAD) build_type=Developer
spack -e cxx add py-fenics-ufl@main commit=$(git -C $GITHUB_WORKSPACE/ufl-src rev-parse HEAD)
spack -e cxx add fenics-ufcx@main commit=$(git -C $GITHUB_WORKSPACE/ffcx-src rev-parse HEAD)
spack -e cxx add py-fenics-ffcx@main commit=$(git -C $GITHUB_WORKSPACE/ffcx-src rev-parse HEAD)
# As of 12/11/2025 ^petsc+hypre causes petsc to concretise to old version
spack -e cxx add fenics-dolfinx@main+petsc+slepc+adios2 commit=${{ github.sha }} build_type=Developer partitioners=parmetis \
^petsc+mpi+mumps+superlu-dist~hypre \
^adios2~libcatalyst~fortran
spack -e cxx add catch2
spack -e cxx concretize -j 4
spack -e cxx install -j 4 -p 2 --use-buildcache auto
- name: Push C++ packages to cache
run: |
. $GITHUB_WORKSPACE/spack-src/share/spack/setup-env.sh
spack -e cxx buildcache push --base-image ubuntu:24.04 --only dependencies --with-build-dependencies --update-index local-buildcache
spack -e cxx buildcache push --base-image ubuntu:24.04 --update-index local-buildcache catch2 ninja
if: ${{ !cancelled() }}
- name: Build and run C++ unit tests
run: |
. $GITHUB_WORKSPACE/spack-src/share/spack/setup-env.sh
spack env activate cxx
spack load catch2 cmake ninja py-fenics-ffcx
cmake -Werror=dev --warn-uninitialized -G Ninja -DCMAKE_BUILD_TYPE=Developer -B build/test/ -S dolfinx-src/cpp/test/
cmake --build build/test
cd build/test
ctest -V --output-on-failure -R unittests_np_1
ctest -V --output-on-failure -R unittests_np_3
- name: Build and run C++ demos
run: |
. $GITHUB_WORKSPACE/spack-src/share/spack/setup-env.sh
spack env activate cxx
spack load cmake ninja py-fenics-ffcx
cmake -Werror=dev --warn-uninitialized -G Ninja -DCMAKE_BUILD_TYPE=Developer -B build/demo/ -S dolfinx-src/cpp/demo/
cmake --build build/demo
cd build/demo
ctest -V -R demo -R serial
ctest --output-on-failure -V -R demo -R mpi_2
- name: Prepare Python environment
run: |
. $GITHUB_WORKSPACE/spack-src/share/spack/setup-env.sh
spack info py-fenics-dolfinx
spack env create py dolfinx-src/.github/workflows/spack-config/gh-actions-env-test.yml
spack -e py develop --no-clone --path $GITHUB_WORKSPACE/basix-src fenics-basix@main
spack -e py develop --no-clone --path $GITHUB_WORKSPACE/basix-src py-fenics-basix@main
spack -e py develop --no-clone --path $GITHUB_WORKSPACE/ufl-src py-fenics-ufl@main
spack -e py develop --no-clone --path $GITHUB_WORKSPACE/ffcx-src py-fenics-ffcx@main
spack -e py develop --no-clone --path $GITHUB_WORKSPACE/ffcx-src fenics-ufcx@main
spack -e py develop --no-clone --path $GITHUB_WORKSPACE/dolfinx-src fenics-dolfinx@main
spack -e py develop --no-clone --path $GITHUB_WORKSPACE/dolfinx-src py-fenics-dolfinx@main
- name: Build library (Python)
run: |
. $GITHUB_WORKSPACE/spack-src/share/spack/setup-env.sh
# Ensure build provenance by adding manually and providing git sha
spack -e py add fenics-basix@main commit=$(git -C $GITHUB_WORKSPACE/basix-src rev-parse HEAD)
spack -e py add py-fenics-basix@main commit=$(git -C $GITHUB_WORKSPACE/basix-src rev-parse HEAD) build_type=Developer
spack -e py add py-fenics-ufl@main commit=$(git -C $GITHUB_WORKSPACE/ufl-src rev-parse HEAD)
spack -e py add fenics-ufcx@main commit=$(git -C $GITHUB_WORKSPACE/ffcx-src rev-parse HEAD)
spack -e py add py-fenics-ffcx@main commit=$(git -C $GITHUB_WORKSPACE/ffcx-src rev-parse HEAD)
spack -e py add fenics-dolfinx@main+petsc+slepc+adios2 commit=${{ github.sha }} build_type=Developer partitioners=parmetis \
^petsc+mpi+mumps+superlu-dist~hypre \
^adios2~libcatalyst~fortran
# hypre causing petsc to concretise to old version as of 12/11/2025
spack -e py add py-fenics-dolfinx@main+petsc4py+slepc4py commit=${{ github.sha }} build_type=Developer
spack -e py add py-gmsh ^gmsh~fltk+external py-pyamg py-matplotlib py-networkx \
py-numba py-pytest py-pytest-xdist py-scipy py-pyvista
spack -e py concretize -j 4
spack -e py install -j 4 -p 2 --use-buildcache auto
- name: Set default DOLFINx JIT options
run: |
mkdir -p ~/.config/dolfinx
echo '{ "cffi_extra_compile_args": ["-g0", "-O0" ] }' > ~/.config/dolfinx/dolfinx_jit_options.json
- name: Run Python demos
run: |
. $GITHUB_WORKSPACE/spack-src/share/spack/setup-env.sh
spack env activate py
spack load gcc
python -m pytest -n=auto -m serial --durations=10 dolfinx-src/python/demo/test.py
python -m pytest -m mpi --num-proc=3 dolfinx-src/python/demo/test.py
- name: Run Python unit tests
run: |
. $GITHUB_WORKSPACE/spack-src/share/spack/setup-env.sh
spack env activate py
spack load gcc
python -m pytest -n=auto --durations=50 dolfinx-src/python/test/unit/
mpiexec -np 3 python -m pytest --durations=50 dolfinx-src/python/test/unit/
- name: Push packages to cache and update index
run: |
. $GITHUB_WORKSPACE/spack-src/share/spack/setup-env.sh
spack -e py buildcache push --base-image ubuntu:24.04 --only dependencies --with-build-dependencies --update-index local-buildcache
spack -e py buildcache push --base-image ubuntu:24.04 --update-index local-buildcache \
py-gmsh py-matplotlib py-networkx py-numba py-pytest py-pytest-xdist py-scipy py-pyvista
if: ${{ !cancelled() }}