Skip to main content

mecha10_cli/services/process/
build.rs

1//! Cargo build helpers for `ProcessService`
2//!
3//! Used before spawning nodes to make sure the relevant binaries exist,
4//! whether that's a single node or the whole workspace.
5
6use super::ProcessService;
7use anyhow::{Context, Result};
8use std::process::Command;
9
10impl ProcessService {
11    /// Build a node binary if needed
12    ///
13    /// Helper method to build a specific node package
14    ///
15    /// # Arguments
16    ///
17    /// * `node_name` - Name of the node to build
18    /// * `release` - Whether to build in release mode
19    pub fn build_node(&self, node_name: &str, release: bool) -> Result<()> {
20        let mut cmd = Command::new("cargo");
21        cmd.arg("build");
22
23        if release {
24            cmd.arg("--release");
25        }
26
27        cmd.arg("--bin").arg(node_name);
28
29        let output = cmd
30            .output()
31            .with_context(|| format!("Failed to build node: {}", node_name))?;
32
33        if !output.status.success() {
34            let stderr = String::from_utf8_lossy(&output.stderr);
35            return Err(anyhow::anyhow!("Build failed for {}: {}", node_name, stderr));
36        }
37
38        Ok(())
39    }
40
41    /// Build all nodes in the workspace
42    ///
43    /// # Arguments
44    ///
45    /// * `release` - Whether to build in release mode
46    pub fn build_all(&self, release: bool) -> Result<()> {
47        let mut cmd = Command::new("cargo");
48        cmd.arg("build");
49
50        if release {
51            cmd.arg("--release");
52        }
53
54        cmd.arg("--all");
55
56        let output = cmd.output().context("Failed to build workspace")?;
57
58        if !output.status.success() {
59            let stderr = String::from_utf8_lossy(&output.stderr);
60            return Err(anyhow::anyhow!("Build failed: {}", stderr));
61        }
62
63        Ok(())
64    }
65}