diff options
| author | Hermes Agent <hermes@localhost> | 2026-08-12 04:45:25 +0000 |
|---|---|---|
| committer | Hermes Agent <hermes@localhost> | 2026-08-12 04:45:25 +0000 |
| commit | a73d7e29c0064e0a40ffcfb98f6b349ced5463b2 (patch) | |
| tree | c3b1ae2456141945e0ebc1d892b1d3f4be4604a1 /src/cli.rs | |
| parent | bdab2223c98bb0b42e7f93f4e40f54f1ac16bb71 (diff) | |
Execute native image build stages
Diffstat (limited to 'src/cli.rs')
| -rw-r--r-- | src/cli.rs | 25 |
1 files changed, 24 insertions, 1 deletions
@@ -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)?); |