1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3use serde_json::Value;
4use std::collections::HashMap;
5
6use super::StorageMount;
7
8#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
10pub struct CommonContainerSpec {
11 pub image: String,
13 pub registry_connection: Option<String>,
15 pub connections: Option<Vec<String>>,
17 pub command: Option<Vec<String>>,
19 pub args: Option<Vec<String>>,
21 pub env: Option<Vec<EnvVar>>,
23 pub cpu: Option<String>,
25 pub memory: Option<String>,
27 pub privileged: Option<bool>,
29 pub storage_mounts: Option<Vec<StorageMount>>,
31}
32
33#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
35pub struct K8sJobSpec {
36 pub image: String,
38 pub registry_connection: Option<String>,
40 pub connections: Option<Vec<String>>,
42 pub command: Option<Vec<String>>,
44 pub args: Option<Vec<String>>,
46 pub env: Option<Vec<EnvVar>>,
48 pub resources: Option<Resources>,
50 pub secret_mounts: Option<Vec<SecretMount>>,
52 pub config_map_mounts: Option<Vec<ConfigMapMount>>,
54 pub storage_mounts: Option<Vec<StorageMount>>,
56
57 pub active_deadline_seconds: Option<i64>,
59 pub backoff_limit: Option<i32>,
61 pub completions: Option<i32>,
63 pub parallelism: Option<i32>,
65 pub ttl_seconds_after_finished: Option<i32>,
67 pub privileged: Option<bool>,
69 pub minimum_version: Option<String>,
71 pub node_selector: Option<HashMap<String, String>>,
73 pub service_account_name: Option<String>,
75 pub restart_policy: Option<String>, pub labels: Option<HashMap<String, String>>,
79 pub annotations: Option<HashMap<String, String>>,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
85pub struct EnvVar {
86 pub name: String,
88 pub value: String,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
94pub struct Resources {
95 pub requests: Option<ResourceRequirements>,
97 pub limits: Option<ResourceRequirements>,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
103pub struct ResourceRequirements {
104 pub cpu: Option<String>,
106 pub memory: Option<String>,
108}
109
110#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
112pub struct SecretMount {
113 pub name: String,
115 pub mount_path: String,
117}
118
119#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
121pub struct ConfigMapMount {
122 pub name: String,
124 pub mount_path: String,
126}
127
128#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
130pub struct ApprovalSpec {
131 pub approvers: Option<Vec<String>>,
133 pub inputs: Option<Value>,
135 pub notify: Option<EmailSpec>,
137 pub timeout: Option<String>,
139}
140
141#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
143pub struct WaitEventSpec {
144 pub correlation_key: String,
146 pub correlation_value: String,
148 pub timeout: Option<String>,
150}
151
152#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
154pub struct LambdaInvokeSpec {
155 pub function_name: String,
157 pub payload: Option<Value>,
159 pub invocation_type: Option<String>, pub qualifier: Option<String>, pub region: Option<String>,
165 pub assume_role_arn: Option<String>, pub role_session_name: Option<String>, }
170
171#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
173pub struct SqlExecuteSpec {
174 pub connection: String,
176 pub query: String,
178}
179
180#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
182pub struct GitCheckoutSpec {
183 pub connection: Option<String>,
185 pub repo: String,
187 pub r#ref: Option<String>,
189 pub depth: Option<u32>,
191 pub sparse_checkout: Option<Vec<String>>,
193 pub destination: Option<String>,
195 pub storage_mounts: Option<Vec<StorageMount>>,
197}
198
199#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
201pub struct WasmStepSpec {
202 pub module: String, pub function: String,
206 pub args: Option<Value>,
208}
209
210#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
212pub struct SlackMessageSpec {
213 pub connection: String,
215 pub message: String, pub blocks: Option<Value>,
219}
220
221#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
223pub struct TeamsMessageSpec {
224 pub connection: String,
226 pub message: String, }
229
230#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
232pub struct WebhookInvokeSpec {
233 pub url: String,
235 pub method: Option<String>, pub headers: Option<HashMap<String, String>>,
239 pub body: Option<String>, pub timeout: Option<String>,
243}
244
245#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
247pub struct RestApiResponseExtractor {
248 pub name: String,
250 pub format: Option<String>,
252 pub json_pointer: Option<String>,
254 pub regex: Option<String>,
256 pub group: Option<u32>,
258 pub sensitive: Option<bool>,
260}
261
262#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
264pub struct RestApiSpec {
265 pub connection: Option<String>,
267 pub url: String,
269 pub method: Option<String>, pub headers: Option<HashMap<String, String>>,
273 pub body: Option<String>, pub timeout: Option<String>,
277 pub extractors: Option<Vec<RestApiResponseExtractor>>,
279}
280
281#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
283#[serde(rename_all = "snake_case")]
284pub enum EmailBackend {
285 Smtp,
287 Ses,
289}
290
291#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
293pub struct EmailSpec {
294 pub from: String,
296 pub to: Vec<String>,
298 pub cc: Option<Vec<String>>,
300 pub bcc: Option<Vec<String>>,
302 pub subject: String,
304 pub body: String, pub html: Option<bool>,
308 pub backend: Option<EmailBackend>, pub smtp_server: Option<String>,
312 pub smtp_port: Option<u16>,
314 pub smtp_username: Option<String>,
316 pub smtp_password: Option<String>,
318 pub smtp_use_tls: Option<bool>,
320 pub smtp_use_mtls: Option<bool>,
322 pub ses_region: Option<String>,
324 pub ses_role_arn: Option<String>,
326 pub ses_configuration_set_name: Option<String>,
328}
329
330#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
332pub struct JinjaRenderSpec {
333 pub template: String,
335 pub context: Option<Value>,
337 pub output_key: Option<String>, }
340
341#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
343pub struct TestReportEmailSpec {
344 pub from: String,
346 pub to: Vec<String>,
348 pub subject: String,
350 pub template: Option<String>, pub report_name: Option<String>, pub backend: Option<EmailBackend>, pub smtp_server: Option<String>,
358 pub smtp_port: Option<u16>,
360 pub smtp_username: Option<String>,
362 pub smtp_password: Option<String>,
364 pub smtp_use_tls: Option<bool>,
366 pub smtp_use_mtls: Option<bool>,
368 pub ses_region: Option<String>,
370 pub ses_role_arn: Option<String>,
372 pub ses_configuration_set_name: Option<String>,
374}
375
376#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
378pub struct JqSpec {
379 pub program: String,
381 pub input: Option<Value>,
383 pub input_file: Option<String>,
385 pub output_file: Option<String>,
387 pub storage_mounts: Option<Vec<StorageMount>>,
389}