summaryrefslogtreecommitdiff
path: root/src/cli.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/cli.rs')
-rw-r--r--src/cli.rs25
1 files changed, 24 insertions, 1 deletions
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)?);