From 6d0007f2533463b795a5d3b006a0c3991b9b6f47 Mon Sep 17 00:00:00 2001 From: Melvin Wang Date: Thu, 1 Aug 2024 12:29:32 -0700 Subject: [PATCH 1/4] add test for condition_script_runner_args expansion --- Cargo.lock | 1 + Cargo.toml | 1 + src/lib/runner_test.rs | 96 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 96 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3f64fc3c..ae0a2f66 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -178,6 +178,7 @@ dependencies = [ "shell2batch", "strip-ansi-escapes", "strum_macros", + "tempfile", "toml", ] diff --git a/Cargo.toml b/Cargo.toml index b05591fe..579b6e9e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -82,6 +82,7 @@ toml = "^0.8" [dev-dependencies] cfg-if = "^1.0.0" expect-test = "^1" +tempfile = "^3.10.1" [target.'cfg(windows)'.dependencies] nu-ansi-term = "^0.50" diff --git a/src/lib/runner_test.rs b/src/lib/runner_test.rs index ea7f303c..5c1eec50 100755 --- a/src/lib/runner_test.rs +++ b/src/lib/runner_test.rs @@ -1,14 +1,16 @@ use std::env::VarError; +use std::fs; use super::*; use crate::test; use crate::types::{ - ConditionScriptValue, ConfigSection, CrateInfo, EnvFile, RunTaskDetails, ScriptValue, - TaskCondition, + ConditionScriptValue, ConfigSection, CrateInfo, EnvFile, InstallCrate, InstallCrateInfo, + RunTaskDetails, ScriptValue, TaskCondition, TestArg, }; use cfg_if::cfg_if; use git_info::types::GitInfo; use rust_info::types::RustInfo; +use tempfile::tempdir; #[cfg(target_os = "linux")] use crate::types::WatchOptions; @@ -961,6 +963,96 @@ fn run_task_failed_condition_script_doesnt_change_env() { assert_eq!(std::env::var(NEW_ENV_VAR), Err(VarError::NotPresent)); } +#[test] +#[ignore] +fn run_task_rust_script_with_args_and_rust_condition_script_with_args() { + let dummy_path = "dummy/path"; + + // Create temporary directory to store outputs of condition script and script + let output_dir = tempdir().unwrap(); + let condition_script_output_file = output_dir.path().join("condition-script-output.txt"); + let script_output_file = output_dir.path().join("script-output.txt"); + + let flow_info = FlowInfo { + config: Config::default(), + task: "test".to_string(), + env_info: EnvInfo { + rust_info: RustInfo::new(), + crate_info: CrateInfo::new(), + git_info: GitInfo::new(), + ci_info: ci_info::get(), + }, + disable_workspace: false, + disable_on_error: false, + allow_private: false, + skip_init_end_tasks: false, + skip_tasks_pattern: None, + cli_arguments: None, + }; + + let step = Step { + name: "test".to_string(), + config: Task { + install_crate: Some(InstallCrate::CrateInfo(InstallCrateInfo { + crate_name: "rust-script".to_string(), + rustup_component_name: None, + binary: "rust-script".to_string(), + test_arg: TestArg { + inner: vec!["--version".to_string()], + }, + // rust-script 0.35.0 introduced a fix required for this test to work: https://github.com/fornwall/rust-script/issues/135 + min_version: Some("0.35.0".to_string()), + version: None, + install_command: None, + force: None, + })), + condition_script_runner_args: Some( + ["--base-path", &dummy_path] + .iter() + .map(ToString::to_string) + .collect(), + ), + condition_script: Some(ConditionScriptValue::SingleLine(format!( + r##"#!@rust +#![allow(unused_doc_comments)] + +let base_path = std::env::var("RUST_SCRIPT_BASE_PATH").expect("RUST_SCRIPT_BASE_PATH should always be set by rust-script"); +std::fs::write(r#"{}"#, base_path)? + "##, + condition_script_output_file.to_str().unwrap() + ))), + script_runner_args: Some( + ["--base-path", &dummy_path] + .iter() + .map(ToString::to_string) + .collect(), + ), + script: Some(ScriptValue::SingleLine(format!( + r##"#!@rust +#![allow(unused_doc_comments)] + +let base_path = std::env::var("RUST_SCRIPT_BASE_PATH").expect("RUST_SCRIPT_BASE_PATH should always be set by rust-script"); +std::fs::write(r#"{}"#, base_path)? + "##, + script_output_file.to_str().unwrap() + ))), + ..Default::default() + }, + }; + + run_task(&flow_info, Rc::new(RefCell::new(FlowState::new())), &step).unwrap(); + + // Check that condition_script_args are expanded + let condition_script_output = fs::read_to_string(&condition_script_output_file) + .expect("condition_script should have created this file"); + assert_eq!(condition_script_output, dummy_path); + + // Check that script_args are expanded + let script_output = + fs::read_to_string(&script_output_file).expect("script should have created this file"); + assert_eq!(script_output, dummy_path); +} + #[test] #[ignore] fn should_watch_none_and_env_not_set() { From afe6c334b52052ab30919c82c65e7ffd21b71d14 Mon Sep 17 00:00:00 2001 From: Melvin Wang Date: Sun, 15 Sep 2024 16:57:30 -0700 Subject: [PATCH 2/4] check return code when installing rust-script --- src/lib/scriptengine/rsscript.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/scriptengine/rsscript.rs b/src/lib/scriptengine/rsscript.rs index 25ff23eb..c6262e95 100755 --- a/src/lib/scriptengine/rsscript.rs +++ b/src/lib/scriptengine/rsscript.rs @@ -48,7 +48,7 @@ fn install_crate(provider: &ScriptRunner) -> Result<(), CargoMakeError> { force: None, }; - crate_installer::install(&None, &info, &None, false)?; + crate_installer::install(&None, &info, &None, true)?; } ScriptRunner::CargoScript => cargo_plugin_installer::install_crate( &None, From d205782005ad23cf73c4f89fb32e12c2ea8bd1d7 Mon Sep 17 00:00:00 2001 From: Melvin Wang Date: Sun, 15 Sep 2024 17:00:18 -0700 Subject: [PATCH 3/4] force locked for rust-script installation --- src/lib/scriptengine/rsscript.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/scriptengine/rsscript.rs b/src/lib/scriptengine/rsscript.rs index c6262e95..52c71fd7 100755 --- a/src/lib/scriptengine/rsscript.rs +++ b/src/lib/scriptengine/rsscript.rs @@ -48,7 +48,7 @@ fn install_crate(provider: &ScriptRunner) -> Result<(), CargoMakeError> { force: None, }; - crate_installer::install(&None, &info, &None, true)?; + crate_installer::install(&None, &info, &Some(vec!["--locked".to_string()]), true)?; } ScriptRunner::CargoScript => cargo_plugin_installer::install_crate( &None, From 5306844529b9a792d66b8f4ec6a4f9c3428f3a36 Mon Sep 17 00:00:00 2001 From: Melvin Wang Date: Sun, 15 Sep 2024 17:19:50 -0700 Subject: [PATCH 4/4] bump msrv to 1.74 due to rust-script bump --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 691726d0..8f74bfa9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,7 +15,7 @@ jobs: strategy: fail-fast: false matrix: - rust: [stable, beta, nightly, 1.73.0] + rust: [stable, beta, nightly, 1.74.0] os: [ubuntu-latest, windows-latest, macOS-latest] steps: - name: Checkout