eb-stack

package plan · Resolvo · EasyBuild campaign

Parse conda-forge, Spack, and EasyBuild into one canonical manifest and planned SBOM; solve product profiles with Resolvo; emit conventional recipes; build-evaluate them on a declarative target.

package plan package bump resolvo SAT planned SBOM typed campaigns

recipe → manifest + SBOM → profiles + Resolvo → .eb set → campaign evidence

eb-stack#

Author:

Rohit Goswami

Important

New here?Tutorial: foreign recipe to verified EasyBuild package

Whole annual rebuild?Run an annual toolchain-generation bump

New package from conda-forge/Spack?Author a new package from conda-forge or Spack

Existing recipe bump?Bump an existing EasyBuild recipe

CLI surface?Command-line reference

Bundle schemas?Package bundle reference

Build targets?Build target configuration

Campaign findings?Campaign state and typed findings

Tutorial — package to verified build

Plan conda-forge eOn, inspect its lock/recipe, and drive a target campaign.

Tutorial: foreign recipe to verified EasyBuild package
Annual rebuild (operator)

Generate canonical bump bundles, solve the stack, and repair typed findings.

Run an annual toolchain-generation bump
Solve a stack lock

Co-select a generation with resolvo; emit lock and build list.

Solve a consistent stack lock
Reproduction fidelity

Frozen real-recipe regressions, empirical claims, and limitations.

Reproduction fidelity and limitations
Package bundle contract

Manifest, planned SBOM, profile locks, residuals, and variant recipes.

Package bundle reference
Targets and campaigns

Layered routing, container isolation, persisted findings, and repairs.

Build target configuration

What it is#

eb-stack parses conda-forge, Spack, and EasyBuild recipes into one canonical package plan. It emits a planned CycloneDX SBOM, materializes independently installable profiles, applies distribution/site preferences inside Resolvo, writes one lock and conventional .eb file per profile, and drives the resulting bundle through a persisted target-routed build campaign. Existing-recipe bumps use the same manifest, SBOM, solver, and campaign artifacts as new packages.

What it is not#

  • Not an EasyBuild replacement. eb-stack routes eb --robot through a configured target; EasyBuild still implements all build and install steps.

  • Not a general-purpose Python dependency resolver. The domain model is EasyBuild’s name / version / toolchain / dependencies shape only.

  • Not a post-install compliance scanner. The emitted SBOM is a planned inventory. Binary verification is a separate campaign claim.

Install#

No public release is published. Build from source with Rust 1.88 or newer:

git clone https://github.com/HaoZeke/eb-stack.git
cd eb-stack
cargo test --locked
cargo build --locked --release
# binary: target/release/eb-stack
install -Dm755 target/release/eb-stack ~/.local/bin/eb-stack

Verify:

eb-stack --version

Documentation map#

Citation#

For unreleased source, cite the repository revision you used. The CITATION.cff file provides structured author and project metadata.

Rohit Goswami, eb-stack (source revision <commit>), https://github.com/HaoZeke/eb-stack

License#

MIT. See LICENSE in the repository.

Build these docs#

cd eb-stack
pixi run -e docs docbld
# HTML -> docs/build/index.html

Org sources live under docs/orgmode/; Emacs ox-rst publishes to docs/source/; Sphinx + Shibuya builds the site.