use std::path::{Path, PathBuf}; use std::process::exit; use colored::Colorize; pub fn workspace_dir() -> PathBuf { let output = std::process::Command::new(env!("CARGO")) .arg("locate-project") .arg("--workspace") .arg("--message-format=plain") .output() .unwrap() .stdout; let cargo_path = Path::new(std::str::from_utf8(&output).unwrap().trim()); cargo_path.parent().unwrap().to_path_buf() } pub fn cargo(cmd: String) { println!("{} cargo {}", "[cargo]".bold().cyan(), cmd); let mut output = std::process::Command::new(env!("CARGO")); for command in cmd.split(" ") { output.arg(command); } let output = output.spawn().unwrap().wait().unwrap(); if !output.success() { println!("{}", "============ TASK FAILED".bold().red()); exit(1); } }