From a73d7e29c0064e0a40ffcfb98f6b349ced5463b2 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Wed, 12 Aug 2026 04:45:25 +0000 Subject: Execute native image build stages --- src/cli.rs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'src/cli.rs') diff --git a/src/cli.rs b/src/cli.rs index 4445f20..30e1a46 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -3,7 +3,10 @@ use std::path::PathBuf; use anyhow::{bail, Result}; use clap::{Parser, Subcommand}; +use crate::build::BuildExecutor; use crate::compare::compare; +use crate::hasher::{HasherInstaller, ProcessRunner as HasherProcessRunner}; +use crate::initramfs::{MakeInitrdBuilder, ProcessRunner as InitramfsProcessRunner}; use crate::manifest::ArtifactManifest; use crate::{BuildPlan, ImageSpec}; @@ -57,7 +60,27 @@ pub fn run(cli: Cli) -> Result<()> { } Ok(()) } - Command::Build { .. } => bail!("build execution is not available yet"), + Command::Build { + spec, + workspace, + output, + } => { + let plan = BuildPlan::compile(ImageSpec::load(&spec)?)?; + let apt_config = spec + .parent() + .unwrap_or_else(|| std::path::Path::new(".")) + .join("apt.conf"); + let installer = HasherInstaller::new(HasherProcessRunner); + let initramfs = MakeInitrdBuilder::new(InitramfsProcessRunner); + let mut executor = BuildExecutor::new(installer, initramfs); + let result = executor.execute(&plan, workspace, apt_config, output)?; + println!("artifact: {}", result.artifact().display()); + println!("manifest: {}", result.manifest().display()); + if let Some(initrd) = result.initrd() { + println!("initrd: {} sha256:{}", initrd.initrd_path().display(), initrd.sha256()); + } + Ok(()) + } Command::Inspect { artifact } => { let manifest = load_artifact(&artifact)?; println!("{}", toml::to_string_pretty(&manifest)?); -- cgit v1.2.3