cci 0.0.1

Control your CI/CD
Documentation
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GitLabCI {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub stages: Option<Vec<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub variables: Option<BTreeMap<String, String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub cache: Option<GitLabCache>,
    #[serde(flatten)]
    pub jobs: BTreeMap<String, GitLabJob>,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GitLabJob {
    pub stage: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub image: Option<String>,
    pub script: Vec<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub before_script: Option<Vec<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub after_script: Option<Vec<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub needs: Option<Vec<String>>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub cache: Option<GitLabCache>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub artifacts: Option<GitLabArtifacts>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub only: Option<GitLabOnly>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub timeout: Option<String>,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GitLabCache {
    pub key: String,
    pub paths: Vec<String>,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GitLabArtifacts {
    pub paths: Vec<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct GitLabOnly {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub refs: Option<Vec<String>>,
}