diff --git a/linera-service/src/cli_wrappers/docker.rs b/linera-service/src/cli_wrappers/docker.rs index ff94557c2dff..15de912841d6 100644 --- a/linera-service/src/cli_wrappers/docker.rs +++ b/linera-service/src/cli_wrappers/docker.rs @@ -8,6 +8,8 @@ use linera_base::command::{current_binary_parent, CommandExt}; use pathdiff::diff_paths; use tokio::process::Command; +use crate::cli_wrappers::local_kubernetes_net::BuildMode; + pub struct DockerImage { name: String, } @@ -21,7 +23,7 @@ impl DockerImage { name: &str, binaries: &BuildArg, github_root: &PathBuf, - build_mode: &str, + build_mode: &BuildMode, ) -> Result { let build_arg = match binaries { BuildArg::Directory(bin_path) => { @@ -63,16 +65,13 @@ impl DockerImage { .args(["--build-arg", &build_arg]); match build_mode { - "release" => { + BuildMode::Release => { command.args(["--build-arg", "build_flag=--release"]); command.args(["--build-arg", "build_folder=release"]); } - "debug" => { + BuildMode::Debug => { command.args(["--build-arg", "build_folder=debug"]); } - _ => { - return Err(anyhow::anyhow!("Invalid build mode: {}", build_mode)); - } } #[cfg(not(with_testing))] diff --git a/linera-service/src/cli_wrappers/local_kubernetes_net.rs b/linera-service/src/cli_wrappers/local_kubernetes_net.rs index 0dd6313cd873..c2f15f1ca282 100644 --- a/linera-service/src/cli_wrappers/local_kubernetes_net.rs +++ b/linera-service/src/cli_wrappers/local_kubernetes_net.rs @@ -37,6 +37,27 @@ static SHARED_LOCAL_KUBERNETES_TESTING_NET: OnceCell<( ClientWrapper, )> = OnceCell::const_new(); +#[derive(Clone, clap::Parser, clap::ValueEnum, Debug, Default)] +pub enum BuildMode { + Debug, + #[default] + Release, +} + +impl std::str::FromStr for BuildMode { + type Err = String; + + fn from_str(s: &str) -> Result { + clap::ValueEnum::from_str(s, true) + } +} + +impl std::fmt::Display for BuildMode { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + write!(f, "{:?}", self) + } +} + /// The information needed to start a [`LocalKubernetesNet`]. pub struct LocalKubernetesNetConfig { pub network: Network, @@ -48,7 +69,7 @@ pub struct LocalKubernetesNetConfig { pub binaries: BuildArg, pub no_build: bool, pub docker_image_name: String, - pub build_mode: String, + pub build_mode: BuildMode, pub policy_config: ResourceControlPolicyConfig, } @@ -67,7 +88,7 @@ pub struct LocalKubernetesNet { binaries: BuildArg, no_build: bool, docker_image_name: String, - build_mode: String, + build_mode: BuildMode, kubectl_instance: Arc>, kind_clusters: Vec, num_initial_validators: usize, @@ -104,7 +125,7 @@ impl SharedLocalKubernetesNetTestingConfig { binaries, no_build: false, docker_image_name: String::from("linera:latest"), - build_mode: String::from("release"), + build_mode: BuildMode::Release, policy_config: ResourceControlPolicyConfig::Testnet, }) } @@ -312,7 +333,7 @@ impl LocalKubernetesNet { binaries: BuildArg, no_build: bool, docker_image_name: String, - build_mode: String, + build_mode: BuildMode, kubectl_instance: KubectlInstance, kind_clusters: Vec, num_initial_validators: usize, diff --git a/linera-service/src/linera/command.rs b/linera-service/src/linera/command.rs index cfbeb5dc980e..096faaee57f2 100644 --- a/linera-service/src/linera/command.rs +++ b/linera-service/src/linera/command.rs @@ -19,6 +19,8 @@ use linera_client::{ util, }; use linera_rpc::config::CrossChainConfig; +#[cfg(feature = "kubernetes")] +use linera_service::cli_wrappers::local_kubernetes_net::BuildMode; use linera_service::util::{ DEFAULT_PAUSE_AFTER_GQL_MUTATIONS_SECS, DEFAULT_PAUSE_AFTER_LINERA_SERVICE_SECS, }; @@ -921,7 +923,7 @@ pub enum NetCommand { /// The build mode to use. #[cfg(feature = "kubernetes")] #[arg(long, default_value = "release")] - build_mode: String, + build_mode: BuildMode, /// Run with a specific path where the wallet and validator input files are. /// If none, then a temporary directory is created. diff --git a/linera-service/src/linera/net_up_utils.rs b/linera-service/src/linera/net_up_utils.rs index 9c70514d352b..732e16998a7c 100644 --- a/linera-service/src/linera/net_up_utils.rs +++ b/linera-service/src/linera/net_up_utils.rs @@ -25,7 +25,7 @@ use tokio_util::sync::CancellationToken; use tracing::info; #[cfg(feature = "kubernetes")] use { - linera_service::cli_wrappers::local_kubernetes_net::LocalKubernetesNetConfig, + linera_service::cli_wrappers::local_kubernetes_net::{BuildMode, LocalKubernetesNetConfig}, std::path::PathBuf, }; @@ -115,7 +115,7 @@ pub async fn handle_net_up_kubernetes( binaries: &Option>, no_build: bool, docker_image_name: String, - build_mode: String, + build_mode: BuildMode, policy_config: ResourceControlPolicyConfig, with_faucet: bool, faucet_chain: Option,