Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
d2f00cb
openmpi: Fix style issue not caught in #357 (#857)
tldahlgren Jul 29, 2025
838eb4e
Fix style issues in `develop` (#856)
alalazo Jul 29, 2025
9fdfa42
xrootd: conflict with cxxstd=17,20 when ~client_only resolved for 5.7…
wdconinc Jul 29, 2025
4da1518
Bump spack version (#839)
haampie Jul 29, 2025
58b6a1d
py_ase: new versions and maintainer (#849)
alikhamze Jul 29, 2025
81ad98d
gha: test source canonicalization (#783)
haampie Jul 30, 2025
b842a29
formatting: make `ruff check` pass (#865)
tgamblin Jul 30, 2025
9b6b250
Fixes to cray* packages (#844)
alalazo Jul 30, 2025
70cfdbe
e4s ci: require ~hipblaslt for rocblas (#825)
afzpatel Jul 30, 2025
ef4dd70
kadath: Update source git repo and fix build (#771)
mirenradia Jul 30, 2025
34bdef7
compadre, py-pycompadre: add v1.6.2 (#870)
kuberry Jul 30, 2025
dd48b36
libx11: add v1.8.12 (#868)
manuelakuhn Jul 30, 2025
aab4788
exempi: add v2.6.6 and fix compiler dependency (#841)
manuelakuhn Jul 30, 2025
1b976bb
py-keras: add v3.11.0 (#867)
adamjstewart Jul 30, 2025
91b2d36
xrootd: add v5.8.4, v5.7.3 (#848)
wdconinc Jul 30, 2025
0fd7453
tempestremap: add v2.2.0 and v2.1.0 : 2.1.5 (#858)
andrewdnolan Jul 30, 2025
b80f5e9
yosys: add v0.54, v0.55 (#852)
davekeeshan Jul 30, 2025
ed3ba7e
py-datalad: fix py-setuptools restriction for old versions (#851)
manuelakuhn Jul 30, 2025
06bcd9b
verilator: add v5.038, remove fortran dependency (#850)
davekeeshan Jul 30, 2025
6bb0e1b
nco: add 5.3.4 (#833)
andrewdnolan Jul 30, 2025
34a92d9
py-datalad-neuroimaging: add v0.3.7 (#843)
manuelakuhn Jul 30, 2025
81c2c69
py-datalad-metalad: add v0.4.22 (#842)
manuelakuhn Jul 30, 2025
ebf4489
py-datalad-metadata-model: add v0.3.11 (#837)
manuelakuhn Jul 30, 2025
5bb9d2c
netcdf-fortran: add v4.6.2 (#835)
andrewdnolan Jul 30, 2025
9e0f013
py-pybind11: add v3.0.0 (#793)
wdconinc Jul 30, 2025
4185455
py-scipy: add v1.16.1 (#823)
adamjstewart Jul 30, 2025
8007c8c
meson: add v1.8.2, v1.7.2 (#811)
wdconinc Jul 30, 2025
ac501c2
pixman: add v0.46.4, v0.44.2 (#810)
wdconinc Jul 30, 2025
b2a5965
assimp: add v6.0.2 (#808)
wdconinc Jul 30, 2025
5666fa6
mlpack: add v4.6.2 (#803)
wdconinc Jul 30, 2025
58276d4
valgrind: add v3.25.1 (#802)
wdconinc Jul 30, 2025
fd5a697
hdfview: add new version and java usage (#487)
Chrismarsh Jul 30, 2025
ff12d45
coin3d: add v4.0.4 (#795)
wdconinc Jul 30, 2025
6eb67db
libftdi: new package (#113)
davekeeshan Jul 30, 2025
633ec00
ddc: new package (#703)
tretre91 Jul 30, 2025
d8724ac
py-geemap: add v0.36.0 (#773)
adamjstewart Jul 30, 2025
5b95475
py-fastapi: fix dependency (#777)
wu-kan Jul 30, 2025
2420226
bash: add v5.3 (#587)
michaelkuhn Jul 30, 2025
63d3063
libaec: add v1.1.1 -> v1.1.4 (#705)
cosunae Jul 30, 2025
c457c24
cutlass: add v4.0.0, v4.1.0 (#667)
wu-kan Jul 30, 2025
9311ed0
gdbm: patch nonexistent function (#373)
sethrj Jul 30, 2025
a30431e
gromacs: add v2024.4, apple-clang openmp support for 2025+ (#61)
mathomp4 Jul 30, 2025
506c7f3
spiner: add v1.6.4 (#676)
rbberger Jul 30, 2025
ef586f2
py-gpaw: new maintainers and package versions (#361)
alikhamze Jul 30, 2025
ee1b48a
fzf: add v0.64.0 (#626)
alecbcs Jul 30, 2025
7bfe695
javafx: adding v21.0.8 and v17.0.16 (#605)
snehring Jul 30, 2025
c4d983b
Julia: add v1.11.6 (#562)
m-fila Jul 30, 2025
3dc5f17
pandoc: add v3.7.0.2 (#748)
manuelakuhn Jul 30, 2025
9cb8344
CuPy: new version 13.5.1 and fixes (#725)
yizeyi18 Jul 30, 2025
5ffc883
ci: use `python -m pip install` instead of `pip install` (#885)
tgamblin Jul 31, 2025
61d00d1
trilinos: update for latest kokkos ecosystem release (#879)
lucbv Jul 31, 2025
4fac4e1
py-huggingface-hub: add v0.33.1 (#820)
wu-kan Aug 1, 2025
fa3c4a6
bash: fix checksum and add patches (#887)
manuelakuhn Aug 1, 2025
c747f38
dplasma: new package + required updates to parsec package (#502)
G-Ragghianti Aug 1, 2025
54f61c4
formatting: make `ruff format` almost pass (#866)
tgamblin Aug 1, 2025
4748643
BlisBase: set `target=` configuration argument (#503)
G-Ragghianti Aug 1, 2025
c2bb5a6
py-cartopy: add v0.25.0 (#922)
adamjstewart Aug 1, 2025
e041769
environment-modules: add v5.6.0 (#916)
xdelaruelle Aug 1, 2025
20aa538
py-keras: add v3.11.1 (#913)
adamjstewart Aug 1, 2025
34d5b25
py-dunamai: add v1.25.0 (#894)
manuelakuhn Aug 1, 2025
af0113a
py-duecredit: add v0.10.2 (#892)
manuelakuhn Aug 1, 2025
08f5f89
py-distro: add v1.9.0 (#886)
manuelakuhn Aug 1, 2025
81482b3
ci: add remove package label (#920)
alecbcs Aug 1, 2025
a9d5a31
py-xhistogram: fix python 3.12 (#898)
Chrismarsh Aug 1, 2025
3dc6225
miniconda: add New Releases (#915)
huston-rogers Aug 1, 2025
b0a0ae0
curl: add 8.14.1 and 8.15.0 (#739)
tgamblin Aug 2, 2025
d49f5ac
py-libclang: setup.py renamed (#807)
adamjstewart Aug 2, 2025
63e5f02
Add ajpotts as Arkouda package maintainer (#901)
ajpotts Aug 3, 2025
0dfba30
FairROOT: new package (#673)
jezwilkinson Aug 3, 2025
e345ac8
petsc, py-petsc4py: add v3.23.5 (#904)
balay Aug 3, 2025
71ab97d
acts dependencies: new versions as of 2025/07/07 (#497)
stephenswat Aug 3, 2025
ceab894
apfel: fix cmake version typo (#928)
wdconinc Aug 4, 2025
216da05
meep: add fftw-api dependency (#778)
samfux84 Aug 4, 2025
e1adf72
OpenMPI: can't build with flang 19 and older (#806)
adamjstewart Aug 4, 2025
1a476c7
udunits: Fix download URL (#931)
RemiLacroix-IDRIS Aug 4, 2025
ddaeed7
py-numpy-indexed: add new package (#934)
thomas-bouvier Aug 4, 2025
c27b98c
ruff: check for undefined symbols in packages (#924)
tgamblin Aug 4, 2025
d330735
undeprecate gcc@12.3.0 (#946)
haampie Aug 5, 2025
6a8906e
py-matplotlib: add v3.10.5 (#912)
adamjstewart Aug 5, 2025
a8afaa7
fltk: add 1.4.3 (#333)
hjjvandam Aug 5, 2025
77e5734
expect: Fix build with %gcc@13: (#530)
yizeyi18 Aug 5, 2025
06fd537
libssh2: deprecate older versions due to CVEs (#446)
drkrynstrng Aug 5, 2025
e2702ef
new packages: nmad, padicotm, pioman, puk, pukabi (#289)
a-denis Aug 5, 2025
5c113b5
macsio: +pdb implies +silo (#948)
haampie Aug 5, 2025
e5a6490
py-rpds-py: depends_on rust type=build (#138)
wdconinc Aug 5, 2025
3e277ff
py-dask_jobqueue: add new package (#923)
Chrismarsh Aug 5, 2025
0bac2b2
relion: Fix ~cuda variant build (#560)
nboelte Aug 5, 2025
4b243eb
gobject-introspection: restore setuptools@44: support (#929)
Chrismarsh Aug 5, 2025
7800d18
netcdf-fortran: Make sure -fallow-argument-mismatch is added only for…
msimberg Aug 6, 2025
2cfda67
ascent: add version 0.9.4 (#744)
vicentebolea Aug 6, 2025
049cbc3
new py-psycopg2 version (#959)
marcmengel Aug 6, 2025
7d20b76
Bump Spack version (#945)
alalazo Aug 6, 2025
f92941f
rucio-client: add v37.3.0 (#159)
panta-123 Aug 6, 2025
2eaa674
py-decorator: add v5.2.1 (#884)
manuelakuhn Aug 6, 2025
be26b17
py-debugpy: add v1.8.15 (#883)
manuelakuhn Aug 6, 2025
36ce517
prrte: starting from v3.0.1 require pmix v4.2.4 or higher (#938)
harshula Aug 6, 2025
57148e5
chafa: add v1.16.2 (#492)
Buldram Aug 6, 2025
a273bfa
py-aniso8601: add v10.0.1 (#590)
manuelakuhn Aug 6, 2025
405e977
iwyu,g2,r-curl: requires(pkg) -> requires(^pkg) (#962)
wdconinc Aug 6, 2025
ab94c99
py-alabaster: add v1.0.0 (#589)
manuelakuhn Aug 6, 2025
5aa70b1
amrex: add v25.08 (#954)
WeiqunZhang Aug 6, 2025
cf2e2f7
environment-modules: fix X variant + fix v3.2 build + add new-feature…
xdelaruelle Aug 6, 2025
2282554
beast2: adding v2.7.7 (#604)
snehring Aug 6, 2025
7e2f78a
verible: add v0.0.4013 (#855)
davekeeshan Aug 6, 2025
9c5ce59
py-pytest: add v8.2.2, v8.3.5, v8.4.1 (#862)
wdconinc Aug 6, 2025
5acbd5c
GSL: fix configure args for external cblas (#943)
jgraciahlrs Aug 6, 2025
eaa42dd
pdf2svg: add v0.2.4 (#942)
rbberger Aug 6, 2025
01abbf3
parthenon: add correct language dependencies (#940)
tukss Aug 6, 2025
ce83510
parallel-netcdf: add v1.14.1 (#936)
andrewdnolan Aug 6, 2025
9b97173
(py-)fenics-dolfinx: dependency fixes and improvements (#914)
garth-wells Aug 6, 2025
30eda29
papi: add v7.2.0 (#535)
G-Ragghianti Aug 6, 2025
0c328dd
prrte: add constraint on PMIx version (#917)
w8jcik Aug 6, 2025
c9f6321
ports_of_call: kokkos bugfix and update c dependency (#910)
rbberger Aug 6, 2025
5e7480f
py-orjson: fix bug and and add v3.11.1 (#906)
wu-kan Aug 6, 2025
2d28503
py-altair: fix python dependency and add v5.5.0 (#882)
wu-kan Aug 6, 2025
7801e9a
linaro-forge: add v25.0.2 (#895)
kenche-linaro Aug 6, 2025
b535be1
dakota: add hdf5 variant, use cxx14, model trilinos dependency (#889)
becker33 Aug 6, 2025
41c963d
mochi-margo: added version 0.19.1 and 0.19.2 (#888)
mdorier Aug 6, 2025
38620fa
meshlab: depends_on qt +ssl (#878)
wdconinc Aug 6, 2025
121c953
hpx: add option for the lci parcelport (#941)
JiakunYan Aug 6, 2025
11bdf2c
Merge remote-tracking branch 'upstream/develop' into maintenance/merg…
greenc-FNAL Aug 6, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .ci/env
Original file line number Diff line number Diff line change
@@ -1 +1 @@
SPACK_CHECKOUT_VERSION=8bfe963d9b4f1f05fa49341f0df760125be1b891
SPACK_CHECKOUT_VERSION=982e400c0a74a20a00f71008cc3b4a03c218cf09
20 changes: 11 additions & 9 deletions .ci/gitlab/stacks/e4s/spack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ spack:
variants: +pic +xz
openblas:
variants: threads=openmp
rocblas:
require: ~hipblaslt #hangs in ci
trilinos:
variants: +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext
+ifpack +ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu
Expand Down Expand Up @@ -361,22 +363,22 @@ spack:
- chai +rocm amdgpu_target=gfx90a
- ecp-data-vis-sdk ~paraview +vtkm +rocm amdgpu_target=gfx90a # +paraview: CMake Error at VTK/ThirdParty/vtkm/vtkvtkm/vtk-m/CMakeLists.txt:272 (find_package): Could not find a package configuration file provided by "rocthrust" with any of the following names: rocthrustConfig.cmake rocthrust-config.cmake
- gasnet +rocm amdgpu_target=gfx90a
# - ginkgo +rocm amdgpu_target=gfx90a # removed due to transitive hipblaslt dep
- ginkgo +rocm amdgpu_target=gfx90a
- heffte +rocm amdgpu_target=gfx90a
- hpx +rocm amdgpu_target=gfx90a
# - hypre +rocm amdgpu_target=gfx90a # removed due to transitive hipblaslt dep
- hypre +rocm amdgpu_target=gfx90a
- kokkos +rocm amdgpu_target=gfx90a
- lammps +rocm amdgpu_target=gfx90a
- legion +rocm amdgpu_target=gfx90a
# - libceed +rocm amdgpu_target=gfx90a # removed due to transitive hipblaslt dep
# - magma ~cuda +rocm amdgpu_target=gfx90a # removed due to transitive hipblaslt dep
# - mfem +rocm amdgpu_target=gfx90a # removed due to transitive hipblaslt dep
- libceed +rocm amdgpu_target=gfx90a
- magma ~cuda +rocm amdgpu_target=gfx90a
- mfem +rocm amdgpu_target=gfx90a
- raja ~openmp +rocm amdgpu_target=gfx90a
# - slate +rocm amdgpu_target=gfx90a # removed due to transitive hipblaslt dep
# - strumpack ~slate +rocm amdgpu_target=gfx90a # removed due to transitive hipblaslt dep
- slate +rocm amdgpu_target=gfx90a
- strumpack ~slate +rocm amdgpu_target=gfx90a
- sundials +rocm amdgpu_target=gfx90a
# - superlu-dist +rocm amdgpu_target=gfx90a # removed due to transitive hipblaslt dep
# - tasmanian ~openmp +rocm amdgpu_target=gfx90a # removed due to transitive hipblaslt dep
- superlu-dist +rocm amdgpu_target=gfx90a
- tasmanian ~openmp +rocm amdgpu_target=gfx90a
- trilinos +amesos +amesos2 +anasazi +aztec +belos +boost +epetra +epetraext +ifpack ~ifpack2 +intrepid +intrepid2 +isorropia +kokkos +ml +minitensor +muelu +nox +piro +phalanx +rol +rythmos +sacado +stk +shards +shylu ~stokhos +stratimikos +teko +tempus +tpetra +trilinoscouplings +zoltan +zoltan2 +superlu-dist gotype=long_long +rocm amdgpu_target=gfx90a
- umpire +rocm amdgpu_target=gfx90a
- upcxx +rocm amdgpu_target=gfx90a
Expand Down
2 changes: 1 addition & 1 deletion .ci/gitlab/stacks/tutorial/spack.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ spack:
- hdf5+hl+mpi ^mpich
- trilinos
- trilinos +hdf5 ^hdf5+hl+mpi ^mpich
- gcc@12
- gcc@12.3
- mpileaks
- lmod@8.7.18
- environment-modules
Expand Down
5 changes: 5 additions & 0 deletions .github/labels.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ update-package:
- 'modified'
- 'renamed'

remove-package:
filename: '^repos/spack_repo/builtin/packages/[^/]+/package.py$'
status:
- 'removed'

maintainers:
patch: '[+-] +maintainers +='

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/audit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
python-version: ${{inputs.python_version}}
- name: Install Python packages
run: |
pip install --upgrade pip setuptools pytest coverage[toml]
python -m pip install --upgrade pip setuptools pytest coverage[toml]
- name: Setup for Windows run
if: runner.os == 'Windows'
run: |
Expand Down
148 changes: 148 additions & 0 deletions .github/workflows/bin/canonicalize.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
#!/usr/bin/env python3
# Copyright Spack Project Developers. See COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import argparse
import ast
import os
import subprocess
import sys
from itertools import product
from typing import List


def run_git_command(*args: str, dir: str) -> None:
"""Run a git command in the output directory."""
subprocess.run(
[
"git",
"-c",
"user.email=example@example.com",
"-c",
"user.name=Example",
"-c",
"init.defaultBranch=main",
"-c",
"color.ui=always",
"-C",
dir,
*args,
],
check=True,
stdout=sys.stdout,
stderr=sys.stderr,
)


def run(root: str, output_dir: str) -> None:
"""Recurse over a directory and canonicalize all Python files."""
from spack.util.package_hash import RemoveDocstrings, unparse

count = 0
stack = [root]

while stack:
current = stack.pop()
for entry in os.scandir(current):
if entry.is_dir(follow_symlinks=False):
stack.append(entry.path)
elif entry.is_file(follow_symlinks=False) and entry.name.endswith(".py"):
try:
with open(entry.path, "r") as f:
src = f.read()
except OSError:
continue

canonical_dir = os.path.join(output_dir, os.path.relpath(current, root))
os.makedirs(canonical_dir, exist_ok=True)
with open(os.path.join(canonical_dir, entry.name), "w") as f:
f.write(
unparse(RemoveDocstrings().visit(ast.parse(src)), py_ver_consistent=True)
)
count += 1

assert count > 0, "No Python files found in the specified directory."


def compare(
input_dir: str, output_dir: str, python_versions: List[str], spack_versions: List[str]
) -> None:
"""Compare canonicalized files across different Python versions and error if they differ."""
# Create a git repo in output_dir to track changes
os.makedirs(output_dir, exist_ok=True)
run_git_command("init", dir=output_dir)

pairs = list(product(spack_versions, python_versions))

if len(pairs) < 2:
raise ValueError("At least two Python or two Spack versions must be given for comparison.")

changes_with_previous: List[int] = []

for i, (spack_dir, python_exe) in enumerate(pairs):
print(f"\033[1;97mCanonicalizing with {python_exe} and {spack_dir}...\033[0m", flush=True)

# Point PYTHONPATH to the given Spack library for the subprocess
if not os.path.isdir(spack_dir):
raise ValueError(f"Invalid Spack dir: {spack_dir}")
env = os.environ.copy()
spack_pythonpath = os.path.join(spack_dir, "lib", "spack")
if "PYTHONPATH" in env and env["PYTHONPATH"]:
env["PYTHONPATH"] = f"{spack_pythonpath}{os.pathsep}{env['PYTHONPATH']}"
else:
env["PYTHONPATH"] = spack_pythonpath

subprocess.run(
[python_exe, __file__, "--run", "--input-dir", input_dir, "--output-dir", output_dir],
check=True,
stdout=sys.stdout,
stderr=sys.stderr,
env=env,
)
if i > 0:
try:
run_git_command("diff", "--exit-code", "HEAD", dir=output_dir)
except subprocess.CalledProcessError:
changes_with_previous.append(i)

# The first run creates a commit for reference
run_git_command("add", ".", dir=output_dir)
run_git_command(
"commit",
"--quiet",
"--allow-empty", # makes this idempotent when running locally
"-m",
f"Canonicalized with {python_exe} and {spack_dir}",
dir=output_dir,
)

for i in changes_with_previous:
previous_spack, previous_python = pairs[i - 1]
current_spack, current_python = pairs[i]
print(
f"\033[1;31mChanges detected between {previous_python} ({previous_spack}) and "
f"{current_python} ({current_spack})\033[0m"
)

if changes_with_previous:
exit(1)


if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Canonicalize Spack package files.")
parser.add_argument("--run", action="store_true", help="Generate canonicalized sources.")
parser.add_argument("--spack", nargs="+", help="Specify one or more Spack versions.")
parser.add_argument("--python", nargs="+", help="Specify one or more Python versions.")
parser.add_argument("--input-dir", type=str, required=True, help="A repo's packages dir.")
parser.add_argument(
"--output-dir",
type=str,
required=True,
help="The output directory for canonicalized package files.",
)
args = parser.parse_args()

if args.run:
run(args.input_dir, args.output_dir)
else:
compare(args.input_dir, args.output_dir, args.python, args.spack)
19 changes: 19 additions & 0 deletions .github/workflows/prechecks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,22 @@ jobs:
run: |
. spack-core/share/spack/setup-env.sh
spack ci verify-versions HEAD~1 HEAD

canonicalization:
name: package.py canonicalization
runs-on: ubuntu-latest
container:
image: ghcr.io/spack/all-pythons:2025-07-25

steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
with:
fetch-depth: 0
- uses: ./.github/actions/checkout-spack

- name: Test package.py canonicalization
run: .github/workflows/bin/canonicalize.py
--spack $PWD/spack-core
--python python3.6 python3.7 python3.8 python3.9 python3.10 python3.11 python3.12 python3.13
--input-dir repos/spack_repo/builtin/packages/
--output-dir canonicalized
Loading