Skip to content

Commit

Permalink
Enhancement: New condition_script_runner_args attribute #1081
Browse files Browse the repository at this point in the history
  • Loading branch information
sagiegurari committed May 17, 2024
1 parent 0ad1f1a commit 958f4dd
Show file tree
Hide file tree
Showing 9 changed files with 120 additions and 3 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
## CHANGELOG

### v0.37.13

* Enhancement: New condition_script_runner_args attribute #1081

### v0.37.12 (2024-05-04)

* Enhancement: support crates with invalid structure (fallback of cargo-metadata) #1076
Expand Down
7 changes: 5 additions & 2 deletions src/lib/condition.rs
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,7 @@ pub(crate) fn get_script_text(script: &ConditionScriptValue) -> Vec<String> {
fn validate_script(
condition_script: &Option<ConditionScriptValue>,
script_runner: Option<String>,
script_runner_args: Option<Vec<String>>,
) -> bool {
match condition_script {
Some(ref script) => {
Expand All @@ -451,7 +452,7 @@ fn validate_script(
return scriptengine::invoke_script_pre_flow(
&ScriptValue::Text(script_text),
script_runner,
None,
script_runner_args,
None,
false,
&vec![],
Expand All @@ -470,9 +471,10 @@ pub(crate) fn validate_conditions(
condition: &Option<TaskCondition>,
condition_script: &Option<ConditionScriptValue>,
script_runner: Option<String>,
script_runner_args: Option<Vec<String>>,
) -> bool {
validate_criteria(Some(&flow_info), &condition)
&& validate_script(&condition_script, script_runner)
&& validate_script(&condition_script, script_runner, script_runner_args)
}

pub(crate) fn validate_condition_for_step(flow_info: &FlowInfo, step: &Step) -> bool {
Expand All @@ -481,5 +483,6 @@ pub(crate) fn validate_condition_for_step(flow_info: &FlowInfo, step: &Step) ->
&step.config.condition,
&step.config.condition_script,
step.config.script_runner.clone(),
step.config.condition_script_runner_args.clone(),
)
}
6 changes: 5 additions & 1 deletion src/lib/condition_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -852,7 +852,7 @@ fn validate_env_contains_invalid_partial_found() {

#[test]
fn validate_script_empty() {
let enabled = validate_script(&None, None);
let enabled = validate_script(&None, None, None);

assert!(enabled);
}
Expand All @@ -862,6 +862,7 @@ fn validate_script_valid() {
let enabled = validate_script(
&Some(ConditionScriptValue::Text(vec!["exit 0".to_string()])),
None,
None,
);

assert!(enabled);
Expand All @@ -872,6 +873,7 @@ fn validate_script_invalid() {
let enabled = validate_script(
&Some(ConditionScriptValue::Text(vec!["exit 1".to_string()])),
None,
None,
);

assert!(!enabled);
Expand All @@ -884,6 +886,7 @@ fn validate_script_valid_with_duckscript_shebang() {
"#!@duckscript\nexit 0".to_string()
])),
None,
None,
);

assert!(enabled);
Expand All @@ -896,6 +899,7 @@ fn validate_script_invalid_with_duckscript_shebang() {
"#!@duckscript\nexit 1".to_string()
])),
None,
None,
);

assert!(!enabled);
Expand Down
4 changes: 4 additions & 0 deletions src/lib/execution_plan_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1230,6 +1230,7 @@ fn create_platform_disabled() {
watch: Some(TaskWatchOptions::Boolean(false)),
condition: None,
condition_script: None,
condition_script_runner_args: None,
install_crate: None,
install_crate_args: None,
command: None,
Expand Down Expand Up @@ -1258,6 +1259,7 @@ fn create_platform_disabled() {
watch: Some(TaskWatchOptions::Boolean(false)),
condition: None,
condition_script: None,
condition_script_runner_args: None,
install_crate: None,
install_crate_args: None,
command: None,
Expand Down Expand Up @@ -1286,6 +1288,7 @@ fn create_platform_disabled() {
watch: Some(TaskWatchOptions::Boolean(false)),
condition: None,
condition_script: None,
condition_script_runner_args: None,
install_crate: None,
install_crate_args: None,
command: None,
Expand Down Expand Up @@ -1524,6 +1527,7 @@ fn get_normalized_task_multi_extend() {
watch: None,
condition: None,
condition_script: None,
condition_script_runner_args: None,
install_crate: None,
install_crate_args: None,
command: None,
Expand Down
1 change: 1 addition & 0 deletions src/lib/plugin/runner_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -473,6 +473,7 @@ fn run_task_invoked_valid() {
files_modified: None,
}),
condition_script: Some(ConditionScriptValue::Text(vec!["exit 0".to_string()])),
condition_script_runner_args: None,
ignore_errors: Some(true),
force: Some(true),
env_files: Some(vec![EnvFile::Path("extended".to_string())]),
Expand Down
1 change: 1 addition & 0 deletions src/lib/runner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ pub(crate) fn get_sub_task_info_for_routing_info(
&routing_step.condition,
&routing_step.condition_script,
None,
routing_step.condition_script_runner_args.clone(),
);

if invoke {
Expand Down
19 changes: 19 additions & 0 deletions src/lib/runner_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1571,6 +1571,7 @@ fn run_sub_task_and_report_routing_no_condition() {
cleanup_task: None,
condition: None,
condition_script: None,
condition_script_runner_args: None,
}]);

let output = run_sub_task_and_report(
Expand Down Expand Up @@ -1639,6 +1640,7 @@ fn run_sub_task_and_report_routing_condition_not_met() {
files_modified: None,
}),
condition_script: None,
condition_script_runner_args: None,
}]);

let output = run_sub_task_and_report(
Expand Down Expand Up @@ -1692,6 +1694,7 @@ fn run_sub_task_and_report_routing_not_found() {
cleanup_task: None,
condition: None,
condition_script: None,
condition_script_runner_args: None,
}]);

