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 specific node package. `release` controls whether to build in release mode.
12    pub fn build_node(&self, node_name: &str, release: bool) -> Result<()> {
13        let mut cmd = Command::new("cargo");
14        cmd.arg("build");
15
16        if release {
17            cmd.arg("--release");
18        }
19
20        cmd.arg("--bin").arg(node_name);
21
22        let output = cmd
23            .output()
24            .with_context(|| format!("Failed to build node: {}", node_name))?;
25
26        if !output.status.success() {
27            let stderr = String::from_utf8_lossy(&output.stderr);
28            return Err(anyhow::anyhow!("Build failed for {}: {}", node_name, stderr));
29        }
30
31        Ok(())
32    }
33
34    /// Build all nodes in the workspace. `release` controls whether to build in release mode.
35    pub fn build_all(&self, release: bool) -> Result<()> {
36        let mut cmd = Command::new("cargo");
37        cmd.arg("build");
38
39        if release {
40            cmd.arg("--release");
41        }
42
43        cmd.arg("--all");
44
45        let output = cmd.output().context("Failed to build workspace")?;
46
47        if !output.status.success() {
48            let stderr = String::from_utf8_lossy(&output.stderr);
49            return Err(anyhow::anyhow!("Build failed: {}", stderr));
50        }
51
52        Ok(())
53    }
54}