Format, lint, and check are three different questions¶
Questions
What does
recipe formatchange, and what does it leave untouched?When does
recipe lintfail, and when is a finding only a report?What does
recipe checklook up in the robot thatlintnever opens?
What you will be able to do
Run the three recipe commands in the order the tutorial uses, and say which one is allowed to rewrite the file.
Given an E501 line-length finding, say whether
formatwill close it.Read a
recipe checkfailure and say whether the next move is a robot overlay or a metadata edit.
Before this chapter
Inspect writes a work queue, not a recipe: a planned bundle with an emitted
.eb.Testing, and the four things it can mean: EasyBuild’s own style check is a different tool.
The tutorial’s next commands after a successful plan are not campaign run.
The following three commands, in this order, are:
RECIPE="$BUNDLE/easyconfigs/e/eOn/eOn-2.16.0-foss-2026.1.eb"
eb-stack recipe format "$RECIPE"
eb-stack recipe lint "$RECIPE"
eb-stack recipe check \
--recipe "$RECIPE" \
--easyconfigs "$ROBOT" \
--easyconfigs /tmp/eb-stack/overlay \
--easyconfigs "$BUNDLE/easyconfigs"
eb-stack ports a recipe and bumps one is named lint and check and skips format.
The three are not aliases.
Format rewrites physical lines¶
The recipe format executes deterministic physical-line wrapping.
This constitutes the entire contract.
Product configuration, source selection, checksums, patches, and sanity paths remain as authored.
eb-stack recipe format RECIPE.eb
eb-stack recipe format RECIPE.eb --dry-run
eb-stack recipe format RECIPE.eb --out FORMATTED.eb
When --out is omitted, the file is rewritten in place.
--dry-run prints the wrapping and leaves the file unchanged.
E501 in EasyBuild style is the line‑length warning that this command is intended to resolve.
It is the mechanical residual of Inspect writes a work queue, not a recipe, where the residual is “the emitter wrapped a list past the column”.
It is not eb --check-style.
It is not an opinion about configopts.
A format run that changes a checksum or a patch order constitutes a bug in the formatter, not a feature.
Lint reports; it does not repair¶
The recipe lint command traverses the same E501 surface and outputs findings.
It does not modify files.
Multiple files can be supplied in a single invocation.
A clean lint result does not serve as a packaging gate.
The report indicates whether format has any remaining actions or none.
Check is the robot question¶
The recipe check opens other files.
eb-stack recipe check \
--recipe RECIPE.eb \
--easyconfigs UPSTREAM \
[--easyconfigs OVERLAY]... \
[--require-configopt FLAG]... \
[--metadata-only]
Failure occurs when package metadata, checksum structure, required configuration flags, or robot dependencies are invalid.
Missing dependencies remain missing.
The command does not create placeholder recipes.
--metadata-only skips the robot walk when the file itself is the question.
The structured result lists each dependency and indicates whether a matching easyconfig exists in the overlay order.
Later --easyconfigs paths override earlier ones for the same name, version, toolchain, and versionsuffix, following the same rule used by stack solve.
A check failure reporting an absent dependency is not a format problem.
It indicates either a missing overlay (the eOn core-guard recipes reside in fixtures/eon_core_rgpot/easyconfigs/ for this reason) or a stack-policy pin that selected a candidate the robot does not possess.
The subsequent command is not recipe format.
The maintainer fixtures under fixtures/maintainer_*/ constitute the other half of the check: fat vs thin, a cross-generation pin, a shell-monster, a patchelf RPATH.
Those represent recipe check plus the maintainer-acceptability gate, not lint.
EB-Recipe-1 — Which command
Four observations. Name the command that addresses each one, and
say whether it rewrites the .eb.
A
dependencieslist wraps past column 120.The same list, after wrapping, still reports E501 in CI.
FFTWis pinned to a version the upstream robot tree does not carry for this generation.configoptsis missing a flag the site requires on every MPI package.
Solution
recipe format. It rewrites physical lines. That is the mechanical close.recipe lint. It does not rewrite. If it still reports E501 after format, the line is not a wrapping problem (a long URL with no break point, or a finding format does not own).recipe checkagainst the robot. It does not rewrite. The overlay or the stack policy is what changes, not the wrapping.recipe check --require-configopt FLAG. It does not rewrite. The flag is a check, not an edit.
What to remember
recipe formatrewrites physical lines and nothing else.recipe lintreports the same surface and does not write.recipe checkis the robot and metadata gate. A missing dependency stays a missing dependency.