run_sub_task_and_report(
Expand Down Expand Up @@ -1838,6 +1841,7 @@ fn get_sub_task_info_for_routing_info_condition_not_met() {
files_modified: None,
}),
condition_script: None,
condition_script_runner_args: None,
}],
);

Expand Down Expand Up @@ -1899,6 +1903,7 @@ fn get_sub_task_info_for_routing_info_condition_found() {
files_modified: None,
}),
condition_script: None,
condition_script_runner_args: None,
}],
);

Expand Down Expand Up @@ -1960,6 +1965,7 @@ fn get_sub_task_info_for_routing_info_condition_found_multiple_tasks() {
files_modified: None,
}),
condition_script: None,
condition_script_runner_args: None,
}],
);

Expand Down Expand Up @@ -2005,6 +2011,7 @@ fn get_sub_task_info_for_routing_info_script_not_met() {
cleanup_task: None,
condition: None,
condition_script: Some(ConditionScriptValue::Text(vec!["exit 1".to_string()])),
condition_script_runner_args: None,
}],
);

Expand Down Expand Up @@ -2050,6 +2057,7 @@ fn get_sub_task_info_for_routing_info_script_found() {
cleanup_task: None,
condition: None,
condition_script: Some(ConditionScriptValue::Text(vec!["exit 0".to_string()])),
condition_script_runner_args: None,
}],
);

Expand Down Expand Up @@ -2112,6 +2120,7 @@ fn get_sub_task_info_for_routing_info_multiple_found() {
files_modified: None,
}),
condition_script: None,
condition_script_runner_args: None,
},
RunTaskRoutingInfo {
name: RunTaskName::Single("test2".to_string()),
Expand All @@ -2120,6 +2129,7 @@ fn get_sub_task_info_for_routing_info_multiple_found() {
cleanup_task: None,
condition: None,
condition_script: Some(ConditionScriptValue::Text(vec!["exit 0".to_string()])),
condition_script_runner_args: None,
},
],
);
Expand Down Expand Up @@ -2183,6 +2193,7 @@ fn get_sub_task_info_for_routing_info_default() {
files_modified: None,
}),
condition_script: None,
condition_script_runner_args: None,
},
RunTaskRoutingInfo {
name: RunTaskName::Single("test2".to_string()),
Expand All @@ -2191,6 +2202,7 @@ fn get_sub_task_info_for_routing_info_default() {
cleanup_task: None,
condition: None,
condition_script: Some(ConditionScriptValue::Text(vec!["exit 1".to_string()])),
condition_script_runner_args: None,
},
RunTaskRoutingInfo {
name: RunTaskName::Single("default".to_string()),
Expand All @@ -2199,6 +2211,7 @@ fn get_sub_task_info_for_routing_info_default() {
cleanup_task: None,
condition: None,
condition_script: None,
condition_script_runner_args: None,
},
],
);
Expand Down Expand Up @@ -2262,6 +2275,7 @@ fn get_sub_task_info_for_routing_info_multiple() {
files_modified: None,
}),
condition_script: None,
condition_script_runner_args: None,
},
RunTaskRoutingInfo {
name: RunTaskName::Single("test2".to_string()),
Expand All @@ -2270,6 +2284,7 @@ fn get_sub_task_info_for_routing_info_multiple() {
cleanup_task: None,
condition: None,
condition_script: Some(ConditionScriptValue::Text(vec!["exit 1".to_string()])),
condition_script_runner_args: None,
},
RunTaskRoutingInfo {
name: RunTaskName::Single("test3".to_string()),
Expand All @@ -2278,6 +2293,7 @@ fn get_sub_task_info_for_routing_info_multiple() {
cleanup_task: None,
condition: None,
condition_script: Some(ConditionScriptValue::Text(vec!["exit 0".to_string()])),
condition_script_runner_args: None,
},
RunTaskRoutingInfo {
name: RunTaskName::Single("default".to_string()),
Expand All @@ -2286,6 +2302,7 @@ fn get_sub_task_info_for_routing_info_multiple() {
cleanup_task: None,
condition: None,
condition_script: None,
condition_script_runner_args: None,
},
],
);
Expand Down Expand Up @@ -2348,6 +2365,7 @@ fn get_sub_task_info_for_routing_info_fork_false() {
files_modified: None,
}),
condition_script: None,
condition_script_runner_args: None,
}],
);

