anza-xtask 0.2.0

Blockchain, Rebuilt for Scale
Documentation
use {super::Build, serde::Serialize};

#[derive(Debug, Serialize, PartialEq)]
pub struct TriggerStep {
    #[serde(skip_serializing_if = "String::is_empty")]
    pub name: String,

    #[serde(skip_serializing_if = "String::is_empty")]
    pub trigger: String,

    #[serde(skip_serializing_if = "Vec::is_empty")]
    pub branches: Vec<String>,

    #[serde(rename = "async", skip_serializing_if = "Option::is_none")]
    pub is_async: Option<bool>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub soft_fail: Option<bool>,

    #[serde(skip_serializing_if = "Option::is_none")]
    pub build: Option<Build>,
}

#[cfg(test)]
mod tests {
    use {
        super::*, crate::buildkite::test_utils::assert_serialized_json, std::collections::HashMap,
    };

    #[test]
    fn test_trigger_step_serialize_json() {
        assert_serialized_json(
            &TriggerStep {
                name: String::from("Trigger Build on agave-secondary"),
                trigger: String::from("agave-secondary"),
                branches: vec![String::from("!pull/*")],
                is_async: Some(true),
                soft_fail: Some(true),
                build: Some(Build {
                    message: Some(String::from("${BUILDKITE_MESSAGE}")),
                    commit: Some(String::from("${BUILDKITE_COMMIT}")),
                    branch: Some(String::from("${BUILDKITE_BRANCH}")),
                    env: Some(HashMap::from([(
                        String::from("TRIGGERED_BUILDKITE_TAG"),
                        String::from("${BUILDKITE_TAG}"),
                    )])),
                }),
            },
            r#"{
                "name": "Trigger Build on agave-secondary",
                "trigger": "agave-secondary",
                "branches": ["!pull/*"],
                "async": true,
                "soft_fail": true,
                "build": {
                    "branch": "${BUILDKITE_BRANCH}",
                    "commit": "${BUILDKITE_COMMIT}",
                    "message": "${BUILDKITE_MESSAGE}",
                    "env": {"TRIGGERED_BUILDKITE_TAG": "${BUILDKITE_TAG}"}
                }
            }"#,
        );

        assert_serialized_json(
            &TriggerStep {
                name: String::from("Trigger Build on agave-secondary"),
                trigger: String::from("agave-secondary"),
                branches: vec![],
                is_async: None,
                soft_fail: None,
                build: None,
            },
            r#"{
                "name": "Trigger Build on agave-secondary",
                "trigger": "agave-secondary"
            }"#,
        );
    }
}