Skip to main content

rbnx/cmd/
validate.rs

1// SPDX-License-Identifier: MulanPSL-2.0
2// Validate command: check package manifest without building
3
4use 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}