Bump an existing EasyBuild recipe#

A bump is a canonical EasyBuild-origin package bundle. It emits a planned SBOM, a Resolvo lock, and a rewritten recipe; it does not use a separate text rewrite API.

Retarget the toolchain generation#

eb-stack package bump \
  --source tests/repro_fixtures/gromacs/GROMACS-2024.4-foss-2023b.eb \
  --toolchain-name foss \
  --toolchain-version 2024a \
  --easyconfigs tests/repro_fixtures/universe_foss_2024a \
  --out-dir /tmp/gromacs-2024a

The solver materializes the source recipe as a default profile, derives the target toolchain hierarchy from the robot tree, and asks Resolvo for a jointly feasible dependency selection. Existing robot artifacts keep independent build-tool scopes, matching EasyBuild’s installed-module model.

The output is:

/tmp/gromacs-2024a/
  package.plan.json
  package.sbom.cdx.json
  locks/default.lock.json
  easyconfigs/g/GROMACS/GROMACS-2024.4-foss-2024a.eb

Use site overlays and stack preferences#

Pass robot paths from general to specific:

eb-stack package bump \
  --source GROMACS-2024.4-foss-2023b.eb \
  --toolchain-name foss \
  --toolchain-version 2024a \
  --easyconfigs vendor/easybuild-easyconfigs/easybuild/easyconfigs \
  --easyconfigs site/easyconfigs \
  --stack-policy site/foss-2024a.toml \
  --out-dir /tmp/gromacs-2024a

Preferred distribution pins participate in the SAT solve and may fall back. Locked pins are exact constraints. Both outcomes are recorded in the profile lock, so a site preference never becomes an invisible post-solve edit.

An explicit override is also a locked solver input:

eb-stack package bump \
  --source App-1.0-foss-2023b.eb \
  --toolchain-name foss \
  --toolchain-version 2024a \
  --easyconfigs /path/to/robot \
  --dep Python=3.12.3 \
  --out-dir /tmp/app

Change the application version#

eb-stack package bump \
  --source App-1.0-foss-2023b.eb \
  --toolchain-name foss \
  --toolchain-version 2024a \
  --version 1.1 \
  --source-checksum SHA256 \
  --easyconfigs /path/to/robot \
  --out-dir /tmp/app-1.1

The emitter updates the package version, target toolchain, selected dependency versions, conventional filename, and source checksum entry. Patches remain explicit review work. Omitting the new checksum produces a residual and leaves the old digest visible; it never invents one.

Check and build#

RECIPE=/tmp/gromacs-2024a/easyconfigs/g/GROMACS/GROMACS-2024.4-foss-2024a.eb

eb-stack recipe format "$RECIPE"
eb-stack recipe lint "$RECIPE"
eb-stack recipe check \
  --recipe "$RECIPE" \
  --easyconfigs /path/to/robot \
  --easyconfigs /tmp/gromacs-2024a/easyconfigs

eb-stack campaign run \
  --bundle /tmp/gromacs-2024a \
  --config examples/targets/base.toml \
  --config ~/.config/eb-stack/site.toml \
  --target site-builder \
  --state /tmp/gromacs-2024a.campaign.json

package bump can establish resolves. Only the campaign’s EasyBuild run can establish builds, and only declared verification commands can establish binary-verified. Follow skills/annual-bump/SKILL.md for batch operation and repair handling.