Skip to main content

anza_xtask/buildkite/
trigger_step.rs

1use {super::Build, serde::Serialize};
2
3#[derive(Debug, Serialize, PartialEq)]
4pub struct TriggerStep {
5    #[serde(skip_serializing_if = "String::is_empty")]
6    pub name: String,
7
8    #[serde(skip_serializing_if = "String::is_empty")]
9    pub trigger: String,
10
11    #[serde(skip_serializing_if = "Vec::is_empty")]
12    pub branches: Vec<String>,
13
14    #[serde(rename = "async", skip_serializing_if = "Option::is_none")]
15    pub is_async: Option<bool>,
16
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub soft_fail: Option<bool>,
19
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub build: Option<Build>,
22}
23
24#[cfg(test)]
25mod tests {
26    use {
27        super::*, crate::buildkite::test_utils::assert_serialized_json, std::collections::HashMap,
28    };
29
30    #[test]
31    fn test_trigger_step_serialize_json() {
32        assert_serialized_json(
33            &TriggerStep {
34                name: String::from("Trigger Build on agave-secondary"),
35                trigger: String::from("agave-secondary"),
36                branches: vec![String::from("!pull/*")],
37                is_async: Some(true),
38                soft_fail: Some(true),
39                build: Some(Build {
40                    message: Some(String::from("${BUILDKITE_MESSAGE}")),
41                    commit: Some(String::from("${BUILDKITE_COMMIT}")),
42                    branch: Some(String::from("${BUILDKITE_BRANCH}")),
43                    env: Some(HashMap::from([(
44                        String::from("TRIGGERED_BUILDKITE_TAG"),
45                        String::from("${BUILDKITE_TAG}"),
46                    )])),
47                }),
48            },
49            r#"{
50                "name": "Trigger Build on agave-secondary",
51                "trigger": "agave-secondary",
52                "branches": ["!pull/*"],
53                "async": true,
54                "soft_fail": true,
55                "build": {
56                    "branch": "${BUILDKITE_BRANCH}",
57                    "commit": "${BUILDKITE_COMMIT}",
58                    "message": "${BUILDKITE_MESSAGE}",
59                    "env": {"TRIGGERED_BUILDKITE_TAG": "${BUILDKITE_TAG}"}
60                }
61            }"#,
62        );
63
64        assert_serialized_json(
65            &TriggerStep {
66                name: String::from("Trigger Build on agave-secondary"),
67                trigger: String::from("agave-secondary"),
68                branches: vec![],
69                is_async: None,
70                soft_fail: None,
71                build: None,
72            },
73            r#"{
74                "name": "Trigger Build on agave-secondary",
75                "trigger": "agave-secondary"
76            }"#,
77        );
78    }
79}