diff --git a/cli/src/build_project.rs b/cli/src/build_project.rs index f68ab4a..6681311 100644 --- a/cli/src/build_project.rs +++ b/cli/src/build_project.rs @@ -1,8 +1,10 @@ -use std::process::{Command, Stdio}; - +use crate::workspace::*; use crate::BuildArgs; +use std::process::{Command, Stdio}; pub fn build_project(_args: BuildArgs) -> anyhow::Result<()> { + verify_steel_workspace()?; + Command::new("cargo") .arg("build-sbf") .stdout(Stdio::inherit()) diff --git a/cli/src/main.rs b/cli/src/main.rs index 8c9d46b..199138d 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -6,6 +6,7 @@ mod new_project; mod program_keys; mod test_project; mod utils; +mod workspace; use args::*; use build_project::*; diff --git a/cli/src/test_project.rs b/cli/src/test_project.rs index b1a44de..d2f61ec 100644 --- a/cli/src/test_project.rs +++ b/cli/src/test_project.rs @@ -1,16 +1,18 @@ +use crate::workspace::*; use std::process::{Command, Stdio}; use crate::TestArgs; pub fn test_project(args: TestArgs) -> anyhow::Result<()> { + verify_steel_workspace()?; let mut command = Command::new("cargo"); - command.arg("test-sbf"); + command.arg("test-sbf"); - if args.nocapture { - command.arg("--").arg("--nocapture"); - } + if args.nocapture { + command.arg("--").arg("--nocapture"); + } - command + command .stdout(Stdio::inherit()) .stderr(Stdio::inherit()) .status() diff --git a/cli/src/workspace.rs b/cli/src/workspace.rs new file mode 100644 index 0000000..2405e02 --- /dev/null +++ b/cli/src/workspace.rs @@ -0,0 +1,23 @@ +// src/utils.rs or src/workspace.rs +use anyhow::{Context, Result}; +use std::fs; +use std::path::PathBuf; + +pub fn verify_steel_workspace() -> Result { + let current_dir = std::env::current_dir().context("Failed to get current directory")?; + + let cargo_toml_path = current_dir.join("Cargo.toml"); + + if !cargo_toml_path.exists() { + anyhow::bail!("Error: Not in a Steel workspace.\n\nNo Cargo.toml found. Run 'steel new ' to create a new Steel project."); + } + + let cargo_toml_content = + fs::read_to_string(&cargo_toml_path).context("Failed to read Cargo.toml")?; + + if !cargo_toml_content.contains("steel") { + anyhow::bail!("Error: Not in a Steel workspace.\n\n. Run 'steel new ' to create a new Steel project."); + } + + Ok(current_dir) +}