Threaded mesh improvements and extensions #1737
This file contains hidden or 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 (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() }} |