diff --git a/project-fixtures/light/mantle.yml b/project-fixtures/light/mantle.yml index b81cd98..3aec7b1 100644 --- a/project-fixtures/light/mantle.yml +++ b/project-fixtures/light/mantle.yml @@ -1,9 +1,8 @@ environments: - name: staging branches: [dev, dev/*] - # targetNamePrefix: - # custom: 'Test - ' targetNamePrefix: environmentName + targetAccess: private target: experience: diff --git a/src/lib/config.rs b/src/lib/config.rs index d8f7909..b3ddc90 100644 --- a/src/lib/config.rs +++ b/src/lib/config.rs @@ -108,6 +108,8 @@ pub struct EnvironmentConfig { pub overrides: Option, pub target_name_prefix: Option, + + pub target_access: Option, } #[derive(Deserialize, Clone)] @@ -117,6 +119,14 @@ pub enum TargetNamePrefixConfig { Custom(String), } +#[derive(Deserialize, Clone)] +#[serde(rename_all = "camelCase")] +pub enum TargetAccessConfig { + Public, + Private, + Friends, +} + #[derive(Serialize, Deserialize, Clone)] #[serde(rename_all = "camelCase")] pub enum TargetConfig { @@ -274,7 +284,7 @@ pub enum AssetTargetConfig { FileWithAlias { file: String, name: String }, } -#[derive(Serialize, Deserialize, Clone)] +#[derive(Serialize, Deserialize, Clone, Default)] #[serde(rename_all = "camelCase")] pub struct ExperienceTargetConfigurationConfig { // basic info @@ -449,7 +459,7 @@ pub struct PlaceTargetConfig { pub configuration: Option, } -#[derive(Serialize, Deserialize, Clone)] +#[derive(Serialize, Deserialize, Clone, Default)] #[serde(rename_all = "camelCase")] pub struct PlaceTargetConfigurationConfig { pub name: Option, diff --git a/src/lib/project.rs b/src/lib/project.rs index d238a73..1eaa1fc 100644 --- a/src/lib/project.rs +++ b/src/lib/project.rs @@ -4,8 +4,9 @@ use yansi::Paint; use super::{ config::{ - Config, EnvironmentConfig, ExperienceTargetConfig, OwnerConfig, PaymentsConfig, - StateConfig, TargetConfig, TargetNamePrefixConfig, + Config, EnvironmentConfig, ExperienceTargetConfig, ExperienceTargetConfigurationConfig, + OwnerConfig, PaymentsConfig, PlaceTargetConfigurationConfig, PlayabilityTargetConfig, + StateConfig, TargetAccessConfig, TargetConfig, TargetNamePrefixConfig, }, logger, resource_graph::ResourceGraph, @@ -104,11 +105,33 @@ fn get_target_config( None => DEFAULT_PLACE_NAME.to_owned(), }; config.name = Some(format!("{}{}", name_prefix, name)); + } else { + place.configuration = Some(PlaceTargetConfigurationConfig { + name: Some(format!("{}{}", name_prefix, DEFAULT_PLACE_NAME)), + ..Default::default() + }) } } } } + // Apply the access to all places in the experience + if let Some(target_access) = environment.target_access { + let playability = Some(match target_access { + TargetAccessConfig::Public => PlayabilityTargetConfig::Public, + TargetAccessConfig::Private => PlayabilityTargetConfig::Private, + TargetAccessConfig::Friends => PlayabilityTargetConfig::Friends, + }); + if let Some(config) = &mut experience.configuration { + config.playability = playability + } else { + experience.configuration = Some(ExperienceTargetConfigurationConfig { + playability, + ..Default::default() + }); + } + } + // Apply overrides last (they are the final trump) if let Some(overrides) = environment.overrides { let mut as_value = serde_yaml::to_value(experience)