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