diff --git a/src/lib.rs b/src/lib.rs index ad179bc..0daec43 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -46,10 +46,16 @@ pub struct Script { pub package_name: String, config: CommandConfig, pub dir: PathBuf, + package_manager: String, } impl Script { - pub fn new(config: CommandConfig, dir: &PathBuf, package_name: &str) -> Self { + pub fn new( + config: CommandConfig, + dir: &PathBuf, + package_name: &str, + package_manager: String, + ) -> Self { let name = config.command.clone(); let mut status = ScriptStatus::Ready; @@ -63,13 +69,14 @@ impl Script { dir: dir.into(), command: name.to_string(), status, + package_manager, } } pub fn execute(&mut self) -> Child { self.status = ScriptStatus::Running; - let mut command = Command::new("npm"); + let mut command = Command::new(self.package_manager.clone()); let mut child = command .current_dir(&self.dir) diff --git a/src/main.rs b/src/main.rs index 097eb9d..d203404 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ use hasty::{self, make_script_id, Engine, Script, TOPOLOGICAL_DEP_PREFIX}; #[tokio::main] async fn main() { let options = hasty::options::HastyOptions::parse(); + println!("Using package manager: {}", options.package_manager.clone()); if let Some(ref dir) = options.dir { println!("dir: {}", dir.display()); @@ -25,6 +26,7 @@ async fn main() { config.pipeline.get(&opts_script).unwrap().clone(), dir, "__ROOT__", + options.package_manager.clone(), ); engine.add_script(&script); @@ -49,7 +51,12 @@ async fn main() { continue; } - let s = Script::new(config.pipeline.get(&s).unwrap().clone(), dir, "__ROOT__"); + let s = Script::new( + config.pipeline.get(&s).unwrap().clone(), + dir, + "__ROOT__", + options.package_manager.clone(), + ); engine.add_script(&s); if s.has_dependencies() { diff --git a/src/options.rs b/src/options.rs index d1fc1e7..d894c2c 100644 --- a/src/options.rs +++ b/src/options.rs @@ -7,10 +7,18 @@ use serde::Deserialize; #[clap(author, version, about, long_about = None)] #[derive(Deserialize)] pub struct HastyOptions { - // The directory of the project + /// The directory of the project #[arg(short, long)] pub dir: Option, - // The script to execute + /// The script to execute pub script: Option, + + /// Package manager + /// + /// Valid options are "npm", "yarn", "pnpm" + /// + /// Default: "npm" + #[arg(short, long, default_value_t = String::from("npm"))] + pub package_manager: String, }