Skip to main content

moon_task/
task_options.rs

1use moon_common::cacheable;
2use moon_config::{
3    Input, TaskMergeStrategy, TaskOperatingSystem, TaskOptionAffectedFilesPattern, TaskOptionCache,
4    TaskOptionRunInCI, TaskOutputStyle, TaskPriority, TaskUnixShell, TaskWindowsShell,
5};
6
7cacheable!(
8    #[derive(Clone, Debug, Default, Eq, PartialEq)]
9    #[serde(default)]
10    pub struct TaskOptionAffectedFiles {
11        pub pass: TaskOptionAffectedFilesPattern,
12        pub pass_inputs_when_no_match: bool,
13    }
14);
15
16cacheable!(
17    #[derive(Clone, Debug, Eq, PartialEq)]
18    #[serde(default)]
19    pub struct TaskOptions {
20        #[serde(skip_serializing_if = "Option::is_none")]
21        pub affected_files: Option<TaskOptionAffectedFiles>,
22
23        pub allow_failure: bool,
24
25        pub cache: TaskOptionCache,
26
27        #[serde(skip_serializing_if = "Option::is_none")]
28        pub cache_key: Option<String>,
29
30        #[serde(skip_serializing_if = "Option::is_none")]
31        pub cache_lifetime: Option<String>,
32
33        #[serde(skip_serializing_if = "Option::is_none")]
34        pub env_files: Option<Vec<Input>>,
35
36        pub infer_inputs: bool,
37
38        pub internal: bool,
39
40        pub interactive: bool,
41
42        pub merge_args: TaskMergeStrategy,
43
44        pub merge_deps: TaskMergeStrategy,
45
46        pub merge_env: TaskMergeStrategy,
47
48        pub merge_inputs: TaskMergeStrategy,
49
50        pub merge_outputs: TaskMergeStrategy,
51
52        pub merge_toolchains: TaskMergeStrategy,
53
54        #[serde(skip_serializing_if = "Option::is_none")]
55        pub mutex: Option<String>,
56
57        #[serde(skip_serializing_if = "Option::is_none")]
58        pub os: Option<Vec<TaskOperatingSystem>>,
59
60        #[serde(skip_serializing_if = "Option::is_none")]
61        pub output_style: Option<TaskOutputStyle>,
62
63        pub persistent: bool,
64
65        pub priority: TaskPriority,
66
67        pub retry_count: u8,
68
69        pub run_deps_in_parallel: bool,
70
71        #[serde(rename = "runInCI")]
72        pub run_in_ci: TaskOptionRunInCI,
73
74        pub run_from_workspace_root: bool,
75
76        #[serde(skip_serializing_if = "Option::is_none")]
77        pub shell: Option<bool>,
78
79        #[serde(skip_serializing_if = "Option::is_none")]
80        pub timeout: Option<u64>,
81
82        pub unix_shell: TaskUnixShell,
83
84        pub windows_shell: TaskWindowsShell,
85    }
86);
87
88impl Default for TaskOptions {
89    fn default() -> Self {
90        TaskOptions {
91            affected_files: None,
92            allow_failure: false,
93            cache: TaskOptionCache::Enabled(true),
94            cache_key: None,
95            cache_lifetime: None,
96            env_files: None,
97            infer_inputs: false,
98            internal: false,
99            interactive: false,
100            merge_args: TaskMergeStrategy::Append,
101            merge_deps: TaskMergeStrategy::Append,
102            merge_env: TaskMergeStrategy::Append,
103            merge_inputs: TaskMergeStrategy::Append,
104            merge_outputs: TaskMergeStrategy::Append,
105            merge_toolchains: TaskMergeStrategy::Append,
106            mutex: None,
107            os: None,
108            output_style: None,
109            persistent: false,
110            priority: TaskPriority::Normal,
111            retry_count: 0,
112            run_deps_in_parallel: true,
113            run_from_workspace_root: false,
114            run_in_ci: TaskOptionRunInCI::Enabled(true),
115            shell: Some(true),
116            timeout: None,
117            unix_shell: TaskUnixShell::Bash,
118            windows_shell: TaskWindowsShell::Pwsh,
119        }
120    }
121}