Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
464 commits
Select commit Hold shift + click to select a range
3b9f9a2
solver: account for language preferences on reused specs (#51417)
alalazo Oct 13, 2025
501dae3
Handle URL paths (#51401)
kwryankrattiger Oct 15, 2025
9ea9bc1
Revert "installer.py: start FIFO jobserver (#50708)" (#51444)
haampie Oct 17, 2025
cdb2edf
install_test.py: append to install-time test log for multiple test ph…
AlexanderRichert-NOAA Oct 17, 2025
7fbe31d
Enable concretization caching (redux) (#50905)
johnwparent Oct 18, 2025
0c83856
externals: Model as concrete specs and add dependency definitions (#5…
alalazo Oct 19, 2025
52ac1b0
fetch_strategy: for_package_version should not mutate `pkg.spec`
tgamblin Sep 29, 2025
6ebb9dd
`spack info`: show full dependency information
tgamblin Feb 23, 2025
cab059c
`spack info`: use when formatting for licenses
tgamblin Aug 11, 2025
cef86de
`spack info`: allow filtering by when
tgamblin Aug 11, 2025
1550e5e
Add `PackageBase.intersects()` to include more static information
tgamblin Sep 30, 2025
1625d84
`spack info`: make `--by-name` the default, `--by-when` an option
tgamblin Sep 30, 2025
22485da
`spack info`: fix error messages when 1 or 0 specs are provided
tgamblin Sep 30, 2025
24c5e2d
`spack info`: validate variant names in input specs
tgamblin Sep 30, 2025
cf0e39d
`spack info`: suggest disabling variants when there are too many cond…
tgamblin Sep 30, 2025
d5870a3
`spack info`: make text wrapping in output color-aware
tgamblin Oct 14, 2025
68a6ec6
`spack info`: ensure varant values / deptypes have minimum width
tgamblin Oct 14, 2025
63b4112
`spack info`: show compiler info in dependency specs
tgamblin Oct 14, 2025
20d4a0a
`spack info`: add more extensive testing for filtering
tgamblin Oct 15, 2025
0b06bb7
Update github workflow: vermin 1.7.0 (#51447)
netromdk Oct 20, 2025
5f53028
build(deps): bump pylint in /.github/workflows/requirements/style (#5…
dependabot[bot] Oct 20, 2025
6ed9a24
unit tests: use `builtin.mock` instead of `builtin` (#51449)
alalazo Oct 20, 2025
7e54c06
concretization cache: further simplify locking and fetch code (#51448)
tgamblin Oct 20, 2025
7c5a96f
spack info: deprecation warning + code cleanup (#51450)
tgamblin Oct 21, 2025
349b5cb
CI: Point at packages develop (#51451)
kwryankrattiger Oct 21, 2025
8773307
Implement direct pruning (#51153)
mvandenburgh Oct 21, 2025
52954c2
Ci fail fast (#51368)
kwryankrattiger Oct 21, 2025
e250ec0
Includes: support git includes (#51191)
tldahlgren Oct 22, 2025
63e6c2d
build(deps): bump ruamel-yaml in /.github/workflows/requirements/styl…
dependabot[bot] Oct 23, 2025
61b87b1
mirror: clean up stage when retrying (#43519)
michaelkuhn Oct 23, 2025
86c9b51
ConcretizationCache: do not enforce absolute paths for cache entry lo…
johnwparent Oct 23, 2025
1aa9853
SymlinkError: inherit from OSError so they can be caught like os.syml…
johnwparent Oct 23, 2025
fd902a7
Windows "spack python" fix: stop importing readline (#51467)
johnwparent Oct 24, 2025
1896634
Allow using buildcaches with Python 3.14 (#51464)
alalazo Oct 24, 2025
7a065a3
spack audit: minor grammar fix (#51470)
adamjstewart Oct 24, 2025
0cf6902
build(deps): bump pylint in /.github/workflows/requirements/style (#5…
dependabot[bot] Oct 25, 2025
4743171
solver: penalize language virtuals for each use (#51314)
alalazo Oct 27, 2025
d6757bd
build(deps): bump types-six in /.github/workflows/requirements/style …
dependabot[bot] Oct 28, 2025
86064bd
build(deps): bump isort in /.github/workflows/requirements/style (#51…
dependabot[bot] Oct 28, 2025
f52157a
build(deps): bump isort from 6.1.0 to 7.0.0 in /lib/spack/docs (#51438)
dependabot[bot] Oct 28, 2025
c585c6f
Configuration scopes: fix severe ordering issue when `-C` and `-e` ar…
alalazo Oct 28, 2025
c416672
Docs: Add github commit patch example (#51457)
tldahlgren Oct 28, 2025
d76c258
gha: test canonicalization with python 3.14 (#51427)
haampie Oct 28, 2025
c3a032d
Add MacOS Tahoe as compatible with Sequoia to help with migrations (#…
alecbcs Oct 29, 2025
528a49e
Use `gethostname` instead of `getfqdn` (#51481)
alalazo Oct 30, 2025
a184bc7
documentation: make dependency stand out more in the spec syntax sect…
alalazo Oct 30, 2025
593398e
`spack help`: colorize options, subcommands, and usage
tgamblin Oct 29, 2025
1fc7986
`spack help`: group options into more intuitive sections
tgamblin Oct 27, 2025
da34032
`spack help`: shorten command help strings to clean up `spack help`
tgamblin Oct 29, 2025
be21956
`spack help`: regroup options and commands into more intuitive groups
tgamblin Oct 29, 2025
1a5f4e0
Fix issue when reusing specs from another environment (#51423)
knoepfel Oct 30, 2025
bdf163a
`colify`: fix a bug in `colify_table` with too few columns (#51488)
tgamblin Oct 30, 2025
856a303
concretizer: option to disable compiler mixing between runtime deps (…
scheibelp Oct 30, 2025
a84b904
Remove `spack.llnl.util.tty.pty` (dead code) (#51492)
alalazo Oct 31, 2025
b1ed39a
Don't spawn a process for `--fake` installs (#51491)
alalazo Oct 31, 2025
37ec193
`format-rst.py`: Ignore advice about quoting double-colon overrides (…
tgamblin Nov 3, 2025
b892c07
fetch: work around Anubis AI protection (#51496)
michaelkuhn Nov 3, 2025
88f3dd4
binary_distribution: remove MirrorForSpec (#51501)
haampie Nov 3, 2025
dc7e4a2
config: define config scopes in configuration (#51162)
tgamblin Nov 3, 2025
8030f3e
solver: set preferences from input specs using `%%` (#51383)
alalazo Nov 3, 2025
4b9d4a7
spack clean: all means all (#50984)
becker33 Nov 4, 2025
7581ea2
solver: reduce items in edge optimizations (#51503)
alalazo Nov 4, 2025
01facca
solver: fix a bug in the initialization of the static analyzer (#51506)
alalazo Nov 4, 2025
75611a9
docs: tweak title of include override section (#51509)
tgamblin Nov 5, 2025
ecde809
Check for 'commit' variant only if not developing (#51507)
psakievich Nov 5, 2025
3949a27
concretization: improve error messages for requirements (#45800)
scheibelp Nov 5, 2025
54fed68
`config`: use `prefer_modify: true` to adjust edit preferences (#51510)
tgamblin Nov 6, 2025
1f58a5a
spack env create: allow creation from env or env dir (#51433)
becker33 Nov 6, 2025
30d3f63
schema/ci: fix comment typo/sentence length (#51520)
tldahlgren Nov 6, 2025
4170858
solver: remove unused rule (#51525)
scheibelp Nov 6, 2025
948620e
env: fix issues removing environments when env_root is a symlink (#51…
alecbcs Nov 6, 2025
482d589
installer: new console UI (#51434)
haampie Nov 6, 2025
da8b6dc
Docs: Add package review guide and roles and responsibilities (#51154)
tldahlgren Nov 6, 2025
bd1b908
Solver: fix bug removing early return for dev specs (#51523)
psakievich Nov 6, 2025
1f588b9
oci: support OAuth 2.0 (#51528)
JimPaine Nov 7, 2025
39e9fe0
oci: add example auth for Azure CR to docs (#51531)
JimPaine Nov 7, 2025
26a046f
new_installer.py: off by one (#51530)
haampie Nov 7, 2025
e61534c
Spack: bump version in develop to v1.2.0.dev0 (#51532)
alalazo Nov 7, 2025
1962a3e
bugfix: don't stop early when other spack process is installing (#51539)
tgamblin Nov 10, 2025
9cc897a
Resolve commit SHA look up failures for annotated tags (#51445)
psakievich Nov 10, 2025
5a521a9
restore SPACK_SYSTEM_CONFIG_PATH env override (#51551)
rbberger Nov 11, 2025
5276214
build(deps): bump pytest from 8.4.2 to 9.0.0 in /lib/spack/docs (#51546)
dependabot[bot] Nov 11, 2025
dcd93a7
build(deps): bump black in /.github/workflows/requirements/style (#51…
dependabot[bot] Nov 11, 2025
048ecdb
build(deps): bump python-levenshtein in /lib/spack/docs (#51504)
dependabot[bot] Nov 11, 2025
000a6ad
build(deps): bump black from 25.9.0 to 25.11.0 in /lib/spack/docs (#5…
dependabot[bot] Nov 11, 2025
de3f928
lock.py: simplify locking (#51508)
haampie Nov 11, 2025
2c5691a
Add '--profile-file filename' option to save cProfile stats. (#51543)
vbrunini Nov 11, 2025
7a306af
env: fix typo in untrack_env (#51554)
Sbozzolo Nov 12, 2025
34d79b7
spack checksum: fix broken help message (#51560)
alalazo Nov 12, 2025
802e7f6
new_installer: display help (#51557)
haampie Nov 12, 2025
70e20c7
installer: consolidate source/cache args (#51561)
haampie Nov 13, 2025
fcd79e6
new_installer.py: move help to header (#51568)
haampie Nov 13, 2025
80d3285
Skip resource downloads when an existing directory is passed to devel…
matthewcurry Nov 13, 2025
b19d43f
solver: disable concretization cache by default (#51569)
alalazo Nov 13, 2025
35bcc3a
Bugfix: `spack config blame` shows overridden scopes (#51565)
becker33 Nov 13, 2025
e66eaf2
bootstrap: update the versions of a few CMake dependencies (#51522)
alalazo Nov 14, 2025
9e8c307
Package API docs: remove version from header (#51574)
becker33 Nov 14, 2025
5f6121d
solver: move a debug print from level=2 to level=1 (#51571)
alalazo Nov 14, 2025
43e309c
bootstrap: python 3.14 binaries + general update (#51580)
haampie Nov 14, 2025
3b928ed
update binary bootstrap tarball to v2.2 (#51583)
becker33 Nov 14, 2025
889d2ea
CHANGELOG.md: updates for v1.1.0 (#51585)
becker33 Nov 14, 2025
cb4e5eb
build(deps): bump pytest from 9.0.0 to 9.0.1 in /lib/spack/docs (#51573)
dependabot[bot] Nov 15, 2025
9d95299
build(deps): bump pylint in /.github/workflows/requirements/style (#5…
dependabot[bot] Nov 15, 2025
5b6751e
spack tutorial: bump checkout version (#51587)
becker33 Nov 16, 2025
d5eb4db
new_installer: --dirty, --keep-stage, and skip patch (#51558)
haampie Nov 17, 2025
81b71e7
new_installer.py: test terminal ui (#51570)
haampie Nov 17, 2025
7a06883
solver: simplify encoding of versions (#51591)
alalazo Nov 17, 2025
c7354be
solver: match glibc constraints by hash (#51559)
alalazo Nov 18, 2025
443e1e3
new_installer.py: implement `--use-buildcache`, `--cache-only`, `--us…
haampie Nov 18, 2025
b76b43c
solver: manually optimize trigger_node projections (#51605)
alalazo Nov 19, 2025
394dd76
stage.py: fix type erasure issues (#51603)
haampie Nov 19, 2025
f8eff4d
spack install: deprecate --dont-restage (#51604)
haampie Nov 20, 2025
7bea853
repo.py: support rhel 7 (#51617)
haampie Nov 20, 2025
417913a
solver: optimize the encoding of the model (#51612)
alalazo Nov 21, 2025
a9febdb
Revert "spack install: deprecate --dont-restage (#51604)" (#51619)
haampie Nov 21, 2025
58b1bcf
Update github workflow: vermin 1.8.0 (#51614)
netromdk Nov 21, 2025
149b946
jobserver: add tests (#51592)
haampie Nov 21, 2025
c9656d4
bugfix: display `when` conditions with dependencies in `spack info` (…
tgamblin Nov 21, 2025
d6c916f
asp.py: trivial optimizations (#51626)
haampie Nov 22, 2025
8c84c3f
solver: reduce grounding size of satisfied/2 facts (#51625)
alalazo Nov 24, 2025
a894b59
directives: speed up depends_on (#51624)
haampie Nov 24, 2025
3697f11
Spec.format: speed up common case (#51630)
haampie Nov 24, 2025
4ab9199
asp.py: do not sort pkg.dependencies and versions (#51632)
haampie Nov 24, 2025
c116bbd
spack repo remove: allow removing from unspecified scope (#51563)
becker33 Nov 25, 2025
f5bf80c
provider_index.py: speed up providers_for (#51637)
haampie Nov 25, 2025
ae56830
new_installer.py: implement overwrite, keep_prefix (#51622)
haampie Nov 25, 2025
c63f1cc
docs: fix default projections setting discrepancy (#51640)
Copilot Nov 25, 2025
f669ee9
solver: remove `node_flag_source` condition (#51636)
tgamblin Nov 25, 2025
af82b67
solver: project `imposed_nodes/3` to `imposed_nodes/2` (#51631)
alalazo Nov 25, 2025
f7e2803
new_installer.py: --dont-restage (#51623)
haampie Nov 25, 2025
18c26c7
asp.py: move Spec.__str__ out of loop (#51629)
haampie Nov 25, 2025
ae3ddf9
Bugfix: List the component prefix not the root (#51635)
kwryankrattiger Nov 26, 2025
2ebf711
environments.rst: document new installer as alternative (#51646)
haampie Nov 26, 2025
a6a383e
ci: disable PerfPowerServices process on macos (#51647)
haampie Nov 26, 2025
f5e5d4c
config: use get_config instead of get where appropriate (#51651)
haampie Nov 27, 2025
28a797e
bootstrap: find compilers only when needed (#51648)
alalazo Nov 27, 2025
f5055df
Various micro optimizations (#51652)
haampie Nov 27, 2025
b1c3010
Avoid expensive module level code (#51650)
haampie Nov 27, 2025
a85ec51
env.py: typos (#51664)
haampie Dec 1, 2025
f330f59
Modify .gitignore for site scope README.md (#51669)
psakievich Dec 1, 2025
8bfbf6d
tests: improve `SpackCommand` and output capturing (#51666)
haampie Dec 2, 2025
e9c49e6
test/cmd/info.py: set COLUMNS (#51675)
haampie Dec 2, 2025
415be76
tests: no networking (#51676)
haampie Dec 2, 2025
85bae78
test/git_fetch.py: do not write in ~/.spack/git_repos (#51677)
haampie Dec 2, 2025
80adb7e
build(deps): bump pylint in /.github/workflows/requirements/style (#5…
dependabot[bot] Dec 3, 2025
cbe47f9
build(deps): bump sphinxcontrib-svg2pdfconverter in /lib/spack/docs (…
dependabot[bot] Dec 3, 2025
499a1b5
Git Fetch: Optimize clone for commits (#51577)
psakievich Dec 3, 2025
8b35b1c
env/spec: improve pickling (#51684)
haampie Dec 4, 2025
d6620aa
parallel.py: branch on multiprocessing start method (#51686)
haampie Dec 4, 2025
e88b054
solver: fix issue with conditional language dependencies (#51692)
alalazo Dec 4, 2025
6638491
python 3.14: fix path to url conversion (#51687)
haampie Dec 5, 2025
c97be4d
python 3.14: fix test by setting tarfile filter (#51688)
haampie Dec 5, 2025
21cbe8a
python 3.14: support t-strings in unparser (#51689)
haampie Dec 5, 2025
3fe6cfb
extensions.py: memoize extension_paths_from_entry_points (#51694)
alalazo Dec 5, 2025
671925b
tests: win32 subprocess fix (#51696)
haampie Dec 5, 2025
d182b35
spack verify versions: option to validate versions of installed softw…
becker33 Dec 5, 2025
3cd53ae
tests: fix spurious module test failure related to memoization (#51699)
alalazo Dec 8, 2025
8ca0187
tests: fix canfail package (#51697)
haampie Dec 8, 2025
3761fb6
spec.py: speed up pickling and edge iteration (#51685)
haampie Dec 8, 2025
5064a6d
build(deps): bump mypy in /.github/workflows/requirements/style (#51661)
dependabot[bot] Dec 8, 2025
99c8ee2
build(deps): bump mypy from 1.18.2 to 1.19.0 in /lib/spack/docs (#51662)
dependabot[bot] Dec 8, 2025
bd49a39
ci: use 4 cores on linux (#51667)
haampie Dec 8, 2025
ad28772
gha: move slow prereqs to unit_tests.yaml (#51704)
haampie Dec 8, 2025
a85cf23
build(deps): bump urllib3 from 2.5.0 to 2.6.0 in /lib/spack/docs (#51…
dependabot[bot] Dec 8, 2025
ecd9f78
Config: allow writing non-existent paths for optional scopes (#51700)
johnwparent Dec 8, 2025
693135c
build(deps): bump urllib3 from 2.6.0 to 2.6.1 in /lib/spack/docs (#51…
dependabot[bot] Dec 9, 2025
6616331
build(deps): bump black in /.github/workflows/requirements/style (#51…
dependabot[bot] Dec 9, 2025
e9b3220
python 3.14: support forkserver default (#51663)
haampie Dec 9, 2025
e8586d7
spec.py: improve edge iteration speed (#51709)
haampie Dec 9, 2025
ceff9eb
remove setuptools references from spack (#51705)
haampie Dec 9, 2025
7a4435e
build(deps): bump black from 25.11.0 to 25.12.0 in /lib/spack/docs (#…
dependabot[bot] Dec 9, 2025
1a726b1
build(deps): bump pytest from 9.0.1 to 9.0.2 in /lib/spack/docs (#51715)
dependabot[bot] Dec 9, 2025
d82f143
ci: use python 3.14 for coverage (#51660)
haampie Dec 9, 2025
15cdbdb
spack compiler info: show non-external compilers too (#51718)
alalazo Dec 9, 2025
58541c1
repo.py: use fstatat(2) in FastPackageChecker (#51710)
haampie Dec 9, 2025
e3e8e89
repo.py: replace _has_name with bool() (#51720)
haampie Dec 10, 2025
541ec22
tests: use mock package hash (#51644)
haampie Dec 10, 2025
6a15cf2
repo: memoized pkg_class construction (#51649)
alalazo Dec 10, 2025
cba4a70
externals: add a namespace before concretization (#51708)
alalazo Dec 10, 2025
815336d
spack compiler: remove deprecated --mixed-toolchain option (#51726)
alalazo Dec 10, 2025
044f290
solver: avoid repeated external "parsing" (#51653)
haampie Dec 10, 2025
4e84b83
extract_git_version_str: resolve issue with mac git error (#51723)
tldahlgren Dec 10, 2025
8a47f8d
repo.py: fix checking out commits (#51695)
haampie Dec 10, 2025
0fe244c
tests: avoid networking with git (#51730)
haampie Dec 11, 2025
d9cf77e
stage: use effective uid's username; fix tests under `unshare -r` (#5…
haampie Dec 11, 2025
3adf5f6
build(deps): bump urllib3 from 2.6.1 to 2.6.2 in /lib/spack/docs (#51…
dependabot[bot] Dec 12, 2025
37881df
audit.py: fix re.sub(..., 1) positional count arg (#51735)
haampie Dec 12, 2025
099e65c
docs: use `autodoc_preserve_defaults = True` (#51733)
haampie Dec 12, 2025
8266c69
env: drop default venv search path from `PYTHONPATH` when activating …
Ivan-Hrd Dec 12, 2025
a60742f
spec parser: ensure toolchains are expanded to different objects (#51…
alalazo Dec 12, 2025
d9071ea
concretizer: parallel concretization on darwin/win32/linux-python3.14…
haampie Dec 12, 2025
edd0ea1
asp.py: partially revert #51626 (#51749)
haampie Dec 15, 2025
a7ca0dc
tests: use direct pytest invocation on windows (#51742)
haampie Dec 15, 2025
d0b8ffa
fetch_strategy.py: auto dir for git resources (#51754)
haampie Dec 15, 2025
06973ac
gha: use python3 -m pytest and avoid spack-tmpconfig (#51753)
haampie Dec 15, 2025
55fe025
Revert "repo: memoized pkg_class construction (#51649)" (#51759)
haampie Dec 15, 2025
353c0eb
build(deps): bump mypy from 1.19.0 to 1.19.1 in /lib/spack/docs (#51762)
dependabot[bot] Dec 16, 2025
6a44ce5
build(deps): bump mypy in /.github/workflows/requirements/style (#51761)
dependabot[bot] Dec 16, 2025
51f970b
tests: fix Windows path related issues on Python 3.13+ (#51734)
haampie Dec 16, 2025
8ecc2ef
solver: exclude externals from deprecation penalties (#51764)
alalazo Dec 16, 2025
742dbe9
test: skip cmd/unit_test.py tests (#51758)
haampie Dec 16, 2025
e41fcdc
gha: use python 3.14 on windows for coverage (#51728)
haampie Dec 16, 2025
c7199c5
new_installer.py: assign prefixes ahead of time (#51769)
haampie Dec 16, 2025
63a4170
Windows: disable parallel concretization (#51774)
johnwparent Dec 16, 2025
87168d9
schema: add descriptions (#51286)
haampie Dec 17, 2025
8823138
git: pull_checkout_branch RHEL7 git 1.8.3.1 fix (#51779)
haampie Dec 17, 2025
8ca06da
oci: parse WWW-Authenticate headers case-insensitively (#51777)
lmeinen Dec 18, 2025
f799ac9
build(deps): bump docutils in /.github/workflows/requirements/style (…
dependabot[bot] Dec 19, 2025
b619ad2
`util/typing.py`: eliminate runtime overhead (#51781)
haampie Dec 23, 2025
369f267
typing.py: fix a typo with class definition (#51797)
alalazo Dec 29, 2025
105e2b2
spec: fix issue with `%<virtual>` satisfying itself (#51773)
alalazo Dec 29, 2025
872de4d
Fix a few classes using `__slots__` (#51798)
alalazo Dec 29, 2025
a0298f6
ci: add labeler configuration (#51763)
alecbcs Dec 29, 2025
7198409
Add an option to highlight non-default versions and variants (#51674)
alalazo Dec 30, 2025
0154734
Developer Docs: Add section on debugging GHA Unit Tests (#51772)
johnwparent Dec 30, 2025
59b4e44
build(deps): bump ruamel-yaml in /.github/workflows/requirements/styl…
dependabot[bot] Jan 1, 2026
7e2a25e
build(deps): bump ruamel-yaml in /.github/workflows/requirements/styl…
dependabot[bot] Jan 4, 2026
80231f3
spec_parser.py: remove Spack v0.x warnings (#51809)
haampie Jan 5, 2026
2021c36
spec: optimize constructor (#51810)
haampie Jan 5, 2026
28e06c4
ruamel.yaml: fix another quadratic complexity issue (#51807)
haampie Jan 5, 2026
4a2b550
docs: update to sphinx 9 (#51803)
haampie Jan 5, 2026
ab5ab55
package_hash.py: do not copy input spec (#51783)
haampie Jan 5, 2026
6fef149
schema/concretizer.py: remove enable_node_namespace (#51778)
haampie Jan 5, 2026
ef70337
new_installer.py: delay "setup_package" until after install from bina…
haampie Jan 5, 2026
c128299
codecs.StreamReader -> io.TextIOWrapper (#51767)
haampie Jan 5, 2026
a3c33b7
style.py: improve redundant/missing imports check (#51766)
haampie Jan 5, 2026
182c615
ci: fix an edge case where multiple versions share the same checksum …
alecbcs Jan 6, 2026
33b4f8a
Buildcache Views (#51213)
kwryankrattiger Jan 6, 2026
fe43834
spec.py: fix SpecBuildInterface pickling issue (#51815)
haampie Jan 6, 2026
ad1374e
spack.llnl.util.tty.color: add type hints, fix a few bugs (#51820)
alalazo Jan 7, 2026
744e44a
solver: do a precheck for non-existing and deprecated versions (#51555)
tgamblin Jan 7, 2026
f86ad38
solver: remove internal errors in the solver (#51642)
alalazo Jan 8, 2026
f604909
directives.py: reduce allocations (#51816)
haampie Jan 8, 2026
a15c326
spack change: allow modifications to concrete specs (#51540)
becker33 Jan 8, 2026
fdeec34
docs: specify dimensios images (#51811)
haampie Jan 9, 2026
0a4a0d9
Revert "ci: disable PerfPowerServices process on macos (#51647)" (#51…
haampie Jan 9, 2026
259d104
asp.py: small refactoring (#51823)
haampie Jan 9, 2026
594007f
new_installer.py: support forkserver (#51788)
haampie Jan 9, 2026
168d6b8
new installer: fix logging (#51787)
haampie Jan 9, 2026
6ac88a4
gha: use `pytest` in `clingo-cffi` job (#51826)
alalazo Jan 9, 2026
e92b79e
gha: dont run spack style with ancient black (#51828)
haampie Jan 9, 2026
56b1e1b
More type-hints to `spack.llnl.util.tty` (#51822)
alalazo Jan 9, 2026
f3d5ce3
solver: deterministic concretization with non-default variant values …
alalazo Jan 9, 2026
d567e1a
solver/core.py: refactor AspFunction (#51829)
haampie Jan 9, 2026
146791e
RewireTask.complete: bugfix use return value from _process_binary... …
becker33 Jan 9, 2026
edd2375
Merge branch 'develop' of https://github.com/spack/spack into HEAD
climbfuji Jan 9, 2026
0140881
Reenable unit tests for spack-stack-dev and release/* branches
climbfuji Jan 9, 2026
2bbe02f
Update REMOVE_SPACK_STACK_MODS_FOR_CI.sh: new location for config.yam…
climbfuji Jan 9, 2026
d339119
Turn off canonicalization test in .github/workflows/unit_tests.yaml
climbfuji Jan 9, 2026
459bb8a
WIP: fix unit tests in lib/spack/spack/test/modules/lmod.py
climbfuji Jan 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
44 changes: 44 additions & 0 deletions .ci/gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Gitlab configuraiton for spack/spack

stages:
- packages

variables:
SPACK_PACKAGES_CHECKOUT_VERSION: develop

.clone_packages: &clone_packages
- mkdir -p ${REPO_DESTINATION}
- cd ${REPO_DESTINATION}
- git init
- git remote add origin https://github.com/spack/spack-packages.git
- git fetch --depth 1 origin ${SPACK_PACKAGES_CHECKOUT_VERSION}
- git checkout FETCH_HEAD
- cd -

dotenv:
stage: .pre
image: ghcr.io/spack/e4s-ubuntu-18.04:v2021-10-18
tags: [ spack, service ]
script:
- export REPO_DESTINATION=etc/spack-packages
- *clone_packages
- repo_commit=$(git -C ${REPO_DESTINATION} rev-parse FETCH_HEAD)
- echo "SPACK_CHECKOUT_VERSION=${repo_commit}" >> ${CI_PROJECT_DIR}/env
- echo "SPACK_CHECKOUT_REPO=spack/spack-packages" >> ${CI_PROJECT_DIR}/env
- cat ${CI_PROJECT_DIR}/env
- python3 ${CI_PROJECT_DIR}/.ci/gitlab/forward_dotenv_variables.py
${CI_PROJECT_DIR}/env
${REPO_DESTINATION}/.ci/gitlab/.gitlab-ci.yml

artifacts:
paths:
- etc/spack-packages/.ci/gitlab/.gitlab-ci.yml

spack-packages:
stage: packages
trigger:
strategy: depend
include:
- artifact: etc/spack-packages/.ci/gitlab/.gitlab-ci.yml
job: dotenv

36 changes: 36 additions & 0 deletions .ci/gitlab/forward_dotenv_variables.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import sys
from typing import Dict

import yaml


def read_dotenv(file_name: str) -> Dict[str, str]:
result = []
with open(file_name, "r", encoding="utf-8") as fd:
for field in fd:
if field.strip()[0] == "#":
continue

data = field.strip("\n").split("=", 1)
try:
result.append((data[0], data[1]))
except IndexError:
print(f"Skipping bad value: {field}")

return dict(result)


if __name__ == "__main__":
dotenv = read_dotenv(sys.argv[1])
if not dotenv:
exit(0)

with open(sys.argv[2], "r", encoding="utf-8") as fd:
conf = yaml.load(fd, Loader=yaml.Loader)

if "variables" not in conf:
conf["variables"] = {}
conf["variables"].update(dotenv)

with open(sys.argv[2], "w", encoding="utf-8") as fd:
yaml.dump(conf, fd, Dumper=yaml.Dumper)
2 changes: 2 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
603569e321013a1a63a637813c94c2834d0a0023
# Formatted entire codebase with black 22
f52f6e99dbf1131886a80112b8c79dfc414afb7c
# Formatted all rst files
1377d42c16c6912faa77259c0a1f665210ccfd85
74 changes: 74 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
bootstrap:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/bootstrap/**

binary-caches:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/binary_distribution.py
- any-glob-to-any-file: lib/spack/spack/cmd/buildcache.py

ci:
- changed-files:
- any-glob-to-any-file: .ci/**
- any-glob-to-any-file: .github/**
- any-glob-to-any-file: lib/spack/spack/ci/**

commands:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/cmd/**

config:
- changed-files:
- any-glob-to-any-file: etc/spack/**
- any-glob-to-any-file: lib/spack/spack/cmd/config.py
- any-glob-to-any-file: lib/spack/spack/config.py
- any-glob-to-any-file: lib/spack/spack/schema/**

docs:
- changed-files:
- any-glob-to-any-file: .readthedocs.yml
- any-glob-to-any-file: lib/spack/docs/**

environments:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/cmd/env.py
- any-glob-to-any-file: lib/spack/spack/environment/**

mirrors:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/cmd/mirror.py
- any-glob-to-any-file: lib/spack/spack/mirrors/**

modules:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/cmd/module.py
- any-glob-to-any-file: lib/spack/spack/modules/**

solver:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/solver/**

style:
- changed-files:
- any-glob-to-any-file: .flake8
- any-glob-to-any-file: .github/workflows/prechecks.yml
- any-glob-to-any-file: .github/workflows/requirements/style/**
- any-glob-to-any-file: lib/spack/spack/cmd/style.py
- any-glob-to-any-file: pyproject.toml

unit-tests:
- changed-files:
- any-glob-to-any-file: .codecov.yml
- any-glob-to-any-file: lib/spack/spack/cmd/unit_test.py
- any-glob-to-any-file: lib/spack/spack/test/**
- any-glob-to-any-file: pyproject.toml
- any-glob-to-any-file: pytest.ini
- any-glob-to-any-file: var/spack/test_repos/**

vendor:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/vendor/**

versions:
- changed-files:
- any-glob-to-any-file: lib/spack/spack/version/**
8 changes: 0 additions & 8 deletions .github/workflows/bin/bootstrap-test.sh

This file was deleted.

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)
Loading
Loading