orchestrator_config/config/
trigger.rs1use serde::{Deserialize, Serialize};
2use std::collections::HashMap;
3
4use crate::cli_types::ConcurrencyPolicy;
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
8pub struct TriggerConfig {
9 #[serde(default, skip_serializing_if = "Option::is_none")]
11 pub cron: Option<TriggerCronConfig>,
12
13 #[serde(default, skip_serializing_if = "Option::is_none")]
15 pub event: Option<TriggerEventConfig>,
16
17 pub action: TriggerActionConfig,
19
20 #[serde(default)]
22 pub concurrency_policy: ConcurrencyPolicy,
23
24 #[serde(default)]
26 pub suspend: bool,
27
28 #[serde(default, skip_serializing_if = "Option::is_none")]
30 pub history_limit: Option<TriggerHistoryLimitConfig>,
31
32 #[serde(default, skip_serializing_if = "Option::is_none")]
34 pub throttle: Option<TriggerThrottleConfig>,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
39pub struct TriggerCronConfig {
40 pub schedule: String,
42 #[serde(default, skip_serializing_if = "Option::is_none")]
44 pub timezone: Option<String>,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
49pub struct TriggerEventConfig {
50 pub source: String,
52 #[serde(default, skip_serializing_if = "Option::is_none")]
54 pub filter: Option<TriggerEventFilterConfig>,
55 #[serde(default, skip_serializing_if = "Option::is_none")]
57 pub webhook: Option<TriggerWebhookConfig>,
58 #[serde(default, skip_serializing_if = "Option::is_none")]
60 pub filesystem: Option<TriggerFilesystemConfig>,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
65pub struct TriggerFilesystemConfig {
66 pub paths: Vec<String>,
68 #[serde(default, skip_serializing_if = "Vec::is_empty")]
70 pub events: Vec<String>,
71 #[serde(default = "default_fs_debounce_ms")]
73 pub debounce_ms: u64,
74}
75
76fn default_fs_debounce_ms() -> u64 {
77 500
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
82pub struct TriggerWebhookConfig {
83 #[serde(default, skip_serializing_if = "Option::is_none")]
86 pub secret: Option<TriggerSecretRef>,
87 #[serde(default, skip_serializing_if = "Option::is_none")]
89 pub signature_header: Option<String>,
90 #[serde(default, skip_serializing_if = "Option::is_none")]
93 pub crd_ref: Option<String>,
94}
95
96#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
98pub struct TriggerSecretRef {
99 pub from_ref: String,
101}
102
103#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
105pub struct TriggerEventFilterConfig {
106 #[serde(default, skip_serializing_if = "Option::is_none")]
108 pub workflow: Option<String>,
109 #[serde(default, skip_serializing_if = "Option::is_none")]
111 pub condition: Option<String>,
112}
113
114#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
116pub struct TriggerActionConfig {
117 pub workflow: String,
119 pub workspace: String,
121 #[serde(default, skip_serializing_if = "Option::is_none")]
123 pub args: Option<HashMap<String, Vec<String>>>,
124 #[serde(default = "default_start")]
126 pub start: bool,
127}
128
129fn default_start() -> bool {
130 true
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
135pub struct TriggerHistoryLimitConfig {
136 #[serde(default, skip_serializing_if = "Option::is_none")]
138 pub successful: Option<u32>,
139 #[serde(default, skip_serializing_if = "Option::is_none")]
141 pub failed: Option<u32>,
142}
143
144#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
146pub struct TriggerThrottleConfig {
147 #[serde(default)]
149 pub min_interval: u64,
150}