feat: handle for cuddle_file
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use std::collections::BTreeMap;
|
||||
use std::{collections::BTreeMap, path::PathBuf};
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
@@ -6,6 +6,33 @@ use serde::{Deserialize, Serialize};
|
||||
pub struct CuddleFile {
|
||||
pub vars: CuddleVars,
|
||||
pub deployment: Option<CuddleDeployment>,
|
||||
pub components: Option<CuddleComponents>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
|
||||
pub struct CuddleComponents {
|
||||
pub database: Option<CuddleDatabase>,
|
||||
pub assets: Option<CuddleAssets>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
|
||||
pub struct CuddleAssets {
|
||||
pub volumes: Option<Vec<CuddleAssetInclude>>,
|
||||
pub clean: Option<bool>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
|
||||
pub struct CuddleAssetInclude {
|
||||
pub from: PathBuf,
|
||||
pub to: PathBuf,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
|
||||
#[serde(untagged)]
|
||||
pub enum CuddleDatabase {
|
||||
Enabled(bool),
|
||||
Default {},
|
||||
Values { migrations: PathBuf },
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
|
||||
@@ -54,13 +81,7 @@ impl CuddleFile {
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
use crate::cuddle_file::{
|
||||
CuddleCluster, CuddleClusters, CuddleDeploymentCluster, CuddleDeploymentEnv, CuddleVars,
|
||||
};
|
||||
|
||||
use super::CuddleFile;
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn parse_file() {
|
||||
@@ -82,6 +103,13 @@ deployment:
|
||||
prod:
|
||||
clusters:
|
||||
- clank_prod
|
||||
components:
|
||||
database: true
|
||||
|
||||
assets:
|
||||
volumes:
|
||||
- from: somewhere
|
||||
to: somewhere-else
|
||||
|
||||
scripts:
|
||||
render:
|
||||
@@ -119,11 +147,52 @@ scripts:
|
||||
clusters: Some(CuddleClusters(clusters)),
|
||||
},
|
||||
deployment: Some(crate::cuddle_file::CuddleDeployment {
|
||||
registry: "git@git.front.kjuulh.io:kjuulh/clank-cluster".into(),
|
||||
registry: "git@git.front.kjuulh.io:kjuulh/clank-clusters".into(),
|
||||
env: CuddleDeploymentEnv(deployment),
|
||||
}),
|
||||
components: Some(CuddleComponents {
|
||||
database: Some(CuddleDatabase::Enabled(true)),
|
||||
assets: Some(CuddleAssets {
|
||||
volumes: Some(vec![CuddleAssetInclude {
|
||||
from: "somewhere".into(),
|
||||
to: "somewhere-else".into(),
|
||||
}]),
|
||||
clean: None,
|
||||
}),
|
||||
}),
|
||||
};
|
||||
|
||||
assert_eq!(expected, res)
|
||||
pretty_assertions::assert_eq!(expected, res)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn cuddle_database_default() {
|
||||
let cuddle_file = r#"
|
||||
base: "git@git.front.kjuulh.io:kjuulh/cuddle-base.git"
|
||||
|
||||
vars:
|
||||
service: "infrastructure-example"
|
||||
registry: kasperhermansen
|
||||
|
||||
components:
|
||||
database: {}
|
||||
"#;
|
||||
|
||||
let res = CuddleFile::parse_cuddle_file(cuddle_file).expect("to parse file");
|
||||
|
||||
let expected = CuddleFile {
|
||||
vars: CuddleVars {
|
||||
service: "infrastructure-example".into(),
|
||||
registry: "kasperhermansen".into(),
|
||||
clusters: None,
|
||||
},
|
||||
deployment: None,
|
||||
components: Some(CuddleComponents {
|
||||
database: Some(CuddleDatabase::Default {}),
|
||||
assets: None,
|
||||
}),
|
||||
};
|
||||
|
||||
pretty_assertions::assert_eq!(expected, res)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user