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.
recipe → manifest + SBOM → profiles + Resolvo → .eb set → campaign evidence
eb-stack#
- Author:
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
Plan conda-forge eOn, inspect its lock/recipe, and drive a target campaign.
Generate canonical bump bundles, solve the stack, and repair typed findings.
Co-select a generation with resolvo; emit lock and build list.
Frozen real-recipe regressions, empirical claims, and limitations.
Manifest, planned SBOM, profile locks, residuals, and variant recipes.
Layered routing, container isolation, persisted findings, and repairs.
Getting Started
How-To Guides
Reference
Explanation
Project
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-stackrouteseb --robotthrough 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/dependenciesshape 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#
Tutorial: foreign recipe to verified EasyBuild package – start here.
How to run the annual toolchain-generation bump – operator guide for a whole rebuild (what it closes, the residual, the claim ladder, and the CI-known bumps).
Author a new package from conda-forge or Spack – canonical plan + profiles + Resolvo + campaign.
How-to guides: solve a stack lock, emit a build list and stack diff, bump a recipe, declare root priority.
Reference: CLI, package bundles, build targets, campaign state and findings, policy JSON schema, and whole-stack output formats.
Explanation: architecture, the optimization model, the parser approach, reproduction fidelity and limitations, from recipe to installed stack.
Project: contributing, changelog.
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.