From b4aab006c2bb290826cdba51168781cf0b0b333b Mon Sep 17 00:00:00 2001 From: Esteban Borai Date: Thu, 29 Sep 2022 18:45:59 -0300 Subject: [PATCH] feat: smdk build command --- crates/fluvio-cli/src/client/smdk/build.rs | 41 ++++++++++++++++++++++ crates/fluvio-cli/src/client/smdk/mod.rs | 6 ++++ 2 files changed, 47 insertions(+) create mode 100644 crates/fluvio-cli/src/client/smdk/build.rs diff --git a/crates/fluvio-cli/src/client/smdk/build.rs b/crates/fluvio-cli/src/client/smdk/build.rs new file mode 100644 index 00000000000..1cbfaf4cadb --- /dev/null +++ b/crates/fluvio-cli/src/client/smdk/build.rs @@ -0,0 +1,41 @@ +use std::fmt::Debug; +use std::process::Command; +use std::sync::Arc; + +use async_trait::async_trait; +use fluvio_extension_common::Terminal; +use clap::Parser; +use fluvio::Fluvio; + +use crate::Result; +use crate::client::cmd::ClientCmd; + +/// Builds the SmartModule in the current working directory into a WASM file +#[derive(Debug, Parser)] +pub struct BuildSmartModuleOpt; + +#[async_trait] +impl ClientCmd for BuildSmartModuleOpt { + async fn process_client( + self, + _out: Arc, + _fluvio: &Fluvio, + ) -> Result<()> { + let mut cmd = Command::new("cargo"); + let cwd = std::env::current_dir()?; + + cmd.current_dir(cwd) + .arg("build") + .arg("--release") + .arg("--lib"); + cmd.arg("--target").arg("wasm32-unknown-unknown"); + + let status = cmd.status()?; + + if status.success() { + return Ok(()); + } + + panic!("An error ocurred running \"cargo run\"!"); + } +} diff --git a/crates/fluvio-cli/src/client/smdk/mod.rs b/crates/fluvio-cli/src/client/smdk/mod.rs index 4fb71da3745..5d42a7eb8ea 100644 --- a/crates/fluvio-cli/src/client/smdk/mod.rs +++ b/crates/fluvio-cli/src/client/smdk/mod.rs @@ -1,3 +1,4 @@ +mod build; mod new; pub use cmd::SmdkCmd; @@ -16,10 +17,12 @@ mod cmd { use crate::client::cmd::ClientCmd; use crate::common::output::Terminal; + use super::build::BuildSmartModuleOpt; use super::new::NewSmartModuleOpt; #[derive(Debug, Parser)] pub enum SmdkCmd { + Build(BuildSmartModuleOpt), New(NewSmartModuleOpt), } @@ -31,6 +34,9 @@ mod cmd { target: ClusterTarget, ) -> Result<()> { match self { + Self::Build(opt) => { + opt.process(out, target).await?; + } Self::New(opt) => { opt.process(out, target).await?; }