1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
4#[serde(rename_all = "camelCase")]
5pub struct PipelineCondition {
6 pub pull_request: Option<bool>,
7 #[serde(default)]
8 pub branch: Option<StringOrVec>,
9 #[serde(default)]
10 pub tag: Option<StringOrVec>,
11 pub default_branch: Option<bool>,
12 pub scheduled: Option<bool>,
13 pub manual: Option<bool>,
14}
15
16#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
17pub struct Pipeline {
18 pub name: String,
19 pub when: Option<PipelineCondition>,
20 pub tasks: Vec<String>,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
24pub struct CI {
25 pub pipelines: Vec<Pipeline>,
26}
27
28#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
29#[serde(untagged)]
30pub enum StringOrVec {
31 String(String),
32 Vec(Vec<String>),
33}