Skip to content

Threaded mesh improvements and extensions #1732

Threaded mesh improvements and extensions

Threaded mesh improvements and extensions #1732

Workflow file for this run

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() }}