From b91da5d8bf6c9c41c91459ab85e90e3a39b372ec Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 30 Jan 2026 12:04:14 +0100 Subject: [PATCH 01/90] Add SuperLU_dist to Spack package --- spack_repo/fenics/packages/fenics_dolfinx/package.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spack_repo/fenics/packages/fenics_dolfinx/package.py b/spack_repo/fenics/packages/fenics_dolfinx/package.py index f63cec81..27aadd6a 100644 --- a/spack_repo/fenics/packages/fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/fenics_dolfinx/package.py @@ -59,6 +59,7 @@ class FenicsDolfinx(CMakePackage): variant("slepc", default=False, description="SLEPc support") variant("adios2", default=False, description="ADIOS2 support") variant("petsc", default=False, description="PETSc support") + variant("superlu-dist", default=False, description="SuperLU_DIST support", when="@main") conflicts("~petsc", when="+slepc", msg="+slepc requires +petsc") @@ -81,6 +82,9 @@ class FenicsDolfinx(CMakePackage): depends_on("adios2@2.8.1:", when="@0.9: +adios2") depends_on("adios2+mpi", when="+adios2") + depends_on("superlu-dist+parmetis", when="+superlu_dist partitioners=parmetis") + depends_on("superlu-dist~parmetis", when="+superlu-dist partitioners=~parmetis") + for ver in ("main", "0.10", "0.9", "0.8", "0.7", "0.6"): depends_on(f"fenics-ufcx@{ver}", when=f"@{ver}") depends_on(f"fenics-basix@{ver}", when=f"@{ver}") From 391c2c648a3f42e22ea16829713671d903511f3f Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 30 Jan 2026 12:18:08 +0100 Subject: [PATCH 02/90] Add comment --- spack_repo/fenics/packages/fenics_dolfinx/package.py | 1 + 1 file changed, 1 insertion(+) diff --git a/spack_repo/fenics/packages/fenics_dolfinx/package.py b/spack_repo/fenics/packages/fenics_dolfinx/package.py index 27aadd6a..84bceccf 100644 --- a/spack_repo/fenics/packages/fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/fenics_dolfinx/package.py @@ -82,6 +82,7 @@ class FenicsDolfinx(CMakePackage): depends_on("adios2@2.8.1:", when="@0.9: +adios2") depends_on("adios2+mpi", when="+adios2") + # If asked for DOLFINx without Parmetis, don't build SuperLU_DIST with it. depends_on("superlu-dist+parmetis", when="+superlu_dist partitioners=parmetis") depends_on("superlu-dist~parmetis", when="+superlu-dist partitioners=~parmetis") From b97d38f8c87b33a83d5edd88f83122b584fad87b Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 30 Jan 2026 14:54:34 +0100 Subject: [PATCH 03/90] Fix and add strict check --- spack_repo/fenics/packages/fenics_dolfinx/package.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spack_repo/fenics/packages/fenics_dolfinx/package.py b/spack_repo/fenics/packages/fenics_dolfinx/package.py index 84bceccf..e7db6d75 100644 --- a/spack_repo/fenics/packages/fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/fenics_dolfinx/package.py @@ -83,7 +83,7 @@ class FenicsDolfinx(CMakePackage): depends_on("adios2+mpi", when="+adios2") # If asked for DOLFINx without Parmetis, don't build SuperLU_DIST with it. - depends_on("superlu-dist+parmetis", when="+superlu_dist partitioners=parmetis") + depends_on("superlu-dist+parmetis", when="+superlu-dist partitioners=parmetis") depends_on("superlu-dist~parmetis", when="+superlu-dist partitioners=~parmetis") for ver in ("main", "0.10", "0.9", "0.8", "0.7", "0.6"): @@ -105,4 +105,5 @@ def cmake_args(self): self.define("DOLFINX_ENABLE_KAHIP", "partitioners=kahip" in self.spec), self.define("DOLFINX_ENABLE_PARMETIS", "partitioners=parmetis" in self.spec), self.define("DOLFINX_ENABLE_SCOTCH", "partitioners=scotch" in self.spec), + self.define("DOLFINX_ENABLE_SUPERLU_DIST", "superlu_dist" in self.spec), ] From 7b92c4b9d9e024a0357b9e271c95479fa2f6bc04 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 30 Jan 2026 15:00:27 +0100 Subject: [PATCH 04/90] Formatting --- .../fenics/packages/fenics_dolfinx/package.py | 39 ++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/spack_repo/fenics/packages/fenics_dolfinx/package.py b/spack_repo/fenics/packages/fenics_dolfinx/package.py index e7db6d75..91623ed6 100644 --- a/spack_repo/fenics/packages/fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/fenics_dolfinx/package.py @@ -2,9 +2,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -from spack_repo.builtin.build_systems.cmake import CMakePackage - from spack.package import * +from spack_repo.builtin.build_systems.cmake import CMakePackage class FenicsDolfinx(CMakePackage): @@ -17,15 +16,31 @@ class FenicsDolfinx(CMakePackage): license("LGPL-3.0-or-later") version("main", branch="main", no_cache=True) - version("0.10.0.post4", sha256="3f827a88ab52843fbd7a5cc7814ecba165bdec65fd10df05eb031c286e8cd605") version( - "0.10.0.post2", sha256="eae83794fee8141c80c59c03a2f4ac208af2b62c8f36e5d19c93e0d279029f52" + "0.10.0.post4", + sha256="3f827a88ab52843fbd7a5cc7814ecba165bdec65fd10df05eb031c286e8cd605", + ) + version( + "0.10.0.post2", + sha256="eae83794fee8141c80c59c03a2f4ac208af2b62c8f36e5d19c93e0d279029f52", + ) + version( + "0.9.0", + sha256="b266c74360c2590c5745d74768c04568c965b44739becca4cd6b5aa58cdbbbd1", + ) + version( + "0.8.0", + sha256="acf3104d9ecc0380677a6faf69eabfafc58d0cce43f7777e1307b95701c7cad9", ) - version("0.9.0", sha256="b266c74360c2590c5745d74768c04568c965b44739becca4cd6b5aa58cdbbbd1") - version("0.8.0", sha256="acf3104d9ecc0380677a6faf69eabfafc58d0cce43f7777e1307b95701c7cad9") with default_args(deprecated=True): - version("0.7.2", sha256="7d9ce1338ce66580593b376327f23ac464a4ce89ef63c105efc1a38e5eae5c0b") - version("0.6.0", sha256="eb8ac2bb2f032b0d393977993e1ab6b4101a84d54023a67206e3eac1a8d79b80") + version( + "0.7.2", + sha256="7d9ce1338ce66580593b376327f23ac464a4ce89ef63c105efc1a38e5eae5c0b", + ) + version( + "0.6.0", + sha256="eb8ac2bb2f032b0d393977993e1ab6b4101a84d54023a67206e3eac1a8d79b80", + ) patch("0.8-boost-filesystem.patch", when="@0.8") @@ -59,7 +74,9 @@ class FenicsDolfinx(CMakePackage): variant("slepc", default=False, description="SLEPc support") variant("adios2", default=False, description="ADIOS2 support") variant("petsc", default=False, description="PETSc support") - variant("superlu-dist", default=False, description="SuperLU_DIST support", when="@main") + variant( + "superlu-dist", default=False, description="SuperLU_DIST support", when="@main" + ) conflicts("~petsc", when="+slepc", msg="+slepc requires +petsc") @@ -103,7 +120,9 @@ def cmake_args(self): self.define_from_variant("DOLFINX_ENABLE_ADIOS2", "adios2"), self.define("DOLFINX_UFCX_PYTHON", False), self.define("DOLFINX_ENABLE_KAHIP", "partitioners=kahip" in self.spec), - self.define("DOLFINX_ENABLE_PARMETIS", "partitioners=parmetis" in self.spec), + self.define( + "DOLFINX_ENABLE_PARMETIS", "partitioners=parmetis" in self.spec + ), self.define("DOLFINX_ENABLE_SCOTCH", "partitioners=scotch" in self.spec), self.define("DOLFINX_ENABLE_SUPERLU_DIST", "superlu_dist" in self.spec), ] From 72dbbba9c1821c638f37e0e6ddc6011a78b791d5 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 30 Jan 2026 15:14:40 +0100 Subject: [PATCH 05/90] Remove complexity --- spack_repo/fenics/packages/fenics_dolfinx/package.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/spack_repo/fenics/packages/fenics_dolfinx/package.py b/spack_repo/fenics/packages/fenics_dolfinx/package.py index 91623ed6..8d8baee7 100644 --- a/spack_repo/fenics/packages/fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/fenics_dolfinx/package.py @@ -99,9 +99,7 @@ class FenicsDolfinx(CMakePackage): depends_on("adios2@2.8.1:", when="@0.9: +adios2") depends_on("adios2+mpi", when="+adios2") - # If asked for DOLFINx without Parmetis, don't build SuperLU_DIST with it. - depends_on("superlu-dist+parmetis", when="+superlu-dist partitioners=parmetis") - depends_on("superlu-dist~parmetis", when="+superlu-dist partitioners=~parmetis") + depends_on("superlu-dist", when="+superlu-dist") for ver in ("main", "0.10", "0.9", "0.8", "0.7", "0.6"): depends_on(f"fenics-ufcx@{ver}", when=f"@{ver}") From 738b0292e98a2c30e8d27e1b1bcf40f8dd241226 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 30 Jan 2026 15:19:53 +0100 Subject: [PATCH 06/90] Reduce slightly mad number of combos --- .github/workflows/spack-matrix.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 6810c6c7..262bc529 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -58,7 +58,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - variant: ["build_type=Developer", "partitioners=kahip,parmetis,scotch", "+petsc +slepc +adios2"] + variant: ["build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2"] compiler: ["gcc@13", "clang@18"] exclude: # kahip does not support clang @@ -80,7 +80,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - compiler: ["gcc@13", "clang@18"] + compiler: ["gcc@13"] steps: - uses: actions/checkout@v5 with: @@ -135,7 +135,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - variant: ["build_type=Developer", "+petsc4py +slepc4py"] + variant: ["build_type=Developer +petsc4py +slepc4py"] compiler: ["gcc@13", "clang@18"] python-version: ["3.10", "3.11", "3.12", "3.13"] steps: From 2fa928572c0a7d51481f254389ec1cd5d283de93 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 16:20:50 +0100 Subject: [PATCH 07/90] Fix typo. --- spack_repo/fenics/packages/fenics_dolfinx/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spack_repo/fenics/packages/fenics_dolfinx/package.py b/spack_repo/fenics/packages/fenics_dolfinx/package.py index 8d8baee7..5b707521 100644 --- a/spack_repo/fenics/packages/fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/fenics_dolfinx/package.py @@ -122,5 +122,5 @@ def cmake_args(self): "DOLFINX_ENABLE_PARMETIS", "partitioners=parmetis" in self.spec ), self.define("DOLFINX_ENABLE_SCOTCH", "partitioners=scotch" in self.spec), - self.define("DOLFINX_ENABLE_SUPERLU_DIST", "superlu_dist" in self.spec), + self.define("DOLFINX_ENABLE_SUPERLU_DIST", "superlu-dist" in self.spec), ] From f3d0f3f35b9e713ee1ddf1cb09867cb93ba9430e Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 16:57:11 +0100 Subject: [PATCH 08/90] Simplify and add superlu-dist variant test on main --- .github/actions/test-package/action.yml | 15 +++-------- .github/workflows/spack-matrix.yml | 33 ++++++++++++++++--------- 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index 340a7cb6..b9ec8234 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -5,11 +5,6 @@ inputs: description: 'Spack spec syntax' required: true type: string - python-version: - description: 'Python version' - required: false - type: string - default: '3.13' runs: using: "composite" steps: @@ -21,7 +16,7 @@ runs: - uses: actions/setup-python@v6 with: - python-version: ${{ inputs.python-version }} + python-version: 3.13 - name: Set up spack uses: spack/setup-spack@v2 @@ -30,14 +25,12 @@ runs: color: true path: spack - - name: Install gcc-13 (default) + - name: Install gcc shell: sh - if: contains(inputs.spec, 'gcc@13') || (! contains(inputs.spec, 'clang') && ! contains(inputs.spec, 'gcc')) run: apt-get install -y g++ gcc gfortran build-essential - name: Install clang-18 shell: sh - if: contains(inputs.spec, 'clang@18') run: apt-get install -y clang-18 gfortran - name: Add repos @@ -69,7 +62,7 @@ runs: - name: Concretize shell: spack-bash {0} run: spack -e ./env concretize -j 4 - + - name: Install shell: spack-bash {0} run: > @@ -81,5 +74,5 @@ runs: if: success() || failure() uses: actions/upload-artifact@v4 with: - name: ${{ inputs.spec }}-${{ inputs.python-version }}-log + name: ${{ inputs.spec }}-log path: log.xml diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 262bc529..1dc6828c 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -41,7 +41,7 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] variant: ["build_type=Developer"] - compiler: ["gcc@13", "clang@18"] + compiler: ["gcc", "clang"] steps: - uses: actions/checkout@v5 with: @@ -58,12 +58,16 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - variant: ["build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2"] - compiler: ["gcc@13", "clang@18"] + variant: ["build_type=Developer", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2"] + compiler: ["gcc", "clang"] exclude: # kahip does not support clang - - variant: "partitioners=kahip,parmetis,scotch" - compiler: "clang@18" + - variant: "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2" + compiler: "clang" + include: + # test native superlu-dist support + version: "main" + variant: "build_type=Developer +superlu-dist" steps: - uses: actions/checkout@v5 with: @@ -80,7 +84,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - compiler: ["gcc@13"] + compiler: ["gcc"] steps: - uses: actions/checkout@v5 with: @@ -98,7 +102,7 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] variant: ["", "+ufl"] - compiler: ["gcc@13", "clang@18"] + compiler: ["gcc", "clang"] steps: - uses: actions/checkout@v5 with: @@ -136,17 +140,22 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] variant: ["build_type=Developer +petsc4py +slepc4py"] - compiler: ["gcc@13", "clang@18"] + compiler: ["gcc", "clang"] python-version: ["3.10", "3.11", "3.12", "3.13"] + include: + # test new native superlu-dist support + version: "main" + variant: "build_type=Developer ^fenics-dolfinx+superlu-dist" + compiler: "gcc" + python-version: "3.13" steps: - uses: actions/checkout@v5 with: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - python-version: ${{ matrix.python-version }} - # workaround for https://github.com/spack/spack/issues/29447 + spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} + # Workaround for https://github.com/spack/spack/issues/29447 # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 (at least for dolfinx @:0.9) - name: Run tests if: ${{ matrix.version == '0.8' || matrix.version == '0.9'}} @@ -182,7 +191,7 @@ jobs: - uses: ./spack-fenics/.github/actions/test-package with: spec: py-fenics-ffcx@${{ matrix.version }} - # workaround for https://github.com/spack/spack/issues/29447 + # Workaround for https://github.com/spack/spack/issues/29447 # we do not run numba based tests here due to disk-space constraints # 0.8 broken - name: Run tests From 1efbf04cf0e33b43f2201cde7a0f77f9e29c814a Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 17:42:14 +0100 Subject: [PATCH 09/90] Fix. --- .github/workflows/spack-matrix.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 1dc6828c..e59d91e5 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -62,12 +62,13 @@ jobs: compiler: ["gcc", "clang"] exclude: # kahip does not support clang - - variant: "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2" - compiler: "clang" + variant: "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2" + compiler: "clang" include: # test native superlu-dist support version: "main" variant: "build_type=Developer +superlu-dist" + compiler: "gcc" steps: - uses: actions/checkout@v5 with: @@ -142,12 +143,12 @@ jobs: variant: ["build_type=Developer +petsc4py +slepc4py"] compiler: ["gcc", "clang"] python-version: ["3.10", "3.11", "3.12", "3.13"] - include: - # test new native superlu-dist support - version: "main" - variant: "build_type=Developer ^fenics-dolfinx+superlu-dist" - compiler: "gcc" - python-version: "3.13" + include: + # test new native superlu-dist support + version: "main" + variant: "build_type=Developer ^fenics-dolfinx+superlu-dist" + compiler: "gcc" + python-version: "3.13" steps: - uses: actions/checkout@v5 with: From 243317dca777cf4ba51b694531faeccc2777af68 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 17:44:35 +0100 Subject: [PATCH 10/90] Fix --- .github/workflows/spack-matrix.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index e59d91e5..87178313 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -62,13 +62,13 @@ jobs: compiler: ["gcc", "clang"] exclude: # kahip does not support clang - variant: "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2" - compiler: "clang" + - variant: "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2" + compiler: "clang" include: # test native superlu-dist support - version: "main" - variant: "build_type=Developer +superlu-dist" - compiler: "gcc" + - version: "main" + variant: "build_type=Developer +superlu-dist" + compiler: "gcc" steps: - uses: actions/checkout@v5 with: @@ -145,10 +145,10 @@ jobs: python-version: ["3.10", "3.11", "3.12", "3.13"] include: # test new native superlu-dist support - version: "main" - variant: "build_type=Developer ^fenics-dolfinx+superlu-dist" - compiler: "gcc" - python-version: "3.13" + - version: "main" + variant: "build_type=Developer ^fenics-dolfinx+superlu-dist" + compiler: "gcc" + python-version: "3.13" steps: - uses: actions/checkout@v5 with: From 03ae8f9613cc0c073a382f6160e9e210c86ada82 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 18:03:22 +0100 Subject: [PATCH 11/90] Tidy. --- .github/workflows/spack-matrix.yml | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 87178313..1712ab84 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -7,7 +7,7 @@ on: pull_request: workflow_dispatch: schedule: - - cron: "0 2 * * MON" # weekly, mondays 2am + - cron: "0 2 * * MON" # weekly, Mondays 0200 jobs: style-check: @@ -111,8 +111,7 @@ jobs: - uses: ./spack-fenics/.github/actions/test-package with: spec: py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - # workaround for https://github.com/spack/spack/issues/29447 - - name: Run tests (> 0.8) + - name: Run tests if: ${{ matrix.version != '0.8' && contains(matrix.variant, '+ufl') }} shell: spack-bash {0} run: | @@ -121,8 +120,8 @@ jobs: spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} pytest test/ - # 0.8 holds one broken test case - - name: Run tests (0.8) + # NOTE: 0.8 has test_all_elements_included broken + - name: Run tests if: ${{ matrix.version == '0.8' && contains(matrix.variant, '+ufl') }} shell: spack-bash {0} run: | @@ -144,7 +143,7 @@ jobs: compiler: ["gcc", "clang"] python-version: ["3.10", "3.11", "3.12", "3.13"] include: - # test new native superlu-dist support + # Test new native superlu-dist support - version: "main" variant: "build_type=Developer ^fenics-dolfinx+superlu-dist" compiler: "gcc" @@ -156,8 +155,7 @@ jobs: - uses: ./spack-fenics/.github/actions/test-package with: spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} - # Workaround for https://github.com/spack/spack/issues/29447 - # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 (at least for dolfinx @:0.9) + # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 - name: Run tests if: ${{ matrix.version == '0.8' || matrix.version == '0.9'}} shell: spack-bash {0} @@ -166,16 +164,18 @@ jobs: spack install --add py-pytest@8.4 py-scipy spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - pytest python/test/unit -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" + python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit + mpiexec -np 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit - name: Run tests if: ${{ matrix.version != '0.8' && matrix.version != '0.9'}} shell: spack-bash {0} run: | spack env activate ./env - spack install --add py-pytest@8.4 py-scipy + spack install --add py-pytest py-scipy spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - pytest python/test/unit -m "not petsc4py and not adios2" -k "not test_cffi_expression" + python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression" python/test/unit + mpiexec -np 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression" python/test/unit py-fenics-ffcx: needs: style-check @@ -192,9 +192,7 @@ jobs: - uses: ./spack-fenics/.github/actions/test-package with: spec: py-fenics-ffcx@${{ matrix.version }} - # Workaround for https://github.com/spack/spack/issues/29447 - # we do not run numba based tests here due to disk-space constraints - # 0.8 broken + # NOTE: ffcx version 0.8 currently broken - name: Run tests if: ${{ matrix.version != '0.8' }} shell: spack-bash {0} @@ -220,7 +218,6 @@ jobs: - uses: ./spack-fenics/.github/actions/test-package with: spec: py-fenics-ufl@${{ matrix.version }} - # workaround for https://github.com/spack/spack/issues/29447 - name: Run tests shell: spack-bash {0} run: | From ebcbe7c5d3350ebf1789d2cc4e1a611a62c8709a Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 21:35:51 +0100 Subject: [PATCH 12/90] More tweaks. --- .github/workflows/spack-matrix.yml | 40 +++++++++++++++--------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 1712ab84..b119fb43 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -41,7 +41,7 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] variant: ["build_type=Developer"] - compiler: ["gcc", "clang"] + compiler: ["gcc@13", "clang@18"] steps: - uses: actions/checkout@v5 with: @@ -59,16 +59,16 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] variant: ["build_type=Developer", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2"] - compiler: ["gcc", "clang"] + compiler: ["gcc@13", "clang@18"] exclude: # kahip does not support clang - variant: "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2" - compiler: "clang" + compiler: "clang@18" include: # test native superlu-dist support - version: "main" variant: "build_type=Developer +superlu-dist" - compiler: "gcc" + compiler: "gcc@13" steps: - uses: actions/checkout@v5 with: @@ -85,7 +85,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - compiler: ["gcc"] + compiler: ["gcc@13"] steps: - uses: actions/checkout@v5 with: @@ -103,7 +103,7 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] variant: ["", "+ufl"] - compiler: ["gcc", "clang"] + compiler: ["gcc@13", "clang@18"] steps: - uses: actions/checkout@v5 with: @@ -119,7 +119,7 @@ jobs: spack install --add py-pytest py-sympy spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - pytest test/ + python -m pytest test/ # NOTE: 0.8 has test_all_elements_included broken - name: Run tests if: ${{ matrix.version == '0.8' && contains(matrix.variant, '+ufl') }} @@ -129,7 +129,7 @@ jobs: spack install --add py-pytest py-sympy spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - pytest test/ -k "not test_all_elements_included" + python -m pytest -k "not test_all_elements_included" test/ py-fenics-dolfinx: needs: style-check @@ -140,13 +140,13 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] variant: ["build_type=Developer +petsc4py +slepc4py"] - compiler: ["gcc", "clang"] - python-version: ["3.10", "3.11", "3.12", "3.13"] + compiler: ["gcc@13", "clang@18"] + python-version: ["3.12", "3.13"] include: # Test new native superlu-dist support - version: "main" variant: "build_type=Developer ^fenics-dolfinx+superlu-dist" - compiler: "gcc" + compiler: "gcc@13" python-version: "3.13" steps: - uses: actions/checkout@v5 @@ -161,19 +161,19 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env - spack install --add py-pytest@8.4 py-scipy - spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} + spack install --add py-pytest@8.4 py-scipy py-pytest-xdist + spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} + spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit - mpiexec -np 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit + mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit - name: Run tests if: ${{ matrix.version != '0.8' && matrix.version != '0.9'}} shell: spack-bash {0} run: | spack env activate ./env - spack install --add py-pytest py-scipy - spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} + spack install --add py-pytest py-scipy py-pytest-xdist + spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} + spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression" python/test/unit mpiexec -np 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression" python/test/unit @@ -201,7 +201,7 @@ jobs: spack install --add py-pytest py-sympy spack stage py-fenics-ffcx@${{ matrix.version }} spack cd py-fenics-ffcx@${{ matrix.version }} - pytest test/ + python -m pytest test/ py-fenics-ufl: needs: style-check @@ -225,4 +225,4 @@ jobs: spack install --add py-pytest spack stage py-fenics-ufl@${{ matrix.version }} spack cd py-fenics-ufl@${{ matrix.version }} - pytest test/ + python -m pytest test/ From d1ed073d456a2735bd38eef541ea5243722e7903 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 22:34:39 +0100 Subject: [PATCH 13/90] Build with MUMPS and install test Python with right Python version. --- .github/workflows/spack-matrix.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index b119fb43..13302bb2 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -139,7 +139,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - variant: ["build_type=Developer +petsc4py +slepc4py"] + variant: ["build_type=Developer +petsc4py +slepc4py ^petsc+mumps"] compiler: ["gcc@13", "clang@18"] python-version: ["3.12", "3.13"] include: @@ -147,7 +147,7 @@ jobs: - version: "main" variant: "build_type=Developer ^fenics-dolfinx+superlu-dist" compiler: "gcc@13" - python-version: "3.13" + python-version: "3.11" steps: - uses: actions/checkout@v5 with: @@ -161,7 +161,7 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env - spack install --add py-pytest@8.4 py-scipy py-pytest-xdist + spack install --add py-pytest@8.4 py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit @@ -171,7 +171,7 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env - spack install --add py-pytest py-scipy py-pytest-xdist + spack install --add py-pytest py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression" python/test/unit From b780a2ff6f319c8aaa87352c7f242cac37fcaaf1 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 22:49:24 +0100 Subject: [PATCH 14/90] More pytest-xdist --- .github/workflows/spack-matrix.yml | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 13302bb2..55b5e882 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -116,20 +116,20 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env - spack install --add py-pytest py-sympy + spack install --add py-pytest py-sympy py-pytest-xdist spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - python -m pytest test/ + python -m pytest -n auto test/ # NOTE: 0.8 has test_all_elements_included broken - name: Run tests if: ${{ matrix.version == '0.8' && contains(matrix.variant, '+ufl') }} shell: spack-bash {0} run: | spack env activate ./env - spack install --add py-pytest py-sympy + spack install --add py-pytest py-sympy py-pytest-xdist spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - python -m pytest -k "not test_all_elements_included" test/ + python -m pytest -n auto -k "not test_all_elements_included" test/ py-fenics-dolfinx: needs: style-check @@ -139,7 +139,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - variant: ["build_type=Developer +petsc4py +slepc4py ^petsc+mumps"] + variant: ["build_type=Developer +petsc4py +slepc4py ^petsc+mumps ^fenics-dolfinx+adios2"] compiler: ["gcc@13", "clang@18"] python-version: ["3.12", "3.13"] include: @@ -156,6 +156,7 @@ jobs: with: spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 + # TODO: Get this to run petsc4py tests - name: Run tests if: ${{ matrix.version == '0.8' || matrix.version == '0.9'}} shell: spack-bash {0} @@ -198,10 +199,10 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env - spack install --add py-pytest py-sympy + spack install --add py-pytest py-sympy py-pytest-xdist spack stage py-fenics-ffcx@${{ matrix.version }} spack cd py-fenics-ffcx@${{ matrix.version }} - python -m pytest test/ + python -m pytest -n auto test/ py-fenics-ufl: needs: style-check @@ -222,7 +223,7 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env - spack install --add py-pytest + spack install --add py-pytest py-pytest-xdist spack stage py-fenics-ufl@${{ matrix.version }} spack cd py-fenics-ufl@${{ matrix.version }} - python -m pytest test/ + python -m pytest -n auto test/ From e0c9f867468c312fea75a4210e3e82fcf490c107 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 22:51:51 +0100 Subject: [PATCH 15/90] Try running petsc4py and adios2 tests --- .github/workflows/spack-matrix.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 55b5e882..c4903fb6 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -156,7 +156,6 @@ jobs: with: spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 - # TODO: Get this to run petsc4py tests - name: Run tests if: ${{ matrix.version == '0.8' || matrix.version == '0.9'}} shell: spack-bash {0} @@ -165,8 +164,8 @@ jobs: spack install --add py-pytest@8.4 py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} - python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit - mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit + python -m pytest -n auto -k "not test_cffi_expression and not test_cube_distance" python/test/unit + mpiexec -n 3 python -m pytest -k "not test_cffi_expression and not test_cube_distance" python/test/unit - name: Run tests if: ${{ matrix.version != '0.8' && matrix.version != '0.9'}} shell: spack-bash {0} @@ -175,8 +174,8 @@ jobs: spack install --add py-pytest py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} - python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression" python/test/unit - mpiexec -np 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression" python/test/unit + python -m pytest -n auto -k "not test_cffi_expression" python/test/unit + mpiexec -np 3 python -m pytest -k "not test_cffi_expression" python/test/unit py-fenics-ffcx: needs: style-check From eec80dabb4b2defb7d5795cb0bafcb8de8f11de0 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 22:54:56 +0100 Subject: [PATCH 16/90] UFCx is unlicense --- spack_repo/fenics/packages/fenics_ufcx/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spack_repo/fenics/packages/fenics_ufcx/package.py b/spack_repo/fenics/packages/fenics_ufcx/package.py index c60b26e9..011b78cb 100644 --- a/spack_repo/fenics/packages/fenics_ufcx/package.py +++ b/spack_repo/fenics/packages/fenics_ufcx/package.py @@ -17,7 +17,7 @@ class FenicsUfcx(CMakePackage): url = "https://github.com/FEniCS/ffcx/archive/v0.4.2.tar.gz" maintainers("ma595", "jhale", "garth-wells", "chrisrichardson") - license("LGPL-3.0-or-later") + license("The Unlicense") version("main", branch="main", no_cache=True) version("0.10.0", sha256="fa27e2dc68988cbf9aca537eb5a58483f75cc719c1a383713b7f8cca49844ff9") From c6419f91e59092dce6d111dc342e7bf671d354a8 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 22:55:31 +0100 Subject: [PATCH 17/90] Short version --- spack_repo/fenics/packages/fenics_ufcx/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spack_repo/fenics/packages/fenics_ufcx/package.py b/spack_repo/fenics/packages/fenics_ufcx/package.py index 011b78cb..433bc49b 100644 --- a/spack_repo/fenics/packages/fenics_ufcx/package.py +++ b/spack_repo/fenics/packages/fenics_ufcx/package.py @@ -17,7 +17,7 @@ class FenicsUfcx(CMakePackage): url = "https://github.com/FEniCS/ffcx/archive/v0.4.2.tar.gz" maintainers("ma595", "jhale", "garth-wells", "chrisrichardson") - license("The Unlicense") + license("Unlicense") version("main", branch="main", no_cache=True) version("0.10.0", sha256="fa27e2dc68988cbf9aca537eb5a58483f75cc719c1a383713b7f8cca49844ff9") From 9b4ea779aded861a9b5fd867d90d4ffcf9bbacd4 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 22:59:29 +0100 Subject: [PATCH 18/90] Black --- .../fenics/packages/fenics_ufcx/package.py | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/spack_repo/fenics/packages/fenics_ufcx/package.py b/spack_repo/fenics/packages/fenics_ufcx/package.py index 433bc49b..b47773a7 100644 --- a/spack_repo/fenics/packages/fenics_ufcx/package.py +++ b/spack_repo/fenics/packages/fenics_ufcx/package.py @@ -20,12 +20,27 @@ class FenicsUfcx(CMakePackage): license("Unlicense") version("main", branch="main", no_cache=True) - version("0.10.0", sha256="fa27e2dc68988cbf9aca537eb5a58483f75cc719c1a383713b7f8cca49844ff9") - version("0.9.0", sha256="afa517272a3d2249f513cb711c50b77cf8368dd0b8f5ea4b759142229204a448") - version("0.8.0", sha256="8a854782dbd119ec1c23c4522a2134d5281e7f1bd2f37d64489f75da055282e3") + version( + "0.10.0", + sha256="fa27e2dc68988cbf9aca537eb5a58483f75cc719c1a383713b7f8cca49844ff9", + ) + version( + "0.9.0", + sha256="afa517272a3d2249f513cb711c50b77cf8368dd0b8f5ea4b759142229204a448", + ) + version( + "0.8.0", + sha256="8a854782dbd119ec1c23c4522a2134d5281e7f1bd2f37d64489f75da055282e3", + ) with default_args(deprecated=True): - version("0.7.0", sha256="7f3c3ca91d63ce7831d37799cc19d0551bdcd275bdfa4c099711679533dd1c71") - version("0.6.0", sha256="076fad61d406afffd41019ae1abf6da3f76406c035c772abad2156127667980e") + version( + "0.7.0", + sha256="7f3c3ca91d63ce7831d37799cc19d0551bdcd275bdfa4c099711679533dd1c71", + ) + version( + "0.6.0", + sha256="076fad61d406afffd41019ae1abf6da3f76406c035c772abad2156127667980e", + ) depends_on("cmake@3.19:", type="build") depends_on("c", type="build") From 17f55cfdba031bf1e453497290e05b3f5fe5768f Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 23:00:02 +0100 Subject: [PATCH 19/90] Fix --- spack_repo/fenics/packages/fenics_ufcx/package.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spack_repo/fenics/packages/fenics_ufcx/package.py b/spack_repo/fenics/packages/fenics_ufcx/package.py index b47773a7..5127071f 100644 --- a/spack_repo/fenics/packages/fenics_ufcx/package.py +++ b/spack_repo/fenics/packages/fenics_ufcx/package.py @@ -2,9 +2,8 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -from spack_repo.builtin.build_systems.cmake import CMakePackage - from spack.package import * +from spack_repo.builtin.build_systems.cmake import CMakePackage class FenicsUfcx(CMakePackage): From b772eb369f4ec3ecb165cd7124e5a5fa0e6a7849 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 23:14:46 +0100 Subject: [PATCH 20/90] Make sure compiler variant applies to base target - let Spack decide on others. --- .github/workflows/spack-matrix.yml | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index c4903fb6..96c8dfc1 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -48,7 +48,7 @@ jobs: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} + spec: fenics-basix@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} fenics-dolfinx: needs: style-check @@ -75,8 +75,7 @@ jobs: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - + spec: fenics-dolfinx@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} fenics-ufcx: needs: style-check runs-on: ubuntu-latest @@ -117,8 +116,8 @@ jobs: run: | spack env activate ./env spack install --add py-pytest py-sympy py-pytest-xdist - spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} + spack stage py-fenics-basix@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} + spack cd py-fenics-basix@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} python -m pytest -n auto test/ # NOTE: 0.8 has test_all_elements_included broken - name: Run tests @@ -127,8 +126,8 @@ jobs: run: | spack env activate ./env spack install --add py-pytest py-sympy py-pytest-xdist - spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} + spack stage py-fenics-basix@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} + spack cd py-fenics-basix@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} python -m pytest -n auto -k "not test_all_elements_included" test/ py-fenics-dolfinx: @@ -154,7 +153,7 @@ jobs: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} + spec: py-fenics-dolfinx@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} ^python@${{ matrix.python-version }} # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 - name: Run tests if: ${{ matrix.version == '0.8' || matrix.version == '0.9'}} @@ -162,8 +161,8 @@ jobs: run: | spack env activate ./env spack install --add py-pytest@8.4 py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} - spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} - spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} + spack stage py-fenics-dolfinx@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} ^python@${{ matrix.python-version }} + spack cd py-fenics-dolfinx@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} ^python@${{ matrix.python-version }} python -m pytest -n auto -k "not test_cffi_expression and not test_cube_distance" python/test/unit mpiexec -n 3 python -m pytest -k "not test_cffi_expression and not test_cube_distance" python/test/unit - name: Run tests @@ -172,8 +171,8 @@ jobs: run: | spack env activate ./env spack install --add py-pytest py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} - spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} - spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} + spack stage py-fenics-dolfinx@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} ^python@${{ matrix.python-version }} + spack cd py-fenics-dolfinx@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} ^python@${{ matrix.python-version }} python -m pytest -n auto -k "not test_cffi_expression" python/test/unit mpiexec -np 3 python -m pytest -k "not test_cffi_expression" python/test/unit From 842fbeacdc79a087e6b4156968a2023aa8c08da9 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 9 Feb 2026 23:18:53 +0100 Subject: [PATCH 21/90] The way compiler is being added to spec is problematic. --- .github/workflows/spack-matrix.yml | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 96c8dfc1..c4903fb6 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -48,7 +48,7 @@ jobs: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: fenics-basix@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} + spec: fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} fenics-dolfinx: needs: style-check @@ -75,7 +75,8 @@ jobs: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: fenics-dolfinx@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} + spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} + fenics-ufcx: needs: style-check runs-on: ubuntu-latest @@ -116,8 +117,8 @@ jobs: run: | spack env activate ./env spack install --add py-pytest py-sympy py-pytest-xdist - spack stage py-fenics-basix@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} - spack cd py-fenics-basix@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} + spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} + spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} python -m pytest -n auto test/ # NOTE: 0.8 has test_all_elements_included broken - name: Run tests @@ -126,8 +127,8 @@ jobs: run: | spack env activate ./env spack install --add py-pytest py-sympy py-pytest-xdist - spack stage py-fenics-basix@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} - spack cd py-fenics-basix@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} + spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} + spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} python -m pytest -n auto -k "not test_all_elements_included" test/ py-fenics-dolfinx: @@ -153,7 +154,7 @@ jobs: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: py-fenics-dolfinx@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} ^python@${{ matrix.python-version }} + spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 - name: Run tests if: ${{ matrix.version == '0.8' || matrix.version == '0.9'}} @@ -161,8 +162,8 @@ jobs: run: | spack env activate ./env spack install --add py-pytest@8.4 py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} - spack stage py-fenics-dolfinx@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} ^python@${{ matrix.python-version }} - spack cd py-fenics-dolfinx@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} ^python@${{ matrix.python-version }} + spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} + spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} python -m pytest -n auto -k "not test_cffi_expression and not test_cube_distance" python/test/unit mpiexec -n 3 python -m pytest -k "not test_cffi_expression and not test_cube_distance" python/test/unit - name: Run tests @@ -171,8 +172,8 @@ jobs: run: | spack env activate ./env spack install --add py-pytest py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} - spack stage py-fenics-dolfinx@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} ^python@${{ matrix.python-version }} - spack cd py-fenics-dolfinx@${{ matrix.version }} %${{ matrix.compiler }} ${{ matrix.variant }} ^python@${{ matrix.python-version }} + spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} + spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} python -m pytest -n auto -k "not test_cffi_expression" python/test/unit mpiexec -np 3 python -m pytest -k "not test_cffi_expression" python/test/unit From 7d77bf49d5da12d0fefcba285b96c54470c5e036 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 07:58:15 +0100 Subject: [PATCH 22/90] Use spec directly - gives more control. --- .github/workflows/spack-matrix.yml | 58 ++++++++++++------------------ 1 file changed, 22 insertions(+), 36 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index c4903fb6..2e7a39de 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -40,15 +40,14 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - variant: ["build_type=Developer"] - compiler: ["gcc@13", "clang@18"] + spec: ["build_type=Developer %gcc@13", "build_type=Developer %clang@18"] steps: - uses: actions/checkout@v5 with: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} + spec: fenics-basix@${{ matrix.version }} ${{ matrix.spec }} fenics-dolfinx: needs: style-check @@ -58,24 +57,14 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - variant: ["build_type=Developer", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2"] - compiler: ["gcc@13", "clang@18"] - exclude: - # kahip does not support clang - - variant: "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2" - compiler: "clang@18" - include: - # test native superlu-dist support - - version: "main" - variant: "build_type=Developer +superlu-dist" - compiler: "gcc@13" + spec: ["build_type=Developer %gcc@13", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %clang@18"] steps: - uses: actions/checkout@v5 with: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} + spec: fenics-dolfinx@${{ matrix.version }} %${{ matrix.spec }} fenics-ufcx: needs: style-check @@ -85,14 +74,14 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - compiler: ["gcc@13"] + spec: ["%gcc@13"] steps: - uses: actions/checkout@v5 with: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: fenics-ufcx@${{ matrix.version }} %${{ matrix.compiler }} + spec: fenics-ufcx@${{ matrix.version }} ${{ matrix.spec }} py-fenics-basix: needs: style-check @@ -102,8 +91,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - variant: ["", "+ufl"] - compiler: ["gcc@13", "clang@18"] + spec: ["+ufl %gcc@13", "%clang@18"] steps: - uses: actions/checkout@v5 with: @@ -117,8 +105,8 @@ jobs: run: | spack env activate ./env spack install --add py-pytest py-sympy py-pytest-xdist - spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} + spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} + spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} python -m pytest -n auto test/ # NOTE: 0.8 has test_all_elements_included broken - name: Run tests @@ -127,8 +115,8 @@ jobs: run: | spack env activate ./env spack install --add py-pytest py-sympy py-pytest-xdist - spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} - spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} + spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} + spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} python -m pytest -n auto -k "not test_all_elements_included" test/ py-fenics-dolfinx: @@ -139,22 +127,20 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - variant: ["build_type=Developer +petsc4py +slepc4py ^petsc+mumps ^fenics-dolfinx+adios2"] - compiler: ["gcc@13", "clang@18"] - python-version: ["3.12", "3.13"] + python-version: ["3.10", "3.13"] + spec: ["build_type=Developer +petsc4py +slepc4py %gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", + "build_type=Developer %clang@18"] + # Test new superlu-dist variant include: - # Test new native superlu-dist support - - version: "main" - variant: "build_type=Developer ^fenics-dolfinx+superlu-dist" - compiler: "gcc@13" - python-version: "3.11" + version: "main" + spec: "build_type=Developer +superlu-dist %clang@18" steps: - uses: actions/checkout@v5 with: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} + spec: py-fenics-dolfinx@${{ matrix.version }} ^python@${{ matrix.python-version }} # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 - name: Run tests if: ${{ matrix.version == '0.8' || matrix.version == '0.9'}} @@ -162,8 +148,8 @@ jobs: run: | spack env activate ./env spack install --add py-pytest@8.4 py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} - spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} - spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} + spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} + spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} python -m pytest -n auto -k "not test_cffi_expression and not test_cube_distance" python/test/unit mpiexec -n 3 python -m pytest -k "not test_cffi_expression and not test_cube_distance" python/test/unit - name: Run tests @@ -172,8 +158,8 @@ jobs: run: | spack env activate ./env spack install --add py-pytest py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} - spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} - spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} ^python@${{ matrix.python-version }} + spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} + spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} python -m pytest -n auto -k "not test_cffi_expression" python/test/unit mpiexec -np 3 python -m pytest -k "not test_cffi_expression" python/test/unit From f64fc8b668d5e1baaa612d8058b5d596ffc029f6 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 08:00:07 +0100 Subject: [PATCH 23/90] Fix. --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 2e7a39de..d36d75b6 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -132,7 +132,7 @@ jobs: "build_type=Developer %clang@18"] # Test new superlu-dist variant include: - version: "main" + - version: "main" spec: "build_type=Developer +superlu-dist %clang@18" steps: - uses: actions/checkout@v5 From b53196f8b3f602b30ee597d213b2fe1e21442ae6 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 08:00:40 +0100 Subject: [PATCH 24/90] Fix --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index d36d75b6..d97e7d88 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -133,7 +133,7 @@ jobs: # Test new superlu-dist variant include: - version: "main" - spec: "build_type=Developer +superlu-dist %clang@18" + spec: "build_type=Developer +superlu-dist %clang@18" steps: - uses: actions/checkout@v5 with: From e4678f965ca3a1715f73bf51d5b858ae8e757f26 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 08:04:10 +0100 Subject: [PATCH 25/90] Fixes --- .github/workflows/spack-matrix.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index d97e7d88..feac45c1 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -64,7 +64,7 @@ jobs: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: fenics-dolfinx@${{ matrix.version }} %${{ matrix.spec }} + spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} fenics-ufcx: needs: style-check @@ -140,7 +140,7 @@ jobs: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: py-fenics-dolfinx@${{ matrix.version }} ^python@${{ matrix.python-version }} + spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 - name: Run tests if: ${{ matrix.version == '0.8' || matrix.version == '0.9'}} From b4ef2e3898dba090a708a9c25e3cd8efff83131e Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 08:06:58 +0100 Subject: [PATCH 26/90] Fix python version --- .github/workflows/spack-matrix.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index feac45c1..529fcd5d 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -134,6 +134,7 @@ jobs: include: - version: "main" spec: "build_type=Developer +superlu-dist %clang@18" + python-version: "3.12" steps: - uses: actions/checkout@v5 with: From 9df431b5783cf7c3258cdcef695fb61ceceaf865 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 08:08:25 +0100 Subject: [PATCH 27/90] Remove more variant --- .github/workflows/spack-matrix.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 529fcd5d..1c80b32d 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -98,9 +98,9 @@ jobs: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: py-fenics-basix@${{ matrix.version }} ${{ matrix.variant }} %${{ matrix.compiler }} + spec: py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} - name: Run tests - if: ${{ matrix.version != '0.8' && contains(matrix.variant, '+ufl') }} + if: ${{ matrix.version != '0.8' && contains(matrix.spec, '+ufl') }} shell: spack-bash {0} run: | spack env activate ./env @@ -110,7 +110,7 @@ jobs: python -m pytest -n auto test/ # NOTE: 0.8 has test_all_elements_included broken - name: Run tests - if: ${{ matrix.version == '0.8' && contains(matrix.variant, '+ufl') }} + if: ${{ matrix.version == '0.8' && contains(matrix.spec, '+ufl') }} shell: spack-bash {0} run: | spack env activate ./env From 5e09b6ad60ecbda49595856b71481279825b53ca Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 08:38:13 +0100 Subject: [PATCH 28/90] Put variant on dep. --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 1c80b32d..5a93f9bd 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -133,7 +133,7 @@ jobs: # Test new superlu-dist variant include: - version: "main" - spec: "build_type=Developer +superlu-dist %clang@18" + spec: "build_type=Developer %clang@18 ^fenics-dolfinx+superlu-dist" python-version: "3.12" steps: - uses: actions/checkout@v5 From 3c2c1c1eb8039fa28c46cb7a688eab2dbf6b58d9 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 08:45:49 +0100 Subject: [PATCH 29/90] Bind compiler from py wrapper to C++ library --- spack_repo/fenics/packages/py_fenics_basix/package.py | 8 ++++++++ spack_repo/fenics/packages/py_fenics_dolfinx/package.py | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/spack_repo/fenics/packages/py_fenics_basix/package.py b/spack_repo/fenics/packages/py_fenics_basix/package.py index cafd5b26..3be337d4 100644 --- a/spack_repo/fenics/packages/py_fenics_basix/package.py +++ b/spack_repo/fenics/packages/py_fenics_basix/package.py @@ -58,6 +58,14 @@ class PyFenicsBasix(PythonPackage): for ver in ("main", "0.10.0.post0", "0.10.0", "0.9.0", "0.8.0", "0.7.0", "0.6.0"): depends_on(f"fenics-basix@{ver}", type=("build", "run"), when=f"@{ver}") + # Ensure fenics-basix is built with same compiler. + depends_on("fenics-basix%gcc", when="%gcc") + depends_on("fenics-basix%clang", when="%clang") + depends_on("fenics-basix%oneapi", when="%oneapi") + depends_on("fenics-basix%intel", when="%intel") + depends_on("fenics-basix%nvhpc", when="%nvhpc") + depends_on("fenics-basix%aocc", when="%aocc") + # See python/CMakeLists.txt depends_on("cmake@3.21:", when="@0.9:", type="build") depends_on("cmake@3.19:", when="@0.8", type="build") diff --git a/spack_repo/fenics/packages/py_fenics_dolfinx/package.py b/spack_repo/fenics/packages/py_fenics_dolfinx/package.py index 53c2eb83..69a5d84b 100644 --- a/spack_repo/fenics/packages/py_fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/py_fenics_dolfinx/package.py @@ -71,6 +71,14 @@ class PyFenicsDolfinx(PythonPackage): for ver in ["main", "0.10.0.post4", "0.9.0", "0.8.0", "0.7.2", "0.6.0"]: depends_on(f"fenics-dolfinx@{ver}", when=f"@{ver}") + # Ensure fenics-dolfinx is built with same compiler. + depends_on("fenics-dolfinx%gcc", when="%gcc") + depends_on("fenics-dolfinx%clang", when="%clang") + depends_on("fenics-dolfinx%oneapi", when="%oneapi") + depends_on("fenics-dolfinx%intel", when="%intel") + depends_on("fenics-dolfinx%nvhpc", when="%nvhpc") + depends_on("fenics-dolfinx%aocc", when="%aocc") + for ver in ["main", "0.10", "0.9", "0.8", "0.7", "0.6"]: depends_on(f"fenics-basix@{ver}", type=("build", "link"), when=f"@{ver}") depends_on(f"py-fenics-basix@{ver} +ufl", type=("build", "run"), when=f"@{ver}") From b7a97c8e544bd152d2c8880ba3094ac7f331d6d4 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 08:47:47 +0100 Subject: [PATCH 30/90] Black --- spack_repo/fenics/packages/py_fenics_basix/package.py | 4 ++-- spack_repo/fenics/packages/py_fenics_dolfinx/package.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spack_repo/fenics/packages/py_fenics_basix/package.py b/spack_repo/fenics/packages/py_fenics_basix/package.py index 3be337d4..261d4aef 100644 --- a/spack_repo/fenics/packages/py_fenics_basix/package.py +++ b/spack_repo/fenics/packages/py_fenics_basix/package.py @@ -59,12 +59,12 @@ class PyFenicsBasix(PythonPackage): depends_on(f"fenics-basix@{ver}", type=("build", "run"), when=f"@{ver}") # Ensure fenics-basix is built with same compiler. - depends_on("fenics-basix%gcc", when="%gcc") + depends_on("fenics-basix%gcc", when="%gcc") depends_on("fenics-basix%clang", when="%clang") depends_on("fenics-basix%oneapi", when="%oneapi") depends_on("fenics-basix%intel", when="%intel") depends_on("fenics-basix%nvhpc", when="%nvhpc") - depends_on("fenics-basix%aocc", when="%aocc") + depends_on("fenics-basix%aocc", when="%aocc") # See python/CMakeLists.txt depends_on("cmake@3.21:", when="@0.9:", type="build") diff --git a/spack_repo/fenics/packages/py_fenics_dolfinx/package.py b/spack_repo/fenics/packages/py_fenics_dolfinx/package.py index 69a5d84b..faa4d272 100644 --- a/spack_repo/fenics/packages/py_fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/py_fenics_dolfinx/package.py @@ -72,12 +72,12 @@ class PyFenicsDolfinx(PythonPackage): depends_on(f"fenics-dolfinx@{ver}", when=f"@{ver}") # Ensure fenics-dolfinx is built with same compiler. - depends_on("fenics-dolfinx%gcc", when="%gcc") + depends_on("fenics-dolfinx%gcc", when="%gcc") depends_on("fenics-dolfinx%clang", when="%clang") depends_on("fenics-dolfinx%oneapi", when="%oneapi") depends_on("fenics-dolfinx%intel", when="%intel") depends_on("fenics-dolfinx%nvhpc", when="%nvhpc") - depends_on("fenics-dolfinx%aocc", when="%aocc") + depends_on("fenics-dolfinx%aocc", when="%aocc") for ver in ["main", "0.10", "0.9", "0.8", "0.7", "0.6"]: depends_on(f"fenics-basix@{ver}", type=("build", "link"), when=f"@{ver}") From ae7ca999dc4ab659479836a82015e93cd317e935 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 09:28:03 +0100 Subject: [PATCH 31/90] Fix --- .github/workflows/spack-matrix.yml | 13 +++++++------ .../fenics/packages/py_fenics_basix/package.py | 4 ++-- .../fenics/packages/py_fenics_dolfinx/package.py | 4 ++-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 5a93f9bd..f1401345 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -91,7 +91,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - spec: ["+ufl %gcc@13", "%clang@18"] + spec: ["+ufl %gcc@13", "+ufl %clang@18"] steps: - uses: actions/checkout@v5 with: @@ -100,7 +100,7 @@ jobs: with: spec: py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} - name: Run tests - if: ${{ matrix.version != '0.8' && contains(matrix.spec, '+ufl') }} + if: ${{ matrix.version != '0.8' }} shell: spack-bash {0} run: | spack env activate ./env @@ -110,7 +110,7 @@ jobs: python -m pytest -n auto test/ # NOTE: 0.8 has test_all_elements_included broken - name: Run tests - if: ${{ matrix.version == '0.8' && contains(matrix.spec, '+ufl') }} + if: ${{ matrix.version == '0.8' }} shell: spack-bash {0} run: | spack env activate ./env @@ -128,12 +128,13 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] python-version: ["3.10", "3.13"] - spec: ["build_type=Developer +petsc4py +slepc4py %gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", - "build_type=Developer %clang@18"] + # NOTE: %% propagates to dependencies - without this, C++ ABI seems to be an issue for clang. + spec: ["build_type=Developer +petsc4py +slepc4py %%gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", + "build_type=Developer %%clang@18"] # Test new superlu-dist variant include: - version: "main" - spec: "build_type=Developer %clang@18 ^fenics-dolfinx+superlu-dist" + spec: "build_type=Developer %%clang@18 ^fenics-dolfinx+superlu-dist" python-version: "3.12" steps: - uses: actions/checkout@v5 diff --git a/spack_repo/fenics/packages/py_fenics_basix/package.py b/spack_repo/fenics/packages/py_fenics_basix/package.py index 261d4aef..3be337d4 100644 --- a/spack_repo/fenics/packages/py_fenics_basix/package.py +++ b/spack_repo/fenics/packages/py_fenics_basix/package.py @@ -59,12 +59,12 @@ class PyFenicsBasix(PythonPackage): depends_on(f"fenics-basix@{ver}", type=("build", "run"), when=f"@{ver}") # Ensure fenics-basix is built with same compiler. - depends_on("fenics-basix%gcc", when="%gcc") + depends_on("fenics-basix%gcc", when="%gcc") depends_on("fenics-basix%clang", when="%clang") depends_on("fenics-basix%oneapi", when="%oneapi") depends_on("fenics-basix%intel", when="%intel") depends_on("fenics-basix%nvhpc", when="%nvhpc") - depends_on("fenics-basix%aocc", when="%aocc") + depends_on("fenics-basix%aocc", when="%aocc") # See python/CMakeLists.txt depends_on("cmake@3.21:", when="@0.9:", type="build") diff --git a/spack_repo/fenics/packages/py_fenics_dolfinx/package.py b/spack_repo/fenics/packages/py_fenics_dolfinx/package.py index faa4d272..69a5d84b 100644 --- a/spack_repo/fenics/packages/py_fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/py_fenics_dolfinx/package.py @@ -72,12 +72,12 @@ class PyFenicsDolfinx(PythonPackage): depends_on(f"fenics-dolfinx@{ver}", when=f"@{ver}") # Ensure fenics-dolfinx is built with same compiler. - depends_on("fenics-dolfinx%gcc", when="%gcc") + depends_on("fenics-dolfinx%gcc", when="%gcc") depends_on("fenics-dolfinx%clang", when="%clang") depends_on("fenics-dolfinx%oneapi", when="%oneapi") depends_on("fenics-dolfinx%intel", when="%intel") depends_on("fenics-dolfinx%nvhpc", when="%nvhpc") - depends_on("fenics-dolfinx%aocc", when="%aocc") + depends_on("fenics-dolfinx%aocc", when="%aocc") for ver in ["main", "0.10", "0.9", "0.8", "0.7", "0.6"]: depends_on(f"fenics-basix@{ver}", type=("build", "link"), when=f"@{ver}") From b9f9947dcaa4208b084108f99f88df4e54b75275 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 09:32:00 +0100 Subject: [PATCH 32/90] Black fixes --- spack_repo/fenics/packages/py_fenics_basix/package.py | 8 -------- spack_repo/fenics/packages/py_fenics_dolfinx/package.py | 8 -------- 2 files changed, 16 deletions(-) diff --git a/spack_repo/fenics/packages/py_fenics_basix/package.py b/spack_repo/fenics/packages/py_fenics_basix/package.py index 3be337d4..cafd5b26 100644 --- a/spack_repo/fenics/packages/py_fenics_basix/package.py +++ b/spack_repo/fenics/packages/py_fenics_basix/package.py @@ -58,14 +58,6 @@ class PyFenicsBasix(PythonPackage): for ver in ("main", "0.10.0.post0", "0.10.0", "0.9.0", "0.8.0", "0.7.0", "0.6.0"): depends_on(f"fenics-basix@{ver}", type=("build", "run"), when=f"@{ver}") - # Ensure fenics-basix is built with same compiler. - depends_on("fenics-basix%gcc", when="%gcc") - depends_on("fenics-basix%clang", when="%clang") - depends_on("fenics-basix%oneapi", when="%oneapi") - depends_on("fenics-basix%intel", when="%intel") - depends_on("fenics-basix%nvhpc", when="%nvhpc") - depends_on("fenics-basix%aocc", when="%aocc") - # See python/CMakeLists.txt depends_on("cmake@3.21:", when="@0.9:", type="build") depends_on("cmake@3.19:", when="@0.8", type="build") diff --git a/spack_repo/fenics/packages/py_fenics_dolfinx/package.py b/spack_repo/fenics/packages/py_fenics_dolfinx/package.py index 69a5d84b..53c2eb83 100644 --- a/spack_repo/fenics/packages/py_fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/py_fenics_dolfinx/package.py @@ -71,14 +71,6 @@ class PyFenicsDolfinx(PythonPackage): for ver in ["main", "0.10.0.post4", "0.9.0", "0.8.0", "0.7.2", "0.6.0"]: depends_on(f"fenics-dolfinx@{ver}", when=f"@{ver}") - # Ensure fenics-dolfinx is built with same compiler. - depends_on("fenics-dolfinx%gcc", when="%gcc") - depends_on("fenics-dolfinx%clang", when="%clang") - depends_on("fenics-dolfinx%oneapi", when="%oneapi") - depends_on("fenics-dolfinx%intel", when="%intel") - depends_on("fenics-dolfinx%nvhpc", when="%nvhpc") - depends_on("fenics-dolfinx%aocc", when="%aocc") - for ver in ["main", "0.10", "0.9", "0.8", "0.7", "0.6"]: depends_on(f"fenics-basix@{ver}", type=("build", "link"), when=f"@{ver}") depends_on(f"py-fenics-basix@{ver} +ufl", type=("build", "run"), when=f"@{ver}") From 2dd4f2bc818f3bf5be764443f94bc23860951e31 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 10:45:19 +0100 Subject: [PATCH 33/90] Try specifying a proper MPI --- .github/workflows/spack-matrix.yml | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index f1401345..90044f38 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -13,6 +13,7 @@ jobs: style-check: name: ✨ runs-on: ubuntu-latest + steps: - uses: actions/setup-python@v6 with: @@ -41,6 +42,7 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] spec: ["build_type=Developer %gcc@13", "build_type=Developer %clang@18"] + steps: - uses: actions/checkout@v5 with: @@ -57,7 +59,13 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - spec: ["build_type=Developer %gcc@13", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %clang@18"] + spec: ["build_type=Developer %gcc@13", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %clang@18 ^mpich"] + env: + OMPI_ALLOW_RUN_AS_ROOT: 1 + OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 + PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe # Newer OpenMPI + OMPI_MCA_rmaps_base_oversubscribe: true # Older OpenMPI + steps: - uses: actions/checkout@v5 with: @@ -65,6 +73,7 @@ jobs: - uses: ./spack-fenics/.github/actions/test-package with: spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} + # TODO: Add C++ unit tests fenics-ufcx: needs: style-check @@ -75,6 +84,7 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] spec: ["%gcc@13"] + steps: - uses: actions/checkout@v5 with: @@ -92,6 +102,7 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] spec: ["+ufl %gcc@13", "+ufl %clang@18"] + steps: - uses: actions/checkout@v5 with: @@ -128,14 +139,21 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] python-version: ["3.10", "3.13"] + # NOTE: As of 2/2026 %%clang@18 seems to create dependency on mpilander stub mpi, not mpich. # NOTE: %% propagates to dependencies - without this, C++ ABI seems to be an issue for clang. spec: ["build_type=Developer +petsc4py +slepc4py %%gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", - "build_type=Developer %%clang@18"] + "build_type=Developer %%clang@18 ^openmpi"] # Test new superlu-dist variant include: - version: "main" - spec: "build_type=Developer %%clang@18 ^fenics-dolfinx+superlu-dist" + spec: "build_type=Developer %%clang@18 ^fenics-dolfinx+superlu-dist ^mpich" python-version: "3.12" + env: + OMPI_ALLOW_RUN_AS_ROOT: 1 + OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 + PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe # Newer OpenMPI + OMPI_MCA_rmaps_base_oversubscribe: true # Older OpenMPI + steps: - uses: actions/checkout@v5 with: @@ -173,6 +191,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] + steps: - uses: actions/checkout@v5 with: @@ -199,6 +218,7 @@ jobs: fail-fast: false matrix: version: ["main", "2025.2", "2025.1", "2024.2", "2024.1"] + steps: - uses: actions/checkout@v5 with: From 81ce9f473b1e6baf0da510553347605fb669f3ec Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 11:22:49 +0100 Subject: [PATCH 34/90] Try and use unify to get C++ to propagate down leafs. --- .github/actions/test-package/action.yml | 5 ++++- .github/workflows/spack-matrix.yml | 18 +++++++----------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index b9ec8234..caee863c 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -61,7 +61,10 @@ runs: - name: Concretize shell: spack-bash {0} - run: spack -e ./env concretize -j 4 + run: | + spack -e ./env config add concretizer:reuse:false + spack -e ./env config add concretizer:unify:true + spack -e ./env concretize -j 4 - name: Install shell: spack-bash {0} diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 90044f38..135d06dd 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -63,8 +63,7 @@ jobs: env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 - PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe # Newer OpenMPI - OMPI_MCA_rmaps_base_oversubscribe: true # Older OpenMPI + PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe steps: - uses: actions/checkout@v5 @@ -101,7 +100,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - spec: ["+ufl %gcc@13", "+ufl %clang@18"] + spec: ["build_type=Developer +ufl %gcc@13", "build_type=Developer +ufl %clang@18"] steps: - uses: actions/checkout@v5 @@ -139,20 +138,17 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] python-version: ["3.10", "3.13"] - # NOTE: As of 2/2026 %%clang@18 seems to create dependency on mpilander stub mpi, not mpich. - # NOTE: %% propagates to dependencies - without this, C++ ABI seems to be an issue for clang. - spec: ["build_type=Developer +petsc4py +slepc4py %%gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", - "build_type=Developer %%clang@18 ^openmpi"] + spec: ["build_type=Developer +petsc4py +slepc4py %gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", + "build_type=Developer %clang@18 ^openmpi"] # Test new superlu-dist variant include: - version: "main" - spec: "build_type=Developer %%clang@18 ^fenics-dolfinx+superlu-dist ^mpich" + spec: "build_type=Developer %clang@18 ^fenics-dolfinx+superlu-dist ^mpich" python-version: "3.12" env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 - PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe # Newer OpenMPI - OMPI_MCA_rmaps_base_oversubscribe: true # Older OpenMPI + PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe steps: - uses: actions/checkout@v5 @@ -181,7 +177,7 @@ jobs: spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} python -m pytest -n auto -k "not test_cffi_expression" python/test/unit - mpiexec -np 3 python -m pytest -k "not test_cffi_expression" python/test/unit + mpiexec -n 3 python -m pytest -k "not test_cffi_expression" python/test/unit py-fenics-ffcx: needs: style-check From ed5711fece4c617e11c2dfaf8732ed7abc90709b Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 11:27:10 +0100 Subject: [PATCH 35/90] Back out, didn't work. --- .github/actions/test-package/action.yml | 1 - .github/workflows/spack-matrix.yml | 18 +++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index caee863c..3aa34be6 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -62,7 +62,6 @@ runs: - name: Concretize shell: spack-bash {0} run: | - spack -e ./env config add concretizer:reuse:false spack -e ./env config add concretizer:unify:true spack -e ./env concretize -j 4 diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 135d06dd..90044f38 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -63,7 +63,8 @@ jobs: env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 - PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe + PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe # Newer OpenMPI + OMPI_MCA_rmaps_base_oversubscribe: true # Older OpenMPI steps: - uses: actions/checkout@v5 @@ -100,7 +101,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - spec: ["build_type=Developer +ufl %gcc@13", "build_type=Developer +ufl %clang@18"] + spec: ["+ufl %gcc@13", "+ufl %clang@18"] steps: - uses: actions/checkout@v5 @@ -138,17 +139,20 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] python-version: ["3.10", "3.13"] - spec: ["build_type=Developer +petsc4py +slepc4py %gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", - "build_type=Developer %clang@18 ^openmpi"] + # NOTE: As of 2/2026 %%clang@18 seems to create dependency on mpilander stub mpi, not mpich. + # NOTE: %% propagates to dependencies - without this, C++ ABI seems to be an issue for clang. + spec: ["build_type=Developer +petsc4py +slepc4py %%gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", + "build_type=Developer %%clang@18 ^openmpi"] # Test new superlu-dist variant include: - version: "main" - spec: "build_type=Developer %clang@18 ^fenics-dolfinx+superlu-dist ^mpich" + spec: "build_type=Developer %%clang@18 ^fenics-dolfinx+superlu-dist ^mpich" python-version: "3.12" env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 - PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe + PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe # Newer OpenMPI + OMPI_MCA_rmaps_base_oversubscribe: true # Older OpenMPI steps: - uses: actions/checkout@v5 @@ -177,7 +181,7 @@ jobs: spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} python -m pytest -n auto -k "not test_cffi_expression" python/test/unit - mpiexec -n 3 python -m pytest -k "not test_cffi_expression" python/test/unit + mpiexec -np 3 python -m pytest -k "not test_cffi_expression" python/test/unit py-fenics-ffcx: needs: style-check From c820020ee8e4f784e2fe29d5d6f82d2361ea3564 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 11:43:25 +0100 Subject: [PATCH 36/90] Fixes, should pass (eep) --- .github/workflows/spack-matrix.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 90044f38..e9e00dc0 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -101,7 +101,8 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - spec: ["+ufl %gcc@13", "+ufl %clang@18"] + # Make sure fenics-basix and py-fenics-basix build with same compiler/ABI. + spec: ["+ufl %gcc@13 ^fenics-basix %gcc@13", "+ufl %clang@18 ^fenics-basix %clang@18"] steps: - uses: actions/checkout@v5 @@ -140,7 +141,8 @@ jobs: version: ["main", "0.10", "0.9", "0.8"] python-version: ["3.10", "3.13"] # NOTE: As of 2/2026 %%clang@18 seems to create dependency on mpilander stub mpi, not mpich. - # NOTE: %% propagates to dependencies - without this, C++ ABI seems to be an issue for clang. + # NOTE: %% propagates to dependencies - without this, C++ ABI mixing + # seems to be an issue through Basix/DOLFINx. spec: ["build_type=Developer +petsc4py +slepc4py %%gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", "build_type=Developer %%clang@18 ^openmpi"] # Test new superlu-dist variant @@ -171,7 +173,7 @@ jobs: spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} python -m pytest -n auto -k "not test_cffi_expression and not test_cube_distance" python/test/unit - mpiexec -n 3 python -m pytest -k "not test_cffi_expression and not test_cube_distance" python/test/unit + mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit - name: Run tests if: ${{ matrix.version != '0.8' && matrix.version != '0.9'}} shell: spack-bash {0} @@ -180,8 +182,8 @@ jobs: spack install --add py-pytest py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} - python -m pytest -n auto -k "not test_cffi_expression" python/test/unit - mpiexec -np 3 python -m pytest -k "not test_cffi_expression" python/test/unit + python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_symmetry_interior_facet_assembly[mesh1]" python/test/unit + mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_symmetry_interior_facet_assembly[mesh1]" python/test/unit py-fenics-ffcx: needs: style-check From f68cfd79e18061c985c1a129d788ac35067f1866 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 13:30:31 +0100 Subject: [PATCH 37/90] Try tests + try tighter spec of %clang@18 --- .github/workflows/spack-matrix.yml | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index e9e00dc0..d28f187f 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -59,7 +59,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - spec: ["build_type=Developer %gcc@13", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %clang@18 ^mpich"] + spec: ["build_type=Developer %gcc@13 catch2", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %clang@18 ^mpich catch2"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 @@ -73,7 +73,18 @@ jobs: - uses: ./spack-fenics/.github/actions/test-package with: spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} - # TODO: Add C++ unit tests + - name: Run tests + shell: spack-bash {0} + run: | + spack env activate ./env + spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} + spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} + cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer + 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 + fenics-ufcx: needs: style-check @@ -102,7 +113,7 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] # Make sure fenics-basix and py-fenics-basix build with same compiler/ABI. - spec: ["+ufl %gcc@13 ^fenics-basix %gcc@13", "+ufl %clang@18 ^fenics-basix %clang@18"] + spec: ["+ufl %gcc@13 ^fenics-basix%gcc@13", "+ufl %clang@18 ^fenics-basix%clang@18"] steps: - uses: actions/checkout@v5 @@ -140,15 +151,14 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] python-version: ["3.10", "3.13"] - # NOTE: As of 2/2026 %%clang@18 seems to create dependency on mpilander stub mpi, not mpich. - # NOTE: %% propagates to dependencies - without this, C++ ABI mixing - # seems to be an issue through Basix/DOLFINx. - spec: ["build_type=Developer +petsc4py +slepc4py %%gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", - "build_type=Developer %%clang@18 ^openmpi"] + # NOTE: As of 2/2026 %clang@18 seems to create dependency on mpilander stub mpi or intelmpi. + # NOTE: Some overspecification of %clang@18 to fix ABI issues (std::string). + spec: ["build_type=Developer +petsc4py +slepc4py %gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", + "build_type=Developer %clang@18 ^openmpi ^fenics-dolfinx%clang@18 ^py-fenics-dolfinx%clang@18 ^fenics-basix%clang@18"] # Test new superlu-dist variant include: - version: "main" - spec: "build_type=Developer %%clang@18 ^fenics-dolfinx+superlu-dist ^mpich" + spec: "build_type=Developer %clang@18 ^mpich ^fenics-dolfinx+superlu-dist%clang@18 ^py-fenics-dolfinx%clang@18 ^fenics-basix%clang@18" python-version: "3.12" env: OMPI_ALLOW_RUN_AS_ROOT: 1 @@ -172,7 +182,7 @@ jobs: spack install --add py-pytest@8.4 py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} - python -m pytest -n auto -k "not test_cffi_expression and not test_cube_distance" python/test/unit + python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit - name: Run tests if: ${{ matrix.version != '0.8' && matrix.version != '0.9'}} From 5ca5d617ff5ba9a324b2d71d9f1f6a7f5f6c6380 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 13:45:26 +0100 Subject: [PATCH 38/90] Fix. --- .github/workflows/spack-matrix.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index d28f187f..ea05d8f7 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -59,7 +59,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - spec: ["build_type=Developer %gcc@13 catch2", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %clang@18 ^mpich catch2"] + spec: ["build_type=Developer %gcc@13", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %%clang@18 ^mpich"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 @@ -77,6 +77,7 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env + spack install --add catch2 spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer @@ -113,7 +114,7 @@ jobs: matrix: version: ["main", "0.10", "0.9", "0.8"] # Make sure fenics-basix and py-fenics-basix build with same compiler/ABI. - spec: ["+ufl %gcc@13 ^fenics-basix%gcc@13", "+ufl %clang@18 ^fenics-basix%clang@18"] + spec: ["+ufl %gcc@13 ^fenics-basix%gcc@13", "+ufl %%clang@18 ^fenics-basix%clang@18"] steps: - uses: actions/checkout@v5 @@ -154,11 +155,11 @@ jobs: # NOTE: As of 2/2026 %clang@18 seems to create dependency on mpilander stub mpi or intelmpi. # NOTE: Some overspecification of %clang@18 to fix ABI issues (std::string). spec: ["build_type=Developer +petsc4py +slepc4py %gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", - "build_type=Developer %clang@18 ^openmpi ^fenics-dolfinx%clang@18 ^py-fenics-dolfinx%clang@18 ^fenics-basix%clang@18"] + "build_type=Developer %%clang@18 ^openmpi"] # Test new superlu-dist variant include: - version: "main" - spec: "build_type=Developer %clang@18 ^mpich ^fenics-dolfinx+superlu-dist%clang@18 ^py-fenics-dolfinx%clang@18 ^fenics-basix%clang@18" + spec: "build_type=Developer %%clang@18 ^mpich ^fenics-dolfinx+superlu-dist" python-version: "3.12" env: OMPI_ALLOW_RUN_AS_ROOT: 1 From 01168bf6d257f738c1798a9faacff06262524ed7 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 13:55:15 +0100 Subject: [PATCH 39/90] Load cmake --- .github/workflows/spack-matrix.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index ea05d8f7..3e7ee159 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -77,8 +77,9 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env - spack install --add catch2 - spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} + spack install --add catch2 cmake + spack load catch2 cmake + spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer cmake --build build/test From 6ea98f17c32396ee26ddfeea5ae14441c5b50d46 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 13:55:33 +0100 Subject: [PATCH 40/90] Try with just cmake --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 3e7ee159..67bb801f 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -78,7 +78,7 @@ jobs: run: | spack env activate ./env spack install --add catch2 cmake - spack load catch2 cmake + spack load cmake spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer From 599e16e6e57c8e67360445f4aacb46c2ba9852aa Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 14:08:01 +0100 Subject: [PATCH 41/90] Fix. --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 67bb801f..89ec620a 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -77,7 +77,7 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env - spack install --add catch2 cmake + spack install --add catch2 cmake %gcc@13 spack load cmake spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} From 75000d688b4b357f5626b35f68ef566eadc2d46a Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 14:29:09 +0100 Subject: [PATCH 42/90] Fix cmake version to load --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 89ec620a..78b7449e 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -78,7 +78,7 @@ jobs: run: | spack env activate ./env spack install --add catch2 cmake %gcc@13 - spack load cmake + spack load cmake@31.31.11 spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer From 7d2356460c4c34b28df6480384c20515fce3b701 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 14:49:01 +0100 Subject: [PATCH 43/90] Try this --- .github/workflows/spack-matrix.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 78b7449e..67bb801f 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -77,8 +77,8 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env - spack install --add catch2 cmake %gcc@13 - spack load cmake@31.31.11 + spack install --add catch2 cmake + spack load cmake spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer From 4c687ac2635c4232fa18c127b3eef2f3023d7399 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 15:03:09 +0100 Subject: [PATCH 44/90] Don't allow duplicates (might be too strong) --- .github/actions/test-package/action.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index 3aa34be6..e36e3d14 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -63,6 +63,7 @@ runs: shell: spack-bash {0} run: | spack -e ./env config add concretizer:unify:true + spack -e ./env config add concretizer:duplicates:strategy:none spack -e ./env concretize -j 4 - name: Install From 4f43b51f793cacb4e4b3e66eecff4097c7a3b8ef Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 15:09:28 +0100 Subject: [PATCH 45/90] Fix. --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 67bb801f..f42af5ad 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -59,7 +59,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - spec: ["build_type=Developer %gcc@13", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %%clang@18 ^mpich"] + spec: ["build_type=Developer %%clang@18", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 From 49c9ba9a4d968e7d7a51cef5135c8215afa83701 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Tue, 10 Feb 2026 17:42:11 +0100 Subject: [PATCH 46/90] Load first cmake --- .github/actions/test-package/action.yml | 1 - .github/workflows/spack-matrix.yml | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index e36e3d14..3aa34be6 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -63,7 +63,6 @@ runs: shell: spack-bash {0} run: | spack -e ./env config add concretizer:unify:true - spack -e ./env config add concretizer:duplicates:strategy:none spack -e ./env concretize -j 4 - name: Install diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index f42af5ad..2dc883a3 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -78,7 +78,7 @@ jobs: run: | spack env activate ./env spack install --add catch2 cmake - spack load cmake + spack load --first cmake spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer @@ -160,7 +160,7 @@ jobs: # Test new superlu-dist variant include: - version: "main" - spec: "build_type=Developer %%clang@18 ^mpich ^fenics-dolfinx+superlu-dist" + spec: "build_type=Developer %%clang@18 ^mpich-fortran ^fenics-dolfinx+superlu-dist" python-version: "3.12" env: OMPI_ALLOW_RUN_AS_ROOT: 1 From bf9f2670d427b67abf9012d783b20c2bfd6cf427 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Wed, 11 Feb 2026 22:01:58 +0100 Subject: [PATCH 47/90] Add Spacks pyproject --- pyproject.toml | 531 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 531 insertions(+) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..c081cdb8 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,531 @@ +[project] +name = "spack" +description = "The spack package manager" +requires-python = ">=3.6" +dependencies = ["clingo", "setuptools"] +dynamic = ["version"] + +[tool.hatch.version] +path = "repos/spack_repo/builtin/__init__.py" + +[project.optional-dependencies] +dev = [ + "pip>=21.3", + "pytest", + "pytest-xdist", + "setuptools", + "click", + "black", + "mypy", + "isort", + "flake8", + "vermin", +] +ci = ["pytest-cov", "codecov[toml]"] + +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.build.targets.wheel] +include = [ + "/repos", + "CITATION.cff", + "COPYRIGHT", + "LICENSE-APACHE", + "LICENSE-MIT", + "NOTICE", + "README.md", + "SECURITY.md", +] + +[tool.hatch.envs.default] +features = ["dev"] + +[tool.hatch.envs.ci] +features = ["dev", "ci"] + +[tool.ruff] +line-length = 99 +extend-include = ["bin/spack"] +extend-exclude = ["lib/spack/external", "*.pyi"] + +# This is the Spack package API. We allow these functions to be imported with +# from spack.package import *, and we should update this when the package API +# changes. This also serves to catch the usage of things that are NOT in the +# package API, so that we can avoid having them in builtin. +builtins = [ + # core spack build environment + "configure", + "cscript", + "dso_suffix", + "make_jobs", + "msbuild", + "nmake", + "prefix", + "python", + "python_include", + "python_platlib", + "python_purelib", + "spack_cc", + "spack_cxx", + "spack_f77", + "spack_fc", + "static_to_shared_library", + # defined in packages or build systems, e.g. -- these can be removed over time + "aclocal", + "autoconf", + "autoheader", + "autom4te", + "automake", + "autoreconf", + "autoscan", + "autoupdate", + "bazel", + "cargo", + "cmake", + "ctest", + "gem", + "glibtool", + "glibtoolize", + "gmake", + "go", + "ifnames", + "kentutils_htslib_include_dir", + "kentutils_include_dir", + "kentutils_lib_dir", + "libtool", + "libtoolize", + "lua", + "luarocks", + "make", + "make", + "meson", + "msbuild", + "ninja", + "ninja", + "nmake", + "octave", + "perl", + "perl_lib_dir", + "pip", + "plumed", + "pypy", + "python", + "python_include", + "python_platlib", + "python_purelib", + "qmake", + "R", + "r_lib_dir", + "rake", + "ruby", + "scons", + # v2.0 + "BaseBuilder", + "Builder", + "Dict", + "EnvironmentModifications", + "Executable", + "FileFilter", + "FileList", + "HeaderList", + "InstallError", + "LibraryList", + "List", + "MakeExecutable", + "NoHeadersError", + "NoLibrariesError", + "Optional", + "PackageBase", + "Prefix", + "ProcessError", + "SkipTest", + "Spec", + "Version", + "all_deptypes", + "ancestor", + "any_combination_of", + "auto_or_any_combination_of", + "bash_completion_path", + "build_system_flags", + "build_system", + "cache_extra_test_sources", + "can_access", + "can_splice", + "cd", + "change_sed_delimiter", + "check_outputs", + "conditional", + "conflicts", + "copy_tree", + "copy", + "default_args", + "depends_on", + "determine_number_of_jobs", + "disjoint_sets", + "env_flags", + "env", + "extends", + "filter_compiler_wrappers", + "filter_file", + "find_all_headers", + "find_first", + "find_headers", + "find_libraries", + "find_required_file", + "find_system_libraries", + "find", + "fish_completion_path", + "fix_darwin_install_name", + "force_remove", + "force_symlink", + "get_escaped_text_output", + "inject_flags", + "install_test_root", + "install_tree", + "install", + "is_exe", + "join_path", + "keep_modification_time", + "library_extensions", + "license", + "maintainers", + "makedirs", + "mkdir", + "mkdirp", + "move", + "on_package_attributes", + "patch", + "provides", + "pwd", + "redistribute", + "register_builder", + "remove_directory_contents", + "remove_linked_tree", + "remove", + "removedirs", + "rename", + "requires", + "resource", + "rmtree", + "run_after", + "run_before", + "set_executable", + "set_install_permissions", + "symlink", + "test_part", + "touch", + "tty", + "variant", + "ver", + "version", + "when", + "which_string", + "which", + "working_dir", + "zsh_completion_path", + # v2.1 + "CompilerError", + "SpackError", + # v2.2 + "BuilderWithDefaults", + "ClassProperty", + "CompilerPropertyDetector", + "GenericBuilder", + "HKEY", + "LC_ID_DYLIB", + "LinkTree", + "MachO", + "ModuleChangePropagator", + "Package", + "WindowsRegistryView", + "apply_macos_rpath_fixups", + "classproperty", + "compare_output_file", + "compare_output", + "compile_c_and_execute", + "compiler_spec", + "create_builder", + "dedupe", + "delete_needed_from_elf", + "delete_rpath", + "environment_modifications_for_specs", + "execute_install_time_tests", + "filter_shebang", + "filter_system_paths", + "find_all_libraries", + "find_compilers", + "get_cmake_prefix_path", + "get_effective_jobs", + "get_elf_compat", + "get_path_args_from_module_line", + "get_user", + "has_shebang", + "host_platform", + "is_system_path", + "join_url", + "kernel_version", + "libc_from_dynamic_linker", + "macos_version", + "make_package_test_rpath", + "memoized", + "microarchitecture_flags_from_target", + "microarchitecture_flags", + "module_command", + "parse_dynamic_linker", + "parse_elf", + "path_contains_subdirectory", + "readlink", + "safe_remove", + "sbang_install_path", + "sbang_shebang_line", + "set_env", + "shared_library_suffix", + "spack_script", + "static_library_suffix", + "substitute_version_in_url", + "windows_sfn", +] + + +[tool.ruff.format] +skip-magic-trailing-comma = false + +[tool.ruff.lint] +extend-select = ["I"] +ignore = ["E731", "E203", "F403", "F811"] + +[tool.ruff.lint.isort] +split-on-trailing-comma = false +section-order = [ + "future", + "standard-library", + "third-party", + "llnl", + "spack", + "first-party", + "local-folder", +] + +[tool.ruff.lint.isort.sections] +spack = ["spack"] +llnl = ["llnl"] + +[tool.ruff.lint.per-file-ignores] +"var/spack/*/package.py" = ["F403", "F405", "F811", "F821"] +"*-ci-package.py" = ["F403", "F405", "F821"] + +[tool.black] +line-length = 99 +include = "(repos/spack_repo|tests)/.*\\.pyi?$" +skip_magic_trailing_comma = true + +[tool.isort] +line_length = 99 +profile = "black" +sections = [ + "FUTURE", + "STDLIB", + "THIRDPARTY", + "LLNL", + "FIRSTPARTY", + "LOCALFOLDER", +] +known_first_party = "spack" +known_llnl = "llnl" +known_third_party = ["ruamel", "six"] +src_paths = "lib" +honor_noqa = true + +[tool.mypy] +files = [ + "repos/spack_repo/builtin/packages/*/package.py", + "repos/spack_repo/builtin/build_systems/*.py", +] +mypy_path = ["spack-core/lib/spack", "spack-core/lib/spack/external", "repos/"] +allow_redefinition = true + +# This and a generated import file allows supporting packages +namespace_packages = true + +# To avoid re-factoring all the externals, ignore errors and missing imports +# globally, then turn back on in spack and spack submodules +ignore_errors = true +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "spack.*" +ignore_errors = false +ignore_missing_imports = false + +[[tool.mypy.overrides]] +module = "spack_repo.*" +ignore_errors = false +ignore_missing_imports = false +# we can't do this here, not a module scope option, in spack style instead +# disable_error_code = 'no-redef' + +[[tool.mypy.overrides]] +module = "llnl.*" +ignore_errors = false +ignore_missing_imports = false + +[[tool.mypy.overrides]] +module = "spack.test.packages" +ignore_errors = true + +# ignore errors in fake import path for packages +[[tool.mypy.overrides]] +module = "spack.pkg.*" +ignore_errors = true +ignore_missing_imports = true + +# Spack imports a number of external packages, and they *may* require Python 3.8 or +# higher in recent versions. This can cause mypy to fail because we check for 3.7 +# compatibility. We could restrict mypy to run for the oldest supported version (3.7), +# but that means most developers won't be able to run mypy, which means it'll fail +# more in CI. Instead, we exclude these imported packages from mypy checking. +[[tool.mypy.overrides]] +module = [ + "IPython", + "altgraph", + "attr", + "boto3", + "botocore", + "distro", + "importlib.metadata", + "jinja2", + "jsonschema", + "macholib", + "markupsafe", + "numpy", + "pkg_resources", + "pyristent", + "pytest", + "ruamel.yaml", + "six", +] +follow_imports = "skip" +follow_imports_for_stubs = true + +[tool.pyright] +useLibraryCodeForTypes = true +reportMissingImports = true +reportWildcardImportFromLibrary = false +include = ["lib/spack", "var/spack/repos", "var/spack/test_repos"] +ignore = ["lib/spack/external"] +extraPaths = ["lib/spack", "lib/spack/external"] + + +[tool.coverage.run] +parallel = true +concurrency = ["multiprocessing"] +branch = true +source = ["bin", "lib"] +data_file = "./tests-coverage/.coverage" +omit = [ + "lib/spack/spack/test/*", + "lib/spack/docs/*", + "lib/spack/external/*", + "share/spack/qa/*", +] + +[tool.coverage.report] +# Regexes for lines to exclude from consideration +exclude_lines = [ + # Have to re-enable the standard pragma + "pragma: no cover", + + # Don't complain about missing debug-only code: + "def __repr__", + "if self\\.debug", + + # Don't complain if tests don't hit defensive assertion code: + "raise AssertionError", + "raise NotImplementedError", + + # Don't complain if non-runnable code isn't run: + "if 0:", + "if False:", + "if __name__ == .__main__.:", +] +ignore_errors = true + +[tool.coverage.paths] +source = [ + ".", + "/Users/runner/work/spack/spack", + "/System/Volumes/Data/home/runner/work/spack/spack", + "D:\\a\\spack\\spack", +] + +[tool.coverage.html] +directory = "htmlcov" + +[tool.vendoring] +destination = "lib/spack/external/_vendoring" +requirements = "lib/spack/external/vendor.txt" +namespace = "" + +protected-files = ["__init__.py", "README.rst", "vendor.txt"] +patches-dir = "lib/spack/external/patches" + +[tool.vendoring.transformations] +substitute = [ + { match = "typing_extensions", replace = "_vendoring.typing_extensions" }, + { match = "ruamel.yaml", replace = "_vendoring.ruamel.yaml" }, + { match = "altgraph", replace = "_vendoring.altgraph" }, + { match = "macholib", replace = "_vendoring.macholib" }, + { match = "from six", replace = "from _vendoring.six" }, + { match = "markupsafe", replace = "_vendoring.markupsafe" }, + { match = "jinja2", replace = "_vendoring.jinja2" }, + { match = "pyrsistent", replace = "_vendoring.pyrsistent" }, + { match = "import attr\n", replace = "import _vendoring.attr\n" }, + { match = "from attr", replace = "from _vendoring.attr" }, + { match = "import jsonschema", replace = "import _vendoring.jsonschema" }, + { match = "from jsonschema", replace = "from _vendoring.jsonschema" }, +] +drop = [ + # contains unnecessary scripts + "bin/", + # interpreter and OS specific msgpack libs + "msgpack/*.so", + # unneeded parts of setuptools + "easy_install.py", + "setuptools", + "pkg_resources/_vendor/", + "pkg_resources/extern/", + # trim vendored pygments styles and lexers + "pygments/styles/[!_]*.py", + "^pygments/lexers/(?!python|__init__|_mapping).*\\.py$", + # trim rich's markdown support + "rich/markdown.py", + # ruamel.yaml installs unneded files + "ruamel.*.pth", + "pvectorc.*.so", + # Trim jsonschema tests + "jsonschema/tests", + "archspec/json/tests", + "archspec/vendor/cpuid/.gitignore", + "pyrsistent/__init__.pyi", +] + +[tool.vendoring.typing-stubs] +_pyrsistent_version = [] +altgraph = [] +archspec = [] +distro = [] +jsonschema = [] +macholib = [] +pyrsistent = [] +ruamel = [] +six = [] + +[tool.vendoring.license.directories] +setuptools = "pkg_resources" + +[tool.vendoring.license.fallback-urls] +CacheControl = "https://raw.githubusercontent.com/ionrock/cachecontrol/v0.12.6/LICENSE.txt" +distlib = "https://bitbucket.org/pypa/distlib/raw/master/LICENSE.txt" +webencodings = "https://github.com/SimonSapin/python-webencodings/raw/master/LICENSE" From 07d567f5253921f2f9594c357d0c6d7912863104 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Wed, 11 Feb 2026 22:03:29 +0100 Subject: [PATCH 48/90] black --- .../fenics/packages/fenics_basix/package.py | 4 ++- .../fenics/packages/fenics_dolfinx/package.py | 34 +++++-------------- .../fenics/packages/fenics_ufcx/package.py | 25 +++----------- .../packages/py_fenics_basix/package.py | 28 ++++----------- .../packages/py_fenics_dolfinx/package.py | 29 ++++------------ .../fenics/packages/py_fenics_ffcx/package.py | 4 ++- 6 files changed, 31 insertions(+), 93 deletions(-) diff --git a/spack_repo/fenics/packages/fenics_basix/package.py b/spack_repo/fenics/packages/fenics_basix/package.py index 8581f6e1..a85afc31 100644 --- a/spack_repo/fenics/packages/fenics_basix/package.py +++ b/spack_repo/fenics/packages/fenics_basix/package.py @@ -18,7 +18,9 @@ class FenicsBasix(CMakePackage): license("MIT") version("main", branch="main", no_cache=True) - version("0.10.0.post0", sha256="11a6482fb8d7204fbd77aaf457a9ae3e75db1707b3e30ea2c938eccfee925ea4") + version( + "0.10.0.post0", sha256="11a6482fb8d7204fbd77aaf457a9ae3e75db1707b3e30ea2c938eccfee925ea4" + ) version("0.10.0", sha256="b93221dac7d3fea8c10e77617f6201036de35d0c5437440b718de69a28c3773f") version("0.9.0", sha256="60e96b2393084729b261cb10370f0e44d12735ab3dbd1f15890dec23b9e85329") version("0.8.0", sha256="b299af82daf8fa3e4845e17f202491fe71b313bf6ab64c767a5287190b3dd7fe") diff --git a/spack_repo/fenics/packages/fenics_dolfinx/package.py b/spack_repo/fenics/packages/fenics_dolfinx/package.py index 5b707521..61462c1b 100644 --- a/spack_repo/fenics/packages/fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/fenics_dolfinx/package.py @@ -17,30 +17,16 @@ class FenicsDolfinx(CMakePackage): version("main", branch="main", no_cache=True) version( - "0.10.0.post4", - sha256="3f827a88ab52843fbd7a5cc7814ecba165bdec65fd10df05eb031c286e8cd605", + "0.10.0.post4", sha256="3f827a88ab52843fbd7a5cc7814ecba165bdec65fd10df05eb031c286e8cd605" ) version( - "0.10.0.post2", - sha256="eae83794fee8141c80c59c03a2f4ac208af2b62c8f36e5d19c93e0d279029f52", - ) - version( - "0.9.0", - sha256="b266c74360c2590c5745d74768c04568c965b44739becca4cd6b5aa58cdbbbd1", - ) - version( - "0.8.0", - sha256="acf3104d9ecc0380677a6faf69eabfafc58d0cce43f7777e1307b95701c7cad9", + "0.10.0.post2", sha256="eae83794fee8141c80c59c03a2f4ac208af2b62c8f36e5d19c93e0d279029f52" ) + version("0.9.0", sha256="b266c74360c2590c5745d74768c04568c965b44739becca4cd6b5aa58cdbbbd1") + version("0.8.0", sha256="acf3104d9ecc0380677a6faf69eabfafc58d0cce43f7777e1307b95701c7cad9") with default_args(deprecated=True): - version( - "0.7.2", - sha256="7d9ce1338ce66580593b376327f23ac464a4ce89ef63c105efc1a38e5eae5c0b", - ) - version( - "0.6.0", - sha256="eb8ac2bb2f032b0d393977993e1ab6b4101a84d54023a67206e3eac1a8d79b80", - ) + version("0.7.2", sha256="7d9ce1338ce66580593b376327f23ac464a4ce89ef63c105efc1a38e5eae5c0b") + version("0.6.0", sha256="eb8ac2bb2f032b0d393977993e1ab6b4101a84d54023a67206e3eac1a8d79b80") patch("0.8-boost-filesystem.patch", when="@0.8") @@ -74,9 +60,7 @@ class FenicsDolfinx(CMakePackage): variant("slepc", default=False, description="SLEPc support") variant("adios2", default=False, description="ADIOS2 support") variant("petsc", default=False, description="PETSc support") - variant( - "superlu-dist", default=False, description="SuperLU_DIST support", when="@main" - ) + variant("superlu-dist", default=False, description="SuperLU_DIST support", when="@main") conflicts("~petsc", when="+slepc", msg="+slepc requires +petsc") @@ -118,9 +102,7 @@ def cmake_args(self): self.define_from_variant("DOLFINX_ENABLE_ADIOS2", "adios2"), self.define("DOLFINX_UFCX_PYTHON", False), self.define("DOLFINX_ENABLE_KAHIP", "partitioners=kahip" in self.spec), - self.define( - "DOLFINX_ENABLE_PARMETIS", "partitioners=parmetis" in self.spec - ), + self.define("DOLFINX_ENABLE_PARMETIS", "partitioners=parmetis" in self.spec), self.define("DOLFINX_ENABLE_SCOTCH", "partitioners=scotch" in self.spec), self.define("DOLFINX_ENABLE_SUPERLU_DIST", "superlu-dist" in self.spec), ] diff --git a/spack_repo/fenics/packages/fenics_ufcx/package.py b/spack_repo/fenics/packages/fenics_ufcx/package.py index 5127071f..db187cff 100644 --- a/spack_repo/fenics/packages/fenics_ufcx/package.py +++ b/spack_repo/fenics/packages/fenics_ufcx/package.py @@ -19,27 +19,12 @@ class FenicsUfcx(CMakePackage): license("Unlicense") version("main", branch="main", no_cache=True) - version( - "0.10.0", - sha256="fa27e2dc68988cbf9aca537eb5a58483f75cc719c1a383713b7f8cca49844ff9", - ) - version( - "0.9.0", - sha256="afa517272a3d2249f513cb711c50b77cf8368dd0b8f5ea4b759142229204a448", - ) - version( - "0.8.0", - sha256="8a854782dbd119ec1c23c4522a2134d5281e7f1bd2f37d64489f75da055282e3", - ) + version("0.10.0", sha256="fa27e2dc68988cbf9aca537eb5a58483f75cc719c1a383713b7f8cca49844ff9") + version("0.9.0", sha256="afa517272a3d2249f513cb711c50b77cf8368dd0b8f5ea4b759142229204a448") + version("0.8.0", sha256="8a854782dbd119ec1c23c4522a2134d5281e7f1bd2f37d64489f75da055282e3") with default_args(deprecated=True): - version( - "0.7.0", - sha256="7f3c3ca91d63ce7831d37799cc19d0551bdcd275bdfa4c099711679533dd1c71", - ) - version( - "0.6.0", - sha256="076fad61d406afffd41019ae1abf6da3f76406c035c772abad2156127667980e", - ) + version("0.7.0", sha256="7f3c3ca91d63ce7831d37799cc19d0551bdcd275bdfa4c099711679533dd1c71") + version("0.6.0", sha256="076fad61d406afffd41019ae1abf6da3f76406c035c772abad2156127667980e") depends_on("cmake@3.19:", type="build") depends_on("c", type="build") diff --git a/spack_repo/fenics/packages/py_fenics_basix/package.py b/spack_repo/fenics/packages/py_fenics_basix/package.py index cafd5b26..dc20efad 100644 --- a/spack_repo/fenics/packages/py_fenics_basix/package.py +++ b/spack_repo/fenics/packages/py_fenics_basix/package.py @@ -18,30 +18,14 @@ class PyFenicsBasix(PythonPackage): version("main", branch="main", no_cache=True) version( - "0.10.0.post0", - sha256="11a6482fb8d7204fbd77aaf457a9ae3e75db1707b3e30ea2c938eccfee925ea4", - ) - version( - "0.10.0", - sha256="b93221dac7d3fea8c10e77617f6201036de35d0c5437440b718de69a28c3773f", - ) - version( - "0.9.0", - sha256="60e96b2393084729b261cb10370f0e44d12735ab3dbd1f15890dec23b9e85329", - ) - version( - "0.8.0", - sha256="b299af82daf8fa3e4845e17f202491fe71b313bf6ab64c767a5287190b3dd7fe", + "0.10.0.post0", sha256="11a6482fb8d7204fbd77aaf457a9ae3e75db1707b3e30ea2c938eccfee925ea4" ) + version("0.10.0", sha256="b93221dac7d3fea8c10e77617f6201036de35d0c5437440b718de69a28c3773f") + version("0.9.0", sha256="60e96b2393084729b261cb10370f0e44d12735ab3dbd1f15890dec23b9e85329") + version("0.8.0", sha256="b299af82daf8fa3e4845e17f202491fe71b313bf6ab64c767a5287190b3dd7fe") with default_args(deprecated=True): - version( - "0.7.0", - sha256="9bee81b396ee452eec8d9735f278cb44cb6994c6bc30aec8ed9bb4b12d83fa7f", - ) - version( - "0.6.0", - sha256="687ae53153c98facac4080dcdc7081701db1dcea8c5e7ae3feb72aec17f83304", - ) + version("0.7.0", sha256="9bee81b396ee452eec8d9735f278cb44cb6994c6bc30aec8ed9bb4b12d83fa7f") + version("0.6.0", sha256="687ae53153c98facac4080dcdc7081701db1dcea8c5e7ae3feb72aec17f83304") # CMake build type variant( diff --git a/spack_repo/fenics/packages/py_fenics_dolfinx/package.py b/spack_repo/fenics/packages/py_fenics_dolfinx/package.py index 53c2eb83..7aafdcd3 100644 --- a/spack_repo/fenics/packages/py_fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/py_fenics_dolfinx/package.py @@ -19,26 +19,13 @@ class PyFenicsDolfinx(PythonPackage): version("main", branch="main", no_cache=True) version( - "0.10.0.post4", - sha256="3f827a88ab52843fbd7a5cc7814ecba165bdec65fd10df05eb031c286e8cd605", - ) - version( - "0.9.0", - sha256="b266c74360c2590c5745d74768c04568c965b44739becca4cd6b5aa58cdbbbd1", - ) - version( - "0.8.0", - sha256="acf3104d9ecc0380677a6faf69eabfafc58d0cce43f7777e1307b95701c7cad9", + "0.10.0.post4", sha256="3f827a88ab52843fbd7a5cc7814ecba165bdec65fd10df05eb031c286e8cd605" ) + version("0.9.0", sha256="b266c74360c2590c5745d74768c04568c965b44739becca4cd6b5aa58cdbbbd1") + version("0.8.0", sha256="acf3104d9ecc0380677a6faf69eabfafc58d0cce43f7777e1307b95701c7cad9") with default_args(deprecated=True): - version( - "0.7.2", - sha256="7d9ce1338ce66580593b376327f23ac464a4ce89ef63c105efc1a38e5eae5c0b", - ) - version( - "0.6.0", - sha256="eb8ac2bb2f032b0d393977993e1ab6b4101a84d54023a67206e3eac1a8d79b80", - ) + version("0.7.2", sha256="7d9ce1338ce66580593b376327f23ac464a4ce89ef63c105efc1a38e5eae5c0b") + version("0.6.0", sha256="eb8ac2bb2f032b0d393977993e1ab6b4101a84d54023a67206e3eac1a8d79b80") # CMake build type variant( @@ -89,11 +76,7 @@ class PyFenicsDolfinx(PythonPackage): depends_on("py-numpy@1.21:", type=("build", "run")) depends_on("py-mpi4py", type=("build", "run")) - conflicts( - "~petsc4py", - when="@:0.8", - msg="+petsc4py is required for versions 0.8 and lower", - ) + conflicts("~petsc4py", when="@:0.8", msg="+petsc4py is required for versions 0.8 and lower") conflicts("~petsc4py", when="+slepc4py", msg="+slepc4py requires +petsc4py") with when("+petsc4py"): depends_on("fenics-dolfinx +petsc") diff --git a/spack_repo/fenics/packages/py_fenics_ffcx/package.py b/spack_repo/fenics/packages/py_fenics_ffcx/package.py index 4d49f5b0..de101992 100644 --- a/spack_repo/fenics/packages/py_fenics_ffcx/package.py +++ b/spack_repo/fenics/packages/py_fenics_ffcx/package.py @@ -18,7 +18,9 @@ class PyFenicsFfcx(PythonPackage): license("LGPL-3.0-or-later") version("main", branch="main", no_cache=True) - version("0.10.1.post0", sha256="91e15e2586390d0a0b0e9993d63b47b7ae9657e5141fc30271291ea1a2d55d5e") + version( + "0.10.1.post0", sha256="91e15e2586390d0a0b0e9993d63b47b7ae9657e5141fc30271291ea1a2d55d5e" + ) version("0.9.0", sha256="afa517272a3d2249f513cb711c50b77cf8368dd0b8f5ea4b759142229204a448") version("0.8.0", sha256="8a854782dbd119ec1c23c4522a2134d5281e7f1bd2f37d64489f75da055282e3") with default_args(deprecated=True): From a775f0f60b578139f122e6c0bb65e8806719c210 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Wed, 11 Feb 2026 22:03:37 +0100 Subject: [PATCH 49/90] isort --- spack_repo/fenics/packages/fenics_dolfinx/package.py | 3 ++- spack_repo/fenics/packages/fenics_ufcx/package.py | 3 ++- spack_repo/fenics/packages/py_fenics_basix/package.py | 3 ++- spack_repo/fenics/packages/py_fenics_dolfinx/package.py | 3 ++- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/spack_repo/fenics/packages/fenics_dolfinx/package.py b/spack_repo/fenics/packages/fenics_dolfinx/package.py index 61462c1b..53dda50a 100644 --- a/spack_repo/fenics/packages/fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/fenics_dolfinx/package.py @@ -2,9 +2,10 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -from spack.package import * from spack_repo.builtin.build_systems.cmake import CMakePackage +from spack.package import * + class FenicsDolfinx(CMakePackage): """Next generation FEniCS problem solving environment.""" diff --git a/spack_repo/fenics/packages/fenics_ufcx/package.py b/spack_repo/fenics/packages/fenics_ufcx/package.py index db187cff..433bc49b 100644 --- a/spack_repo/fenics/packages/fenics_ufcx/package.py +++ b/spack_repo/fenics/packages/fenics_ufcx/package.py @@ -2,9 +2,10 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -from spack.package import * from spack_repo.builtin.build_systems.cmake import CMakePackage +from spack.package import * + class FenicsUfcx(CMakePackage): """FFCx provides the ufcx.h interface header for generated finite element diff --git a/spack_repo/fenics/packages/py_fenics_basix/package.py b/spack_repo/fenics/packages/py_fenics_basix/package.py index dc20efad..df384eb5 100644 --- a/spack_repo/fenics/packages/py_fenics_basix/package.py +++ b/spack_repo/fenics/packages/py_fenics_basix/package.py @@ -2,9 +2,10 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -from spack.package import * from spack_repo.builtin.build_systems.python import PythonPackage +from spack.package import * + class PyFenicsBasix(PythonPackage): """Python interface to Basix, a finite element definition and tabulation runtime library""" diff --git a/spack_repo/fenics/packages/py_fenics_dolfinx/package.py b/spack_repo/fenics/packages/py_fenics_dolfinx/package.py index 7aafdcd3..50a11956 100644 --- a/spack_repo/fenics/packages/py_fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/py_fenics_dolfinx/package.py @@ -2,9 +2,10 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -from spack.package import * from spack_repo.builtin.build_systems.python import PythonPackage +from spack.package import * + class PyFenicsDolfinx(PythonPackage): """Python interface to the next generation FEniCS problem solving From cb6c2f8291e937e9986ac3a155998549c1007e79 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Thu, 12 Feb 2026 07:37:34 +0100 Subject: [PATCH 50/90] Try and fix just fenics-dolfinx --- .github/workflows/spack-matrix.yml | 359 +++++++++++++++-------------- 1 file changed, 180 insertions(+), 179 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 0a2059f4..e10ee3aa 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -34,23 +34,23 @@ jobs: - run: chmod +x style_check.sh - run: ./style_check.sh HEAD^ - fenics-basix: - needs: style-check - runs-on: ubuntu-latest - container: ubuntu:24.04 - strategy: - fail-fast: false - matrix: - version: ["main", "0.10", "0.9", "0.8"] - spec: ["build_type=Developer %gcc@13", "build_type=Developer %clang@18"] - - steps: - - uses: actions/checkout@v5 - with: - path: spack-fenics - - uses: ./spack-fenics/.github/actions/test-package - with: - spec: fenics-basix@${{ matrix.version }} ${{ matrix.spec }} +# fenics-basix: +# needs: style-check +# runs-on: ubuntu-latest +# container: ubuntu:24.04 +# strategy: +# fail-fast: false +# matrix: +# version: ["main", "0.10", "0.9", "0.8"] +# spec: ["build_type=Developer %gcc@13", "build_type=Developer %clang@18"] +# +# steps: +# - uses: actions/checkout@v5 +# with: +# path: spack-fenics +# - uses: ./spack-fenics/.github/actions/test-package +# with: +# spec: fenics-basix@${{ matrix.version }} ${{ matrix.spec }} fenics-dolfinx: needs: style-check @@ -75,11 +75,12 @@ jobs: with: spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} - name: Run tests + if: contains(matrix.spec, '%gcc@13') shell: spack-bash {0} run: | spack env activate ./env - spack install --add catch2 cmake - spack load --first cmake + spack install --add catch2 cmake py-fenics-ffcx + spack load --first catch2 cmake py-fenics-ffcx spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer @@ -89,163 +90,163 @@ jobs: ctest -V --output-on-failure -R unittests_np_3 - fenics-ufcx: - needs: style-check - runs-on: ubuntu-latest - container: ubuntu:24.04 - strategy: - fail-fast: false - matrix: - version: ["main", "0.10", "0.9", "0.8"] - spec: ["%gcc@13"] - - steps: - - uses: actions/checkout@v5 - with: - path: spack-fenics - - uses: ./spack-fenics/.github/actions/test-package - with: - spec: fenics-ufcx@${{ matrix.version }} ${{ matrix.spec }} - - py-fenics-basix: - needs: style-check - runs-on: ubuntu-latest - container: ubuntu:24.04 - strategy: - fail-fast: false - matrix: - version: ["main", "0.10", "0.9", "0.8"] - # Make sure fenics-basix and py-fenics-basix build with same compiler/ABI. - spec: ["+ufl %gcc@13 ^fenics-basix%gcc@13", "+ufl %%clang@18 ^fenics-basix%clang@18"] - - steps: - - uses: actions/checkout@v5 - with: - path: spack-fenics - - uses: ./spack-fenics/.github/actions/test-package - with: - spec: py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} - - name: Run tests - if: ${{ matrix.version != '0.8' }} - shell: spack-bash {0} - run: | - spack env activate ./env - spack install --add py-pytest py-sympy py-pytest-xdist - spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} - spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} - python -m pytest -n auto test/ - # NOTE: 0.8 has test_all_elements_included broken - - name: Run tests - if: ${{ matrix.version == '0.8' }} - shell: spack-bash {0} - run: | - spack env activate ./env - spack install --add py-pytest py-sympy py-pytest-xdist - spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} - spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} - python -m pytest -n auto -k "not test_all_elements_included" test/ - - py-fenics-dolfinx: - needs: style-check - runs-on: ubuntu-latest - container: ubuntu:24.04 - strategy: - fail-fast: false - matrix: - version: ["main", "0.10", "0.9", "0.8"] - python-version: ["3.10", "3.13"] - # NOTE: As of 2/2026 %clang@18 seems to create dependency on mpilander stub mpi or intelmpi. - # NOTE: Some overspecification of %clang@18 to fix ABI issues (std::string). - spec: ["build_type=Developer +petsc4py +slepc4py %gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", - "build_type=Developer %%clang@18 ^openmpi"] - # Test new superlu-dist variant - include: - - version: "main" - spec: "build_type=Developer %%clang@18 ^mpich-fortran ^fenics-dolfinx+superlu-dist" - python-version: "3.12" - env: - OMPI_ALLOW_RUN_AS_ROOT: 1 - OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 - PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe # Newer OpenMPI - OMPI_MCA_rmaps_base_oversubscribe: true # Older OpenMPI - - steps: - - uses: actions/checkout@v5 - with: - path: spack-fenics - - uses: ./spack-fenics/.github/actions/test-package - with: - spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} - # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 - - name: Run tests - if: ${{ matrix.version == '0.8' || matrix.version == '0.9'}} - shell: spack-bash {0} - run: | - spack env activate ./env - spack install --add py-pytest@8.4 py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} - spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} - spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} - python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit - mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit - - name: Run tests - if: ${{ matrix.version != '0.8' && matrix.version != '0.9'}} - shell: spack-bash {0} - run: | - spack env activate ./env - spack install --add py-pytest py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} - spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} - spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} - python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_symmetry_interior_facet_assembly[mesh1]" python/test/unit - mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_symmetry_interior_facet_assembly[mesh1]" python/test/unit - - py-fenics-ffcx: - needs: style-check - runs-on: ubuntu-latest - container: ubuntu:24.04 - strategy: - fail-fast: false - matrix: - version: ["main", "0.10", "0.9", "0.8"] - - steps: - - uses: actions/checkout@v5 - with: - path: spack-fenics - - uses: ./spack-fenics/.github/actions/test-package - with: - spec: py-fenics-ffcx@${{ matrix.version }} - # NOTE: ffcx version 0.8 currently broken - - name: Run tests - if: ${{ matrix.version != '0.8' }} - shell: spack-bash {0} - run: | - spack env activate ./env - spack install --add py-pytest py-sympy py-pytest-xdist - spack stage py-fenics-ffcx@${{ matrix.version }} - spack cd py-fenics-ffcx@${{ matrix.version }} - python -m pytest -n auto test/ - - py-fenics-ufl: - needs: style-check - runs-on: ubuntu-latest - container: ubuntu:24.04 - strategy: - fail-fast: false - matrix: - version: ["main", "2025.2", "2025.1", "2024.2", "2024.1"] - - steps: - - uses: actions/checkout@v5 - with: - path: spack-fenics - - uses: ./spack-fenics/.github/actions/test-package - with: - spec: py-fenics-ufl@${{ matrix.version }} - - name: Run tests - shell: spack-bash {0} - run: | - spack env activate ./env - spack install --add py-pytest py-pytest-xdist - spack stage py-fenics-ufl@${{ matrix.version }} - spack cd py-fenics-ufl@${{ matrix.version }} - python -m pytest -n auto test/ +# fenics-ufcx: +# needs: style-check +# runs-on: ubuntu-latest +# container: ubuntu:24.04 +# strategy: +# fail-fast: false +# matrix: +# version: ["main", "0.10", "0.9", "0.8"] +# spec: ["%gcc@13"] +# +# steps: +# - uses: actions/checkout@v5 +# with: +# path: spack-fenics +# - uses: ./spack-fenics/.github/actions/test-package +# with: +# spec: fenics-ufcx@${{ matrix.version }} ${{ matrix.spec }} +# +# py-fenics-basix: +# needs: style-check +# runs-on: ubuntu-latest +# container: ubuntu:24.04 +# strategy: +# fail-fast: false +# matrix: +# version: ["main", "0.10", "0.9", "0.8"] +# # Make sure fenics-basix and py-fenics-basix build with same compiler/ABI. +# spec: ["+ufl %gcc@13 ^fenics-basix%gcc@13", "+ufl %%clang@18 ^fenics-basix%clang@18"] +# +# steps: +# - uses: actions/checkout@v5 +# with: +# path: spack-fenics +# - uses: ./spack-fenics/.github/actions/test-package +# with: +# spec: py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} +# - name: Run tests +# if: ${{ matrix.version != '0.8' }} +# shell: spack-bash {0} +# run: | +# spack env activate ./env +# spack install --add py-pytest py-sympy py-pytest-xdist +# spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} +# spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} +# python -m pytest -n auto test/ +# # NOTE: 0.8 has test_all_elements_included broken +# - name: Run tests +# if: ${{ matrix.version == '0.8' }} +# shell: spack-bash {0} +# run: | +# spack env activate ./env +# spack install --add py-pytest py-sympy py-pytest-xdist +# spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} +# spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} +# python -m pytest -n auto -k "not test_all_elements_included" test/ +# +# py-fenics-dolfinx: +# needs: style-check +# runs-on: ubuntu-latest +# container: ubuntu:24.04 +# strategy: +# fail-fast: false +# matrix: +# version: ["main", "0.10", "0.9", "0.8"] +# python-version: ["3.10", "3.13"] +# # NOTE: As of 2/2026 %clang@18 seems to create dependency on mpilander stub mpi or intelmpi. +# # NOTE: Some overspecification of %clang@18 to fix ABI issues (std::string). +# spec: ["build_type=Developer +petsc4py +slepc4py %gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", +# "build_type=Developer %%clang@18 ^openmpi"] +# # Test new superlu-dist variant +# include: +# - version: "main" +# spec: "build_type=Developer %%clang@18 ^mpich~fortran ^fenics-dolfinx+superlu-dist" +# python-version: "3.12" +# env: +# OMPI_ALLOW_RUN_AS_ROOT: 1 +# OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 +# PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe # Newer OpenMPI +# OMPI_MCA_rmaps_base_oversubscribe: true # Older OpenMPI +# +# steps: +# - uses: actions/checkout@v5 +# with: +# path: spack-fenics +# - uses: ./spack-fenics/.github/actions/test-package +# with: +# spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} +# # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 +# - name: Run tests +# if: ${{ matrix.version == '0.8' || matrix.version == '0.9'}} +# shell: spack-bash {0} +# run: | +# spack env activate ./env +# spack install --add py-pytest@8.4 py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} +# spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} +# spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} +# python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit +# mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit +# - name: Run tests +# if: ${{ matrix.version != '0.8' && matrix.version != '0.9'}} +# shell: spack-bash {0} +# run: | +# spack env activate ./env +# spack install --add py-pytest py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} +# spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} +# spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} +# python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_symmetry_interior_facet_assembly[mesh1]" python/test/unit +# mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_symmetry_interior_facet_assembly[mesh1]" python/test/unit +# +# py-fenics-ffcx: +# needs: style-check +# runs-on: ubuntu-latest +# container: ubuntu:24.04 +# strategy: +# fail-fast: false +# matrix: +# version: ["main", "0.10", "0.9", "0.8"] +# +# steps: +# - uses: actions/checkout@v5 +# with: +# path: spack-fenics +# - uses: ./spack-fenics/.github/actions/test-package +# with: +# spec: py-fenics-ffcx@${{ matrix.version }} +# # NOTE: ffcx version 0.8 currently broken +# - name: Run tests +# if: ${{ matrix.version != '0.8' }} +# shell: spack-bash {0} +# run: | +# spack env activate ./env +# spack install --add py-pytest py-sympy py-pytest-xdist +# spack stage py-fenics-ffcx@${{ matrix.version }} +# spack cd py-fenics-ffcx@${{ matrix.version }} +# python -m pytest -n auto test/ +# +# py-fenics-ufl: +# needs: style-check +# runs-on: ubuntu-latest +# container: ubuntu:24.04 +# strategy: +# fail-fast: false +# matrix: +# version: ["main", "2025.2", "2025.1", "2024.2", "2024.1"] +# +# steps: +# - uses: actions/checkout@v5 +# with: +# path: spack-fenics +# - uses: ./spack-fenics/.github/actions/test-package +# with: +# spec: py-fenics-ufl@${{ matrix.version }} +# - name: Run tests +# shell: spack-bash {0} +# run: | +# spack env activate ./env +# spack install --add py-pytest py-pytest-xdist +# spack stage py-fenics-ufl@${{ matrix.version }} +# spack cd py-fenics-ufl@${{ matrix.version }} +# python -m pytest -n auto test/ From 221c5a42aed43c917dc47552f33b23a011c075e7 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Thu, 12 Feb 2026 07:41:18 +0100 Subject: [PATCH 51/90] Don't use mpilander! --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index e10ee3aa..a8fb4cb6 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -60,7 +60,7 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - spec: ["build_type=Developer %%clang@18", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich"] + spec: ["build_type=Developer %%clang@18 ^openmpi", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 From be326d777e6212427d5cfd33a32f86c213481241 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Thu, 12 Feb 2026 15:55:06 +0100 Subject: [PATCH 52/90] Split lines --- .github/workflows/spack-matrix.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index a8fb4cb6..21e11258 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -60,7 +60,8 @@ jobs: fail-fast: false matrix: version: ["main", "0.10", "0.9", "0.8"] - spec: ["build_type=Developer %%clang@18 ^openmpi", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich"] + spec: ["build_type=Developer %%clang@18 ^openmpi", + "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 From b8758f0d1f7568a87f673666b43b5137faac9e04 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Thu, 12 Feb 2026 16:09:31 +0100 Subject: [PATCH 53/90] Fixes --- .github/workflows/spack-matrix.yml | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 21e11258..6977e84f 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -21,7 +21,8 @@ jobs: - uses: actions/checkout@v5 with: fetch-depth: 2 - - uses: actions/checkout@v5 + - name: Fetch Spack CI scripts + uses: actions/checkout@v5 with: repository: spack/spack ref: develop @@ -59,9 +60,11 @@ jobs: strategy: fail-fast: false matrix: + # Issue: clang sometimes likes stub or Intel MPI + # Issue: mpich tries to build fortran without installing python3. version: ["main", "0.10", "0.9", "0.8"] spec: ["build_type=Developer %%clang@18 ^openmpi", - "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich"] + "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich~fortran"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 @@ -69,7 +72,7 @@ jobs: OMPI_MCA_rmaps_base_oversubscribe: true # Older OpenMPI steps: - - uses: actions/checkout@v5 + uses: actions/checkout@v5 with: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package @@ -156,8 +159,9 @@ jobs: # matrix: # version: ["main", "0.10", "0.9", "0.8"] # python-version: ["3.10", "3.13"] -# # NOTE: As of 2/2026 %clang@18 seems to create dependency on mpilander stub mpi or intelmpi. -# # NOTE: Some overspecification of %clang@18 to fix ABI issues (std::string). +# # Issue: Overspecification of %%clang@18 to fix ABI issues (std::string related?). +# # Issue: clang sometimes likes stub or Intel MPI. +# # Issue: mpich tries to build fortran without installing python3. # spec: ["build_type=Developer +petsc4py +slepc4py %gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", # "build_type=Developer %%clang@18 ^openmpi"] # # Test new superlu-dist variant From 40d9782c1858b359e4b535ce89f6da99635fa130 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Thu, 12 Feb 2026 16:59:16 +0100 Subject: [PATCH 54/90] fix --- .github/actions/test-package/action.yml | 12 ++---------- .github/workflows/spack-matrix.yml | 5 ++--- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index 3aa34be6..65239a40 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -12,11 +12,7 @@ runs: shell: sh run: | apt-get -y update - apt-get install -y bzip2 curl file git gzip make patch tar unzip xz-utils - - - uses: actions/setup-python@v6 - with: - python-version: 3.13 + apt-get install -y file bzip2 ca-certificates g++ gcc gfortran git gzip lsb-release patch python3 tar unzip xz-utils zstd - name: Set up spack uses: spack/setup-spack@v2 @@ -25,13 +21,9 @@ runs: color: true path: spack - - name: Install gcc - shell: sh - run: apt-get install -y g++ gcc gfortran build-essential - - name: Install clang-18 shell: sh - run: apt-get install -y clang-18 gfortran + run: apt-get install -y clang-18 - name: Add repos shell: spack-bash {0} diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 6977e84f..cec88144 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -63,8 +63,7 @@ jobs: # Issue: clang sometimes likes stub or Intel MPI # Issue: mpich tries to build fortran without installing python3. version: ["main", "0.10", "0.9", "0.8"] - spec: ["build_type=Developer %%clang@18 ^openmpi", - "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich~fortran"] + spec: ["build_type=Developer %%clang@18 ^openmpi", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 @@ -167,7 +166,7 @@ jobs: # # Test new superlu-dist variant # include: # - version: "main" -# spec: "build_type=Developer %%clang@18 ^mpich~fortran ^fenics-dolfinx+superlu-dist" +# spec: "build_type=Developer %%clang@18 ^mpich ^fenics-dolfinx+superlu-dist" # python-version: "3.12" # env: # OMPI_ALLOW_RUN_AS_ROOT: 1 From 8b2acff469e4d47442e8d8ef97e1580eaf542ad7 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Thu, 12 Feb 2026 20:10:03 +0100 Subject: [PATCH 55/90] Fix. --- .github/workflows/spack-matrix.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index cec88144..e29fe5ba 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -61,7 +61,6 @@ jobs: fail-fast: false matrix: # Issue: clang sometimes likes stub or Intel MPI - # Issue: mpich tries to build fortran without installing python3. version: ["main", "0.10", "0.9", "0.8"] spec: ["build_type=Developer %%clang@18 ^openmpi", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich"] env: @@ -71,13 +70,14 @@ jobs: OMPI_MCA_rmaps_base_oversubscribe: true # Older OpenMPI steps: - uses: actions/checkout@v5 + - uses: actions/checkout@v5 with: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} - name: Run tests + # Out of disk error with clang if: contains(matrix.spec, '%gcc@13') shell: spack-bash {0} run: | From 7a1c551908b504a345d561ca950a78900a12306c Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Thu, 12 Feb 2026 21:02:49 +0100 Subject: [PATCH 56/90] Remove cache --- .github/actions/test-package/action.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index 65239a40..592e0cf4 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -32,12 +32,12 @@ runs: spack config get repos spack repo list - - name: add cache - shell: spack-bash {0} - run: | - spack mirror add e4s-25.11 https://cache.e4s.io/25.11 - spack buildcache keys --install --trust - spack config add "packages:all:target:[x86_64_v3]" +# - name: add cache +# shell: spack-bash {0} +# run: | +# spack mirror add e4s-25.11 https://cache.e4s.io/25.11 +# spack buildcache keys --install --trust +# spack config add "packages:all:target:[x86_64_v3]" - name: Compiler find shell: spack-bash {0} From 9fa37e230306ccf552967d65bbc175289eae4bd6 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Thu, 12 Feb 2026 21:58:41 +0100 Subject: [PATCH 57/90] Try not pushing clang down --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index e29fe5ba..056a5dd9 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -62,7 +62,7 @@ jobs: matrix: # Issue: clang sometimes likes stub or Intel MPI version: ["main", "0.10", "0.9", "0.8"] - spec: ["build_type=Developer %%clang@18 ^openmpi", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich"] + spec: ["build_type=Developer %clang@18 ^openmpi", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 From 58e3270247ebc04f79cbae8e30f229292d8f8851 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Thu, 12 Feb 2026 22:08:31 +0100 Subject: [PATCH 58/90] Also try tests with clang --- .github/workflows/spack-matrix.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 056a5dd9..40946518 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -77,8 +77,6 @@ jobs: with: spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} - name: Run tests - # Out of disk error with clang - if: contains(matrix.spec, '%gcc@13') shell: spack-bash {0} run: | spack env activate ./env From 1b02da20fe47de7bb92ab14909f1c31e92f48c3c Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Thu, 12 Feb 2026 22:29:48 +0100 Subject: [PATCH 59/90] Why does it try gcc10!? --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 40946518..6740c3f9 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -80,7 +80,7 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env - spack install --add catch2 cmake py-fenics-ffcx + spack install --add catch2 %gcc@13 cmake %gcc@13 py-fenics-ffcx %gcc@13 spack load --first catch2 cmake py-fenics-ffcx spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} From 0e2da059ce5105e7646de6575cd1298d6c29f860 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Thu, 12 Feb 2026 22:31:05 +0100 Subject: [PATCH 60/90] try x86-v3 --- .github/actions/test-package/action.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index 592e0cf4..8d637eb1 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -32,12 +32,12 @@ runs: spack config get repos spack repo list -# - name: add cache -# shell: spack-bash {0} -# run: | + - name: add cache + shell: spack-bash {0} + run: | + spack config add "packages:all:target:[x86_64_v3]" # spack mirror add e4s-25.11 https://cache.e4s.io/25.11 # spack buildcache keys --install --trust -# spack config add "packages:all:target:[x86_64_v3]" - name: Compiler find shell: spack-bash {0} From 9e894e67d406bac40cdb751520d5c0f94f75db03 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 13 Feb 2026 13:04:25 +0100 Subject: [PATCH 61/90] Try getting it working on just gcc --- .github/workflows/spack-matrix.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 6740c3f9..dcb37e44 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -78,11 +78,12 @@ jobs: spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} - name: Run tests shell: spack-bash {0} + if: contains(matrix.spec, "%gcc@13") run: | spack env activate ./env - spack install --add catch2 %gcc@13 cmake %gcc@13 py-fenics-ffcx %gcc@13 + spack install --add catch2 %gcc@13 cmake %gcc@13 py-fenics-ffcx spack load --first catch2 cmake py-fenics-ffcx - spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} + spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer cmake --build build/test From ba4f8e34dbf9201354dd437f3eb89b8bc958b716 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 13 Feb 2026 13:09:08 +0100 Subject: [PATCH 62/90] Fix quotes --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index dcb37e44..68a95ccc 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -78,7 +78,7 @@ jobs: spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} - name: Run tests shell: spack-bash {0} - if: contains(matrix.spec, "%gcc@13") + if: contains(matrix.spec, '%gcc@13') run: | spack env activate ./env spack install --add catch2 %gcc@13 cmake %gcc@13 py-fenics-ffcx From 4ed4f853b621a1bd254166c9588b1530693bc66d Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 13 Feb 2026 13:33:50 +0100 Subject: [PATCH 63/90] OK, don't install clang --- .github/actions/test-package/action.yml | 1 + .github/workflows/spack-matrix.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index 8d637eb1..c239172e 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -23,6 +23,7 @@ runs: - name: Install clang-18 shell: sh + if: contains(spec, '%clang') run: apt-get install -y clang-18 - name: Add repos diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 68a95ccc..48e05678 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -78,7 +78,7 @@ jobs: spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} - name: Run tests shell: spack-bash {0} - if: contains(matrix.spec, '%gcc@13') + if: contains(matrix.spec, '%gcc') run: | spack env activate ./env spack install --add catch2 %gcc@13 cmake %gcc@13 py-fenics-ffcx From ed282b40ab11c370520cdaea7799da6c20ddf6a0 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 13 Feb 2026 14:16:32 +0100 Subject: [PATCH 64/90] Fix --- .github/actions/test-package/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index c239172e..99eba7ce 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -23,7 +23,7 @@ runs: - name: Install clang-18 shell: sh - if: contains(spec, '%clang') + if: contains(inputs.spec, '%clang') run: apt-get install -y clang-18 - name: Add repos @@ -36,7 +36,7 @@ runs: - name: add cache shell: spack-bash {0} run: | - spack config add "packages:all:target:[x86_64_v3]" +# spack config add "packages:all:target:[x86_64_v3]" # spack mirror add e4s-25.11 https://cache.e4s.io/25.11 # spack buildcache keys --install --trust From 4d3238350ac2de9fa39282e4f99648f0e82adfb2 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 13 Feb 2026 14:31:25 +0100 Subject: [PATCH 65/90] Try Spack's buildcache --- .github/actions/test-package/action.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index 99eba7ce..9301ee00 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -38,7 +38,8 @@ runs: run: | # spack config add "packages:all:target:[x86_64_v3]" # spack mirror add e4s-25.11 https://cache.e4s.io/25.11 -# spack buildcache keys --install --trust + spack mirror add develop https://binaries.spack.io/develop + spack buildcache keys --install --trust - name: Compiler find shell: spack-bash {0} From 3c4f68924600bde50de60d54b4c5fee46a1fb32c Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 13 Feb 2026 15:13:30 +0100 Subject: [PATCH 66/90] Fix syntax --- .github/actions/test-package/action.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index 9301ee00..a243fac0 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -36,8 +36,6 @@ runs: - name: add cache shell: spack-bash {0} run: | -# spack config add "packages:all:target:[x86_64_v3]" -# spack mirror add e4s-25.11 https://cache.e4s.io/25.11 spack mirror add develop https://binaries.spack.io/develop spack buildcache keys --install --trust From a7a58cbd2ac820e1d42e35092b54ca583e626504 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 13 Feb 2026 15:42:49 +0100 Subject: [PATCH 67/90] Fix - doesn't work with really old HDF5 version --- .github/workflows/spack-matrix.yml | 3 +-- spack_repo/fenics/packages/fenics_dolfinx/package.py | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 48e05678..28c92203 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -78,10 +78,9 @@ jobs: spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} - name: Run tests shell: spack-bash {0} - if: contains(matrix.spec, '%gcc') run: | spack env activate ./env - spack install --add catch2 %gcc@13 cmake %gcc@13 py-fenics-ffcx + spack install --add py-fenics-ffcx spack load --first catch2 cmake py-fenics-ffcx spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} diff --git a/spack_repo/fenics/packages/fenics_dolfinx/package.py b/spack_repo/fenics/packages/fenics_dolfinx/package.py index 53dda50a..ee7d4661 100644 --- a/spack_repo/fenics/packages/fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/fenics_dolfinx/package.py @@ -69,7 +69,8 @@ class FenicsDolfinx(CMakePackage): depends_on("cmake@3.19:", when="@:0.8", type="build") depends_on("pkgconfig", type="build") depends_on("mpi") - depends_on("hdf5+mpi") + # HDF5Interface.cpp #if H5_VERSION_GE are not precise enough. + depends_on("hdf5+mpi@1.12:") depends_on("boost@1.70:") depends_on("boost@1.70:+timer", when="@:0.9") depends_on("pugixml") From 8b4ec98796e6147ae4ba0ced000ac83582cfa427 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 13 Feb 2026 15:58:02 +0100 Subject: [PATCH 68/90] Add catch2 --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 28c92203..8424766e 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -80,7 +80,7 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env - spack install --add py-fenics-ffcx + spack install --add py-fenics-ffcx catch2 spack load --first catch2 cmake py-fenics-ffcx spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} From d9dd1d1824146b73aa5ac9fa006784b39d5bd959 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 13 Feb 2026 15:59:03 +0100 Subject: [PATCH 69/90] The deps on basix is only transitive --- spack_repo/fenics/packages/fenics_dolfinx/package.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/spack_repo/fenics/packages/fenics_dolfinx/package.py b/spack_repo/fenics/packages/fenics_dolfinx/package.py index ee7d4661..b1193233 100644 --- a/spack_repo/fenics/packages/fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/fenics_dolfinx/package.py @@ -88,8 +88,6 @@ class FenicsDolfinx(CMakePackage): depends_on("superlu-dist", when="+superlu-dist") for ver in ("main", "0.10", "0.9", "0.8", "0.7", "0.6"): - depends_on(f"fenics-ufcx@{ver}", when=f"@{ver}") - depends_on(f"fenics-basix@{ver}", when=f"@{ver}") depends_on(f"py-fenics-ffcx@{ver}", when=f"@{ver}", type="test") depends_on("catch2", type="test") From dde5356f634739802d9c0193f2569c509f0358cc Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Fri, 13 Feb 2026 16:00:13 +0100 Subject: [PATCH 70/90] Backtrack --- spack_repo/fenics/packages/fenics_dolfinx/package.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spack_repo/fenics/packages/fenics_dolfinx/package.py b/spack_repo/fenics/packages/fenics_dolfinx/package.py index b1193233..ee7d4661 100644 --- a/spack_repo/fenics/packages/fenics_dolfinx/package.py +++ b/spack_repo/fenics/packages/fenics_dolfinx/package.py @@ -88,6 +88,8 @@ class FenicsDolfinx(CMakePackage): depends_on("superlu-dist", when="+superlu-dist") for ver in ("main", "0.10", "0.9", "0.8", "0.7", "0.6"): + depends_on(f"fenics-ufcx@{ver}", when=f"@{ver}") + depends_on(f"fenics-basix@{ver}", when=f"@{ver}") depends_on(f"py-fenics-ffcx@{ver}", when=f"@{ver}", type="test") depends_on("catch2", type="test") From 955239c64168611e7fe8c4fbc66be3698c4cbfd7 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 10:01:01 +0100 Subject: [PATCH 71/90] Try this. --- .github/workflows/spack-matrix.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 8424766e..49644867 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -60,9 +60,10 @@ jobs: strategy: fail-fast: false matrix: - # Issue: clang sometimes likes stub or Intel MPI + # NOTE: clang sometimes likes stub or Intel MPI. Force MPI implementations. + # NOTE: py-fenics-* must be built with same compiler as fenics-*. version: ["main", "0.10", "0.9", "0.8"] - spec: ["build_type=Developer %clang@18 ^openmpi", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich"] + spec: ["build_type=Developer %clang@18 ^openmpi py-fenics-basix %clang@18 py-fenics-ffcx catch2", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich py-fenics-basix %gcc@13 py-fenics-ffcx catch2"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 @@ -80,7 +81,6 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env - spack install --add py-fenics-ffcx catch2 spack load --first catch2 cmake py-fenics-ffcx spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} From 2d1322285d9b65b552d3d2c368057e826370671e Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 10:12:37 +0100 Subject: [PATCH 72/90] Is it necessary if unifying the concretiser? --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 49644867..fd9f9156 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -63,7 +63,7 @@ jobs: # NOTE: clang sometimes likes stub or Intel MPI. Force MPI implementations. # NOTE: py-fenics-* must be built with same compiler as fenics-*. version: ["main", "0.10", "0.9", "0.8"] - spec: ["build_type=Developer %clang@18 ^openmpi py-fenics-basix %clang@18 py-fenics-ffcx catch2", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich py-fenics-basix %gcc@13 py-fenics-ffcx catch2"] + spec: ["build_type=Developer %clang@18 ^openmpi py-fenics-basix py-fenics-ffcx catch2", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich py-fenics-basix py-fenics-ffcx catch2"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 From c5892e9220127556f1881c30aefe5bcf0f99349a Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 10:31:06 +0100 Subject: [PATCH 73/90] try this --- .github/workflows/spack-matrix.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index fd9f9156..887bd69e 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -61,9 +61,11 @@ jobs: fail-fast: false matrix: # NOTE: clang sometimes likes stub or Intel MPI. Force MPI implementations. - # NOTE: py-fenics-* must be built with same compiler as fenics-*. version: ["main", "0.10", "0.9", "0.8"] - spec: ["build_type=Developer %clang@18 ^openmpi py-fenics-basix py-fenics-ffcx catch2", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich py-fenics-basix py-fenics-ffcx catch2"] + extra_spec: ["py-fenics-basix py-fenics-ffcx catch2"] + include: + - main_spec: "build_type=Developer %clang@18 ^openmpi" + - main_spec: "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich" env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 @@ -76,14 +78,14 @@ jobs: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} + spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} ${{ extra_spec }} - name: Run tests shell: spack-bash {0} run: | spack env activate ./env spack load --first catch2 cmake py-fenics-ffcx - spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} - spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} + spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} + spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer cmake --build build/test cd build/test From 7e807df1f96c7deb4bdced5bb30ebc2934d27d3a Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 10:35:33 +0100 Subject: [PATCH 74/90] Fix. --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 887bd69e..ce780421 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -78,7 +78,7 @@ jobs: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} ${{ extra_spec }} + spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} ${{ matrix.extra_spec }} - name: Run tests shell: spack-bash {0} run: | From c4f35074ba3b5bd78f7644d1fbcd585d8ddbdf91 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 11:00:09 +0100 Subject: [PATCH 75/90] Fix. --- .github/workflows/spack-matrix.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index ce780421..ff136ba0 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -62,10 +62,7 @@ jobs: matrix: # NOTE: clang sometimes likes stub or Intel MPI. Force MPI implementations. version: ["main", "0.10", "0.9", "0.8"] - extra_spec: ["py-fenics-basix py-fenics-ffcx catch2"] - include: - - main_spec: "build_type=Developer %clang@18 ^openmpi" - - main_spec: "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich" + main_spec: ["build_type=Developer %clang@18 ^openmpi", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 @@ -78,7 +75,7 @@ jobs: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} ${{ matrix.extra_spec }} + spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} py-fenics-ffcx catch2 cmake - name: Run tests shell: spack-bash {0} run: | From 02b76ac10b820c64cd0213851779a344479a584a Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 11:01:57 +0100 Subject: [PATCH 76/90] Composite seems undesirable for debugging --- .github/actions/test-package/action.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index a243fac0..519212af 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -6,7 +6,6 @@ inputs: required: true type: string runs: - using: "composite" steps: - name: Install dependencies shell: sh @@ -33,7 +32,7 @@ runs: spack config get repos spack repo list - - name: add cache + - name: Add cache shell: spack-bash {0} run: | spack mirror add develop https://binaries.spack.io/develop From 2e2bea78801fd4a802a25c7fa8cab25e048a3a78 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 11:05:10 +0100 Subject: [PATCH 77/90] OK, fine. --- .github/actions/test-package/action.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index 519212af..911b27d7 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -6,6 +6,7 @@ inputs: required: true type: string runs: + using: "composite" steps: - name: Install dependencies shell: sh @@ -46,7 +47,7 @@ runs: shell: spack-bash {0} run: spack env create -d ./env - - name: Add spec + - name: Add specs shell: spack-bash {0} run: spack -e ./env add ${{ inputs.spec }} From d72bda4ff527616f8daadc62a675809b1a6d7f25 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 11:28:19 +0100 Subject: [PATCH 78/90] Explicitly load fenics-dolfinx --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index ff136ba0..da619ff4 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -80,7 +80,7 @@ jobs: shell: spack-bash {0} run: | spack env activate ./env - spack load --first catch2 cmake py-fenics-ffcx + spack load --first catch2 cmake fenics-dolfinx py-fenics-ffcx spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer From 4db65d748803edb61b9c00965ce08300a5497505 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 12:15:17 +0100 Subject: [PATCH 79/90] Constrain to Ubuntu 24.04 cache packages --- .github/actions/test-package/action.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index 911b27d7..fc1a9bce 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -37,6 +37,7 @@ runs: shell: spack-bash {0} run: | spack mirror add develop https://binaries.spack.io/develop + spack config add "packages:all:require:os=ubuntu24.04" spack buildcache keys --install --trust - name: Compiler find From f4cb54ee086baa9802900b0b0c51ac1c5afcf311 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 12:16:45 +0100 Subject: [PATCH 80/90] Fix ubuntu for cache --- .github/actions/test-package/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index fc1a9bce..bf9395a9 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -37,7 +37,7 @@ runs: shell: spack-bash {0} run: | spack mirror add develop https://binaries.spack.io/develop - spack config add "packages:all:require:os=ubuntu24.04" + spack config add "packages:all:require:[os=ubuntu24.04]" spack buildcache keys --install --trust - name: Compiler find From c3640456285a35469238448b4cd51deac496b8b9 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 12:44:17 +0100 Subject: [PATCH 81/90] Propogate compilers down DAG --- .github/actions/test-package/action.yml | 8 +++----- .github/workflows/spack-matrix.yml | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index bf9395a9..3d972668 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -15,11 +15,9 @@ runs: apt-get install -y file bzip2 ca-certificates g++ gcc gfortran git gzip lsb-release patch python3 tar unzip xz-utils zstd - name: Set up spack - uses: spack/setup-spack@v2 + uses: spack/setup-spack@v3 with: - ref: develop - color: true - path: spack + spack_ref: develop - name: Install clang-18 shell: sh @@ -37,7 +35,7 @@ runs: shell: spack-bash {0} run: | spack mirror add develop https://binaries.spack.io/develop - spack config add "packages:all:require:[os=ubuntu24.04]" + spack config add "packages:all:require:['os=ubuntu24.04','target=x86_64_v3']" spack buildcache keys --install --trust - name: Compiler find diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index da619ff4..a1d4bfee 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -62,7 +62,7 @@ jobs: matrix: # NOTE: clang sometimes likes stub or Intel MPI. Force MPI implementations. version: ["main", "0.10", "0.9", "0.8"] - main_spec: ["build_type=Developer %clang@18 ^openmpi", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %gcc@13 ^mpich"] + main_spec: ["build_type=Developer %%c,cxx=clang@18 ^openmpi", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %%c,cxx=gcc@13 ^mpich"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 From edf31369f9a6388b4af73585a48ff940c0c4971d Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 12:52:28 +0100 Subject: [PATCH 82/90] Fix --- .github/actions/test-package/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/test-package/action.yml b/.github/actions/test-package/action.yml index 3d972668..ef0dbc62 100644 --- a/.github/actions/test-package/action.yml +++ b/.github/actions/test-package/action.yml @@ -21,7 +21,7 @@ runs: - name: Install clang-18 shell: sh - if: contains(inputs.spec, '%clang') + if: contains(inputs.spec, 'clang@18') run: apt-get install -y clang-18 - name: Add repos From d3bbf587b18b2fa445fb0585ec8b10d4f600a329 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 15:09:31 +0100 Subject: [PATCH 83/90] Fix. --- .github/workflows/spack-matrix.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index a1d4bfee..bd1c8bc8 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -62,7 +62,7 @@ jobs: matrix: # NOTE: clang sometimes likes stub or Intel MPI. Force MPI implementations. version: ["main", "0.10", "0.9", "0.8"] - main_spec: ["build_type=Developer %%c,cxx=clang@18 ^openmpi", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %%c,cxx=gcc@13 ^mpich"] + main_spec: ["build_type=Developer %%c,cxx=clang@18 ^openmpi", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %%gcc@13 ^mpich"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 @@ -83,8 +83,8 @@ jobs: spack load --first catch2 cmake fenics-dolfinx py-fenics-ffcx spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} - cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer - cmake --build build/test + spack build-env fenics-dolfinx -- cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer + spack build-env fenics-dolfinx -- 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 From a87645398d67511b634458dbc23f6a05cbcd370e Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 16:24:52 +0100 Subject: [PATCH 84/90] Doesn't work as ffcx is not in build-env --- .github/workflows/spack-matrix.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index bd1c8bc8..34f8c300 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -83,8 +83,9 @@ jobs: spack load --first catch2 cmake fenics-dolfinx py-fenics-ffcx spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} - spack build-env fenics-dolfinx -- cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer - spack build-env fenics-dolfinx -- cmake --build build/test + source <(spack build-env --dump /dev/stdout fenics-dolfinx) + cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer + 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 From 22c034303d7bf7cef4f88c9769c64e16dc6c5575 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sat, 14 Feb 2026 16:43:53 +0100 Subject: [PATCH 85/90] openmpi cache looks fuller --- .github/workflows/spack-matrix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 34f8c300..7c5a9e2c 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -62,7 +62,7 @@ jobs: matrix: # NOTE: clang sometimes likes stub or Intel MPI. Force MPI implementations. version: ["main", "0.10", "0.9", "0.8"] - main_spec: ["build_type=Developer %%c,cxx=clang@18 ^openmpi", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %%gcc@13 ^mpich"] + main_spec: ["build_type=Developer %%c,cxx=clang@18 ^mpich", "build_type=Developer partitioners=kahip,parmetis,scotch +petsc +slepc +adios2 %%gcc@13 ^openmpi"] env: OMPI_ALLOW_RUN_AS_ROOT: 1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 From 8aec60a9c455f045f2e074203a7fcbd461a9f7d4 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sun, 15 Feb 2026 10:55:43 +0100 Subject: [PATCH 86/90] Trick doesn't work, split into file and source --- .github/workflows/spack-matrix.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 7c5a9e2c..4a91991b 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -83,7 +83,8 @@ jobs: spack load --first catch2 cmake fenics-dolfinx py-fenics-ffcx spack stage fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} spack cd fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} - source <(spack build-env --dump /dev/stdout fenics-dolfinx) + spack build-env --dump fenics-dolfinx-build-env.sh fenics-dolfinx + source fenics-dolfinx-build-env.sh cmake -B build/test/ -S cpp/test/ -DCMAKE_BUILD_TYPE=Developer cmake --build build/test cd build/test From c52e0e9a84a57af006c146ad9d98b5a84ef8d5cf Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Sun, 15 Feb 2026 20:07:40 +0100 Subject: [PATCH 87/90] Reenable --- .github/workflows/spack-matrix.yml | 359 +++++++++++++++-------------- 1 file changed, 180 insertions(+), 179 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 4a91991b..bbbd5558 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -35,23 +35,23 @@ jobs: - run: chmod +x style_check.sh - run: ./style_check.sh HEAD^ -# fenics-basix: -# needs: style-check -# runs-on: ubuntu-latest -# container: ubuntu:24.04 -# strategy: -# fail-fast: false -# matrix: -# version: ["main", "0.10", "0.9", "0.8"] -# spec: ["build_type=Developer %gcc@13", "build_type=Developer %clang@18"] -# -# steps: -# - uses: actions/checkout@v5 -# with: -# path: spack-fenics -# - uses: ./spack-fenics/.github/actions/test-package -# with: -# spec: fenics-basix@${{ matrix.version }} ${{ matrix.spec }} + fenics-basix: + needs: style-check + runs-on: ubuntu-latest + container: ubuntu:24.04 + strategy: + fail-fast: false + matrix: + version: ["main", "0.10", "0.9", "0.8"] + spec: ["build_type=Developer %gcc@13", "build_type=Developer %clang@18"] + + steps: + - uses: actions/checkout@v5 + with: + path: spack-fenics + - uses: ./spack-fenics/.github/actions/test-package + with: + spec: fenics-basix@${{ matrix.version }} ${{ matrix.spec }} fenics-dolfinx: needs: style-check @@ -76,8 +76,10 @@ jobs: - uses: ./spack-fenics/.github/actions/test-package with: spec: fenics-dolfinx@${{ matrix.version }} ${{ matrix.main_spec }} py-fenics-ffcx catch2 cmake - - name: Run tests + # FFCx compilation of poisson.py fails in ffcx/codegeneration/C/finite_element.py + - name: Run tests (skip 0.8) shell: spack-bash {0} + if: ${{ matrix.version != '0.8' }} run: | spack env activate ./env spack load --first catch2 cmake fenics-dolfinx py-fenics-ffcx @@ -92,164 +94,163 @@ jobs: ctest -V --output-on-failure -R unittests_np_3 -# fenics-ufcx: -# needs: style-check -# runs-on: ubuntu-latest -# container: ubuntu:24.04 -# strategy: -# fail-fast: false -# matrix: -# version: ["main", "0.10", "0.9", "0.8"] -# spec: ["%gcc@13"] -# -# steps: -# - uses: actions/checkout@v5 -# with: -# path: spack-fenics -# - uses: ./spack-fenics/.github/actions/test-package -# with: -# spec: fenics-ufcx@${{ matrix.version }} ${{ matrix.spec }} -# -# py-fenics-basix: -# needs: style-check -# runs-on: ubuntu-latest -# container: ubuntu:24.04 -# strategy: -# fail-fast: false -# matrix: -# version: ["main", "0.10", "0.9", "0.8"] -# # Make sure fenics-basix and py-fenics-basix build with same compiler/ABI. -# spec: ["+ufl %gcc@13 ^fenics-basix%gcc@13", "+ufl %%clang@18 ^fenics-basix%clang@18"] -# -# steps: -# - uses: actions/checkout@v5 -# with: -# path: spack-fenics -# - uses: ./spack-fenics/.github/actions/test-package -# with: -# spec: py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} -# - name: Run tests -# if: ${{ matrix.version != '0.8' }} -# shell: spack-bash {0} -# run: | -# spack env activate ./env -# spack install --add py-pytest py-sympy py-pytest-xdist -# spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} -# spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} -# python -m pytest -n auto test/ -# # NOTE: 0.8 has test_all_elements_included broken -# - name: Run tests -# if: ${{ matrix.version == '0.8' }} -# shell: spack-bash {0} -# run: | -# spack env activate ./env -# spack install --add py-pytest py-sympy py-pytest-xdist -# spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} -# spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} -# python -m pytest -n auto -k "not test_all_elements_included" test/ -# -# py-fenics-dolfinx: -# needs: style-check -# runs-on: ubuntu-latest -# container: ubuntu:24.04 -# strategy: -# fail-fast: false -# matrix: -# version: ["main", "0.10", "0.9", "0.8"] -# python-version: ["3.10", "3.13"] -# # Issue: Overspecification of %%clang@18 to fix ABI issues (std::string related?). -# # Issue: clang sometimes likes stub or Intel MPI. -# # Issue: mpich tries to build fortran without installing python3. -# spec: ["build_type=Developer +petsc4py +slepc4py %gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2", -# "build_type=Developer %%clang@18 ^openmpi"] -# # Test new superlu-dist variant -# include: -# - version: "main" -# spec: "build_type=Developer %%clang@18 ^mpich ^fenics-dolfinx+superlu-dist" -# python-version: "3.12" -# env: -# OMPI_ALLOW_RUN_AS_ROOT: 1 -# OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 -# PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe # Newer OpenMPI -# OMPI_MCA_rmaps_base_oversubscribe: true # Older OpenMPI -# -# steps: -# - uses: actions/checkout@v5 -# with: -# path: spack-fenics -# - uses: ./spack-fenics/.github/actions/test-package -# with: -# spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} -# # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 -# - name: Run tests -# if: ${{ matrix.version == '0.8' || matrix.version == '0.9'}} -# shell: spack-bash {0} -# run: | -# spack env activate ./env -# spack install --add py-pytest@8.4 py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} -# spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} -# spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} -# python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit -# mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit -# - name: Run tests -# if: ${{ matrix.version != '0.8' && matrix.version != '0.9'}} -# shell: spack-bash {0} -# run: | -# spack env activate ./env -# spack install --add py-pytest py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} -# spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} -# spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} -# python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_symmetry_interior_facet_assembly[mesh1]" python/test/unit -# mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_symmetry_interior_facet_assembly[mesh1]" python/test/unit -# -# py-fenics-ffcx: -# needs: style-check -# runs-on: ubuntu-latest -# container: ubuntu:24.04 -# strategy: -# fail-fast: false -# matrix: -# version: ["main", "0.10", "0.9", "0.8"] -# -# steps: -# - uses: actions/checkout@v5 -# with: -# path: spack-fenics -# - uses: ./spack-fenics/.github/actions/test-package -# with: -# spec: py-fenics-ffcx@${{ matrix.version }} -# # NOTE: ffcx version 0.8 currently broken -# - name: Run tests -# if: ${{ matrix.version != '0.8' }} -# shell: spack-bash {0} -# run: | -# spack env activate ./env -# spack install --add py-pytest py-sympy py-pytest-xdist -# spack stage py-fenics-ffcx@${{ matrix.version }} -# spack cd py-fenics-ffcx@${{ matrix.version }} -# python -m pytest -n auto test/ -# -# py-fenics-ufl: -# needs: style-check -# runs-on: ubuntu-latest -# container: ubuntu:24.04 -# strategy: -# fail-fast: false -# matrix: -# version: ["main", "2025.2", "2025.1", "2024.2", "2024.1"] -# -# steps: -# - uses: actions/checkout@v5 -# with: -# path: spack-fenics -# - uses: ./spack-fenics/.github/actions/test-package -# with: -# spec: py-fenics-ufl@${{ matrix.version }} -# - name: Run tests -# shell: spack-bash {0} -# run: | -# spack env activate ./env -# spack install --add py-pytest py-pytest-xdist -# spack stage py-fenics-ufl@${{ matrix.version }} -# spack cd py-fenics-ufl@${{ matrix.version }} -# python -m pytest -n auto test/ + fenics-ufcx: + needs: style-check + runs-on: ubuntu-latest + container: ubuntu:24.04 + strategy: + fail-fast: false + matrix: + version: ["main", "0.10", "0.9", "0.8"] + spec: ["%gcc@13"] + + steps: + - uses: actions/checkout@v5 + with: + path: spack-fenics + - uses: ./spack-fenics/.github/actions/test-package + with: + spec: fenics-ufcx@${{ matrix.version }} ${{ matrix.spec }} + + py-fenics-basix: + needs: style-check + runs-on: ubuntu-latest + container: ubuntu:24.04 + strategy: + fail-fast: false + matrix: + version: ["main", "0.10", "0.9", "0.8"] + # Make sure fenics-basix and py-fenics-basix build with same compiler/ABI. + spec: ["+ufl %gcc@13 ^fenics-basix%gcc@13", "+ufl %clang@18 ^fenics-basix%clang@18"] + + steps: + - uses: actions/checkout@v5 + with: + path: spack-fenics + - uses: ./spack-fenics/.github/actions/test-package + with: + spec: py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} + - name: Run tests + if: ${{ matrix.version != '0.8' }} + shell: spack-bash {0} + run: | + spack env activate ./env + spack install --add py-pytest py-sympy py-pytest-xdist + spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} + spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} + python -m pytest -n auto test/ + # NOTE: 0.8 has test_all_elements_included broken + - name: Run tests + if: ${{ matrix.version == '0.8' }} + shell: spack-bash {0} + run: | + spack env activate ./env + spack install --add py-pytest py-sympy py-pytest-xdist + spack stage py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} + spack cd py-fenics-basix@${{ matrix.version }} ${{ matrix.spec }} + python -m pytest -n auto -k "not test_all_elements_included" test/ + + py-fenics-dolfinx: + needs: style-check + runs-on: ubuntu-latest + container: ubuntu:24.04 + strategy: + fail-fast: false + matrix: + version: ["main", "0.10", "0.9", "0.8"] + python-version: ["3.10", "3.13"] + # NOTE: Overspecification of %%clang@18 to fix ABI issues (std::string related?). + # NOTE: clang sometimes likes stub or Intel MPI. + spec: ["build_type=Developer +petsc4py +slepc4py %%gcc@13 ^petsc+mumps ^fenics-dolfinx+adios2 ^mpich", + "build_type=Developer %%clang@18 ^openmpi"] + # Test new superlu-dist variant + include: + - version: "main" + spec: "build_type=Developer %%clang@18 ^mpich ^fenics-dolfinx+superlu-dist" + python-version: "3.12" + env: + OMPI_ALLOW_RUN_AS_ROOT: 1 + OMPI_ALLOW_RUN_AS_ROOT_CONFIRM: 1 + PRTE_MCA_rmaps_default_mapping_policy: :oversubscribe # Newer OpenMPI + OMPI_MCA_rmaps_base_oversubscribe: true # Older OpenMPI + + steps: + - uses: actions/checkout@v5 + with: + path: spack-fenics + - uses: ./spack-fenics/.github/actions/test-package + with: + spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} + # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 + - name: Run tests + if: ${{ matrix.version == '0.8' || matrix.version == '0.9'}} + shell: spack-bash {0} + run: | + spack env activate ./env + spack install --add py-pytest@8.4 py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} + spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} + spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} + python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit + mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit + - name: Run tests + if: ${{ matrix.version != '0.8' && matrix.version != '0.9'}} + shell: spack-bash {0} + run: | + spack env activate ./env + spack install --add py-pytest py-scipy py-pytest-xdist ^python@${{ matrix.python-version }} + spack stage py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} + spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} + python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_symmetry_interior_facet_assembly[mesh1]" python/test/unit + mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_symmetry_interior_facet_assembly[mesh1]" python/test/unit + + py-fenics-ffcx: + needs: style-check + runs-on: ubuntu-latest + container: ubuntu:24.04 + strategy: + fail-fast: false + matrix: + version: ["main", "0.10", "0.9", "0.8"] + + steps: + - uses: actions/checkout@v5 + with: + path: spack-fenics + - uses: ./spack-fenics/.github/actions/test-package + with: + spec: py-fenics-ffcx@${{ matrix.version }} + # NOTE: ffcx version 0.8 currently broken + - name: Run tests + if: ${{ matrix.version != '0.8' }} + shell: spack-bash {0} + run: | + spack env activate ./env + spack install --add py-pytest py-sympy py-pytest-xdist + spack stage py-fenics-ffcx@${{ matrix.version }} + spack cd py-fenics-ffcx@${{ matrix.version }} + python -m pytest -n auto test/ + + py-fenics-ufl: + needs: style-check + runs-on: ubuntu-latest + container: ubuntu:24.04 + strategy: + fail-fast: false + matrix: + version: ["main", "2025.2", "2025.1", "2024.2", "2024.1"] + + steps: + - uses: actions/checkout@v5 + with: + path: spack-fenics + - uses: ./spack-fenics/.github/actions/test-package + with: + spec: py-fenics-ufl@${{ matrix.version }} + - name: Run tests + shell: spack-bash {0} + run: | + spack env activate ./env + spack install --add py-pytest py-pytest-xdist + spack stage py-fenics-ufl@${{ matrix.version }} + spack cd py-fenics-ufl@${{ matrix.version }} + python -m pytest -n auto test/ From 7dd248667677abec0177a557c9bdfee8e5521314 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 16 Feb 2026 08:27:25 +0100 Subject: [PATCH 88/90] Use gcc for FFCx tests, skip ref count UFL test --- .github/workflows/spack-matrix.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index bbbd5558..237a55df 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -218,7 +218,7 @@ jobs: path: spack-fenics - uses: ./spack-fenics/.github/actions/test-package with: - spec: py-fenics-ffcx@${{ matrix.version }} + spec: py-fenics-ffcx@${{ matrix.version }} %%gcc@13 # NOTE: ffcx version 0.8 currently broken - name: Run tests if: ${{ matrix.version != '0.8' }} @@ -246,6 +246,7 @@ jobs: - uses: ./spack-fenics/.github/actions/test-package with: spec: py-fenics-ufl@${{ matrix.version }} + # NOTE: Reference counting changed in Python 3.14, leading to test failure. - name: Run tests shell: spack-bash {0} run: | @@ -253,4 +254,4 @@ jobs: spack install --add py-pytest py-pytest-xdist spack stage py-fenics-ufl@${{ matrix.version }} spack cd py-fenics-ufl@${{ matrix.version }} - python -m pytest -n auto test/ + python -m pytest -n auto -k "not test_strip_form_arguments_strips_data_refs" test/ From ecfd057a52fccab895ad44376f58cf19cd2bcfc6 Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 16 Feb 2026 09:08:44 +0100 Subject: [PATCH 89/90] Try forcing Python to be built with GCC. --- .github/workflows/spack-matrix.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 237a55df..3fd29946 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -216,9 +216,10 @@ jobs: - uses: actions/checkout@v5 with: path: spack-fenics + # NOTE: Python built with GCC, otherwise cffi can try for an odd compiler. - uses: ./spack-fenics/.github/actions/test-package with: - spec: py-fenics-ffcx@${{ matrix.version }} %%gcc@13 + spec: py-fenics-ffcx@${{ matrix.version }} ^python %%gcc@13 # NOTE: ffcx version 0.8 currently broken - name: Run tests if: ${{ matrix.version != '0.8' }} From d768cc53a41a5d7aa5fa828a14f578e029316bda Mon Sep 17 00:00:00 2001 From: "Jack S. Hale" Date: Mon, 16 Feb 2026 13:00:52 +0100 Subject: [PATCH 90/90] 0.8 tests ok but very very slow --- .github/workflows/spack-matrix.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/spack-matrix.yml b/.github/workflows/spack-matrix.yml index 3fd29946..1fbbb7b6 100644 --- a/.github/workflows/spack-matrix.yml +++ b/.github/workflows/spack-matrix.yml @@ -182,8 +182,8 @@ jobs: with: spec: py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} # pytest@8.4 required for collision of [tool.pytest] and [tool.pytest.ini_options] since @9.0 - - name: Run tests - if: ${{ matrix.version == '0.8' || matrix.version == '0.9'}} + - name: Run tests (0.9) + if: ${{ matrix.version == '0.9'}} shell: spack-bash {0} run: | spack env activate ./env @@ -192,7 +192,8 @@ jobs: spack cd py-fenics-dolfinx@${{ matrix.version }} ${{ matrix.spec }} ^python@${{ matrix.python-version }} python -m pytest -n auto -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit mpiexec -n 3 python -m pytest -m "not petsc4py and not adios2" -k "not test_cffi_expression and not test_cube_distance" python/test/unit - - name: Run tests + # NOTE: 0.8 tests run very slow - skip? + - name: Run tests (not 0.8 and not 0.9) if: ${{ matrix.version != '0.8' && matrix.version != '0.9'}} shell: spack-bash {0} run: |