mecha10-cli 0.7.0

Mecha10 CLI tool
Documentation
//! Cargo build helpers for `ProcessService`
//!
//! Used before spawning nodes to make sure the relevant binaries exist,
//! whether that's a single node or the whole workspace.

use super::ProcessService;
use anyhow::{Context, Result};
use std::process::Command;

impl ProcessService {
    /// Build a node binary if needed
    ///
    /// Helper method to build a specific node package
    ///
    /// # Arguments
    ///
    /// * `node_name` - Name of the node to build
    /// * `release` - Whether to build in release mode
    pub fn build_node(&self, node_name: &str, release: bool) -> Result<()> {
        let mut cmd = Command::new("cargo");
        cmd.arg("build");

        if release {
            cmd.arg("--release");
        }

        cmd.arg("--bin").arg(node_name);

        let output = cmd
            .output()
            .with_context(|| format!("Failed to build node: {}", node_name))?;

        if !output.status.success() {
            let stderr = String::from_utf8_lossy(&output.stderr);
            return Err(anyhow::anyhow!("Build failed for {}: {}", node_name, stderr));
        }

        Ok(())
    }

    /// Build all nodes in the workspace
    ///
    /// # Arguments
    ///
    /// * `release` - Whether to build in release mode
    pub fn build_all(&self, release: bool) -> Result<()> {
        let mut cmd = Command::new("cargo");
        cmd.arg("build");

        if release {
            cmd.arg("--release");
        }

        cmd.arg("--all");

        let output = cmd.output().context("Failed to build workspace")?;

        if !output.status.success() {
            let stderr = String::from_utf8_lossy(&output.stderr);
            return Err(anyhow::anyhow!("Build failed: {}", stderr));
        }

        Ok(())
    }
}