Expand Down Expand Up @@ -2409,6 +2427,7 @@ fn get_sub_task_info_for_routing_info_fork_true() {
files_modified: None,
}),
condition_script: None,
condition_script_runner_args: None,
}],
);

Expand Down
21 changes: 21 additions & 0 deletions src/lib/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -870,6 +870,8 @@ pub struct RunTaskRoutingInfo {
pub condition: Option<TaskCondition>,
/// if script exit code is not 0, the task will not be invoked
pub condition_script: Option<ConditionScriptValue>,
/// The script runner arguments before the script file path
pub condition_script_runner_args: Option<Vec<String>>,
}

#[derive(Serialize, Deserialize, Debug, Clone)]
Expand Down Expand Up @@ -1107,6 +1109,8 @@ pub struct Task {
pub condition: Option<TaskCondition>,
/// if script exit code is not 0, the command/script of this task will not be invoked, dependencies however will be
pub condition_script: Option<ConditionScriptValue>,
/// The script runner arguments before the script file path
pub condition_script_runner_args: Option<Vec<String>>,
/// if true, any error while executing the task will be printed but will not break the build
pub ignore_errors: Option<bool>,
/// DEPRECATED, replaced with ignore_errors
Expand Down Expand Up @@ -1507,6 +1511,12 @@ impl Task {
self.condition_script = None;
}

if task.condition_script_runner_args.is_some() {
self.condition_script_runner_args = task.condition_script_runner_args.clone();
} else if override_values {
self.condition_script_runner_args = None;
}

if task.ignore_errors.is_some() {
self.ignore_errors = task.ignore_errors.clone();
} else if override_values {
Expand Down Expand Up @@ -1708,6 +1718,9 @@ impl Task {
watch: override_task.watch.clone(),
condition: override_task.condition.clone(),
condition_script: override_task.condition_script.clone(),
condition_script_runner_args: override_task
.condition_script_runner_args
.clone(),
ignore_errors: override_task.ignore_errors.clone(),
force: override_task.force.clone(),
env_files: override_task.env_files.clone(),
Expand Down Expand Up @@ -1867,6 +1880,8 @@ pub struct PlatformOverrideTask {
pub condition: Option<TaskCondition>,
/// if script exit code is not 0, the command/script of this task will not be invoked, dependencies however will be
pub condition_script: Option<ConditionScriptValue>,
/// The script runner arguments before the script file path
pub condition_script_runner_args: Option<Vec<String>>,
/// if true, any error while executing the task will be printed but will not break the build
pub ignore_errors: Option<bool>,
/// DEPRECATED, replaced with ignore_errors
Expand Down Expand Up @@ -1948,6 +1963,12 @@ impl PlatformOverrideTask {
self.condition_script = task.condition_script.clone();
}

if self.condition_script_runner_args.is_none()
&& task.condition_script_runner_args.is_some()
{
self.condition_script_runner_args = task.condition_script_runner_args.clone();
}

if self.ignore_errors.is_none() && task.ignore_errors.is_some() {
self.ignore_errors = task.ignore_errors.clone();
}
Expand Down
Loading

0 comments on commit 958f4dd

Please sign in to comment.