44* Top-level usage
55
66#+begin_src text
7- eb-stack {solve|parse|check-recipe|solve-json|sbom|bump|mcp} [subcommand options]
7+ eb-stack {solve|parse|check-recipe|solve-json|sbom|bump|mcp|ingest } [subcommand options]
88#+end_src
99
1010Built on [[https://docs.rs/clap][clap]]'s derive API. Every subcommand accepts
@@ -22,6 +22,7 @@ Subcommands at a glance:
2222| ~sbom~ | CycloneDX from an existing lock |
2323| ~bump~ | Next-generation easyconfig rewrite (hierarchy-aware auto deps) |
2424| ~mcp~ | Stdio MCP server (~eb_check_recipe~ / ~eb_bump~ / ~eb_solve~) |
25+ | ~ingest~ | Foreign conda-forge / Spack recipe → EB scaffold |
2526
2627* solve
2728
@@ -300,3 +301,31 @@ errors, per the MCP tools/call contract. Library entry point:
300301|------+-------------------------------------------------------------------|
301302| 0 | Success |
302303| 1 | Error: parse failure, unsatisfiable policy, missing dep, packaging gate failure, missing file, or rewrite failure. The message names real package/version/field data, not internal solver identifiers. |
304+
305+ * ingest
306+
307+ Convert a foreign package recipe into a parseable EasyBuild scaffold.
308+
309+ #+begin_src text
310+ eb-stack ingest
311+ --source PATH
312+ [--format auto|conda-forge|spack]
313+ [--toolchain-name foss]
314+ [--toolchain-version 2024a]
315+ [--out PATH | --out-dir DIR]
316+ #+end_src
317+
318+ - ~--source~ :: ~meta.yaml~ / ~recipe.yaml~ (conda-forge) or ~package.py~
319+ (Spack). Required.
320+ - ~--format~ :: ~auto~ (default, from filename), ~conda-forge~, or ~spack~.
321+ - ~--toolchain-name~ / ~--toolchain-version~ :: scaffold toolchain identity
322+ (operator-supplied generation; not invented from the foreign recipe).
323+ - ~--out~ / ~--out-dir~ :: output path or letter/name layout directory.
324+
325+ The emit path is honest: name, version, source URL/filename, sha256 when
326+ present, and dependency *names* come from the foreign input. Easyblock,
327+ build steps, and EB generation-native dependency versions are residual
328+ (header warnings). Re-parse the result with ~check-recipe~ (robot completeness
329+ may still fail until companions and pins are filled).
330+
331+ Fixtures: ~fixtures/foreign_ingest/~.
0 commit comments