1use super::run_package::{find_package_from_cwd, resolve_local_path_for_filesystem};
5use anyhow::{Context, Result};
6use robonix_cli::manifest;
7use robonix_cli::output;
8use std::path::PathBuf;
9
10pub async fn execute(path: Option<PathBuf>) -> Result<()> {
11 let package_root = match path {
12 Some(p) => {
13 let p = resolve_local_path_for_filesystem(&p)?;
14 p.canonicalize()
15 .with_context(|| format!("Failed to canonicalize: {}", p.display()))?
16 }
17 None => find_package_from_cwd()?,
18 };
19
20 output::action(
21 "Validating",
22 &format!("package at {}", package_root.display()),
23 );
24 let detected = manifest::detect_and_load(&package_root)?;
25 let summary = detected.manifest.validate_and_summarize()?;
26
27 output::check(&format!("Manifest: {}", detected.path.display()));
28 output::check(&format!("Package: {} {}", summary.name, summary.version));
29
30 if !summary.capabilities.is_empty() {
31 output::sub_step(&format!(
32 "Capabilities: {}",
33 summary.capabilities.join(", ")
34 ));
35 }
36 if !summary.depends.is_empty() {
37 output::sub_step(&format!("Depends: {}", summary.depends.join(", ")));
38 }
39
40 output::success("Manifest validation passed");
41 Ok(())
42}