1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4use std::collections::HashMap;
5
6use super::{Input, StorageMount};
7
8#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
10pub struct CommonContainerSpec {
11 pub image: String,
13 pub command: Option<Vec<String>>,
15 pub args: Option<Vec<String>>,
17 pub env: Option<Vec<EnvVar>>,
19 pub cpu: Option<String>,
21 pub memory: Option<String>,
23 pub privileged: Option<bool>,
25 pub storage_mounts: Option<Vec<StorageMount>>,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
31pub struct K8sJobSpec {
32 pub image: String,
34 pub command: Option<Vec<String>>,
36 pub args: Option<Vec<String>>,
38 pub env: Option<Vec<EnvVar>>,
40 pub resources: Option<Resources>,
42 pub secret_mounts: Option<Vec<SecretMount>>,
44 pub config_map_mounts: Option<Vec<ConfigMapMount>>,
46 pub storage_mounts: Option<Vec<StorageMount>>,
48
49 pub active_deadline_seconds: Option<i64>,
51 pub backoff_limit: Option<i32>,
53 pub completions: Option<i32>,
55 pub parallelism: Option<i32>,
57 pub ttl_seconds_after_finished: Option<i32>,
59 pub privileged: Option<bool>,
61 pub minimum_version: Option<String>,
63 pub node_selector: Option<HashMap<String, String>>,
65 pub service_account_name: Option<String>,
67 pub restart_policy: Option<String>, pub labels: Option<HashMap<String, String>>,
71 pub annotations: Option<HashMap<String, String>>,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
77pub struct EnvVar {
78 pub name: String,
80 pub value: String,
82}
83
84#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
86pub struct Resources {
87 pub requests: Option<ResourceRequirements>,
89 pub limits: Option<ResourceRequirements>,
91}
92
93#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
95pub struct ResourceRequirements {
96 pub cpu: Option<String>,
98 pub memory: Option<String>,
100}
101
102#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
104pub struct SecretMount {
105 pub name: String,
107 pub mount_path: String,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
113pub struct ConfigMapMount {
114 pub name: String,
116 pub mount_path: String,
118}
119
120#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
122pub struct ApprovalSpec {
123 pub approvers: Option<Vec<String>>,
125 pub inputs: Option<Vec<Input>>,
127 pub notify: Option<EmailSpec>,
129 pub timeout: Option<String>,
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
135pub struct WaitEventSpec {
136 pub correlation_key: String,
138 pub correlation_value: String,
140 pub timeout: Option<String>,
142}
143
144#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
146pub struct LambdaInvokeSpec {
147 pub function_name: String,
149 pub payload: Option<Value>,
151 pub invocation_type: Option<String>, pub qualifier: Option<String>, pub region: Option<String>,
157 pub assume_role_arn: Option<String>, pub role_session_name: Option<String>, }
162
163#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
165pub struct GitCheckoutSpec {
166 pub repo: String,
168 pub r#ref: Option<String>,
170 pub depth: Option<u32>,
172 pub sparse_checkout: Option<Vec<String>>,
174 pub destination: Option<String>,
176 pub storage_mounts: Option<Vec<StorageMount>>,
178}
179
180#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
182pub struct WasmStepSpec {
183 pub module: String, pub function: String,
187 pub args: Option<Value>,
189}
190
191#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
193pub struct WebhookInvokeSpec {
194 pub url: String,
196 pub method: Option<String>, pub headers: Option<HashMap<String, String>>,
200 pub body: Option<String>, pub timeout: Option<String>,
204}
205
206#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
208#[serde(rename_all = "snake_case")]
209pub enum EmailBackend {
210 Smtp,
212 Ses,
214}
215
216#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
218pub struct EmailSpec {
219 pub from: String,
221 pub to: Vec<String>,
223 pub cc: Option<Vec<String>>,
225 pub bcc: Option<Vec<String>>,
227 pub subject: String,
229 pub body: String, pub html: Option<bool>,
233 pub backend: Option<EmailBackend>, pub smtp_server: Option<String>,
237 pub smtp_port: Option<u16>,
239 pub smtp_username: Option<String>,
241 pub smtp_password: Option<String>,
243 pub smtp_use_tls: Option<bool>,
245 pub smtp_use_mtls: Option<bool>,
247 pub ses_region: Option<String>,
249 pub ses_role_arn: Option<String>,
251 pub ses_configuration_set_name: Option<String>,
253}
254
255#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
257pub struct JinjaRenderSpec {
258 pub template: String,
260 pub context: Option<Value>,
262 pub output_key: Option<String>, }
265
266#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
268pub struct TestReportEmailSpec {
269 pub from: String,
271 pub to: Vec<String>,
273 pub subject: String,
275 pub template: Option<String>, pub report_name: Option<String>, pub backend: Option<EmailBackend>, pub smtp_server: Option<String>,
283 pub smtp_port: Option<u16>,
285 pub smtp_username: Option<String>,
287 pub smtp_password: Option<String>,
289 pub smtp_use_tls: Option<bool>,
291 pub smtp_use_mtls: Option<bool>,
293 pub ses_region: Option<String>,
295 pub ses_role_arn: Option<String>,
297 pub ses_configuration_set_name: Option<String>,
299}
300
301#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
303pub struct JqSpec {
304 pub program: String,
306 pub input: Option<Value>,
308 pub input_file: Option<String>,
310 pub output_file: Option<String>,
312 pub storage_mounts: Option<Vec<StorageMount>>,
314}