Repository navigation
feat(stack): report site recipes that shadow an EESSI module - #13
Merged
Merged
Conversation
A site-layer recipe whose name is already in the base module inventory hides that module when the site path is searched first. The `stack shadow` command loads the inventory with the same reader `stack gap` uses and exits 1 when a recipe matches the software version, another version, or a bare name.
The `stack shard` command has a CLI entry and no how-to. The page runs the fixture wave and quotes the prelude and the three shard files. It also says which modules are shared.
The `stack batch` command was described from the other stack pages and had no how-to of its own. The page runs the GROMACS fixture and quotes the second-version warning the batch records.
The `stack sections` command had a reference section and no how-to. The page runs the recorded previous and next lists and quotes the regrouped file.
The `stack easystack` command was in the command reference and the format page, and had no how-to. The page writes the baseline lock and shows the option spelling.
Those three commands have been in the CLI reference since they were added and had no how-to. The page quotes the derived class names and the template values for zlib 1.3.1.
The `package latest` command had a reference section and no how-to. The page runs the directory-backend fixture, whose listing is empty, and describes the kept and dropped lines a real backend prints.
The `repro summary` command had a reference section and a mention in the fidelity page, and no how-to. The page writes two case scores and quotes the table and the ratchet line.
The shadow check had a CLI section and no how-to. The page runs the fixture layer and quotes the same, different, and unversioned lines. It also shows a site-only recipe that exits 0.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reproducer
Before this change, the subcommand does not exist.
Clap rejects it before any path is read:
Exit status 2.
After, from the repository root:
Exit status 1.
The fourth fixture recipe is site-only: the base inventory does not name it, so the report leaves it out.
The
defaultfile under the zlib module directory is not read as a version.What and why
A site module path searched before the European Environment for Scientific Software Installations (EESSI) path hides any base module with the same name.
The site layer should hold only software the base stack does not install.
stack shadowreads the site easyconfigs and loads--basewithgap::inventory_from_module_source, the readerstack gapuses for--installed.A
--basedirectory is an Lmod tree.A
--basefile ismodule -t avail,module spider -t, orName/version.Every recipe whose name the base also lists gets one of these kinds:
samedifferentunversionedNames match without regard to case.
EasyBuild spells an installed module version as the software version, then
-, then the toolchain, then the versionsuffix.The comparison reuses that spelling through
build_order::installed_module_versionandMODULE_VERSION_TOOLCHAIN_SEPARATOR.A recipe versionsuffix has to end the base version, so a CUDA build does not match the plain build.
The command exits 1 when any recipe shadows a base module, and when a recipe does not parse.
--jsonprints the same report as one document.The Model Context Protocol (MCP) tool
eb_stack_shadowruns the same check.The branch also adds how-tos for commands that had a reference entry and no worked example:
stack shard: split a Jenkins build list into shards with a shared prelude.stack batch: plan software-layer pull requests whose builds do not overlap.stack sections: regroup a Jenkins build list under the section headers of a previous list.stack easystack: write a stack lock as the YAMLeb --easystackreads.recipe easyblock,recipe templates,recipe hierarchy: read what EasyBuild derives from a recipe.package latest: report the newest stable upstream release of a recipe.repro summary: read the reproduction scoreboard and hold it to a ratchet file.stack shadow: report a site recipe that shadows an EESSI module.Each how-to runs a fixture under
tests/and quotes its output.CHANGELOG.md,AGENTS.md, the CLI reference, the formats page, and bothllmsfiles list the new command.Not covered yet:
exts_listextension that EasyBuild installs as its own module.--allowflag exists for a second version the site builds beside the base on purpose.Tests
tests/stack_shadow.rsruns the binary and the MCP tool ontests/shadow_fixtures:--jsongives the same counts and exits 1--basepath appears in the error, and the run exits 1eb_stack_shadowreturns the same report as a tool errorUnit tests in
src/shadow.rscover the version spelling, a shorter version against a longer one, the versionsuffix rule, case folding across repeated--basepaths, and the text report.The CI test job now runs
--test stack_shadow.On every commit,
cargo fmt --all --check,cargo clippy --locked --all-targets -- -D warnings,cargo test --locked --all-targets, andpython3 scripts/gen-llms-txt.py --checkexited 0.The Sphinx build with
-W --keep-goingexited 0.Reproduce
Docs, with Org 9.7 or newer on
load-pathahead of the bundled Org:(cd docs && emacs -Q --batch --load export.el) bash scripts/gen-rust-api.sh EB_STACK_DOCS_PYTHON=/path/to/venv/bin/python bash scripts/sphinx-build-docs.shNote
Low Risk
Read-only validation and documentation; no build, auth, or data-mutation paths—behavior is localized to inventory comparison and reporting.
Overview
Adds
stack shadow(and MCPeb_stack_shadow) to flag site-layer easyconfigs whose module names overlap the EESSI base inventory loaded via the same--basereader asstack gap. Hits are classified assame,different, orunversioned; the command exits 1 when any shadow is found or a recipe fails to parse. Version matching reuses newinstalled_module_version/MODULE_VERSION_TOOLCHAIN_SEPARATORhelpers inbuild_order.Also ships eight new how-to guides (shard, batch, sections, easystack, recipe identity, package latest, repro summary, site-layer shadow), wires them into the doc index and
llms*.txt, updates the CLI/formats reference and changelog, and registers--test stack_shadowin CI.Reviewed by Cursor Bugbot for commit 57e5be8. Bugbot is set up for automated code reviews on this repo. Configure here.