Skip to content

Commit

Permalink
feat: use new version api on smdk and fluvio cli (#3809)
Browse files Browse the repository at this point in the history
* feat: use new version api on smdk and fluvio cli

* fix: use `Vec` instead

* feat: use tuple vec

* feat: flatten!
  • Loading branch information
LeoBorai authored Jan 12, 2024
1 parent e87e3b2 commit 3120cea
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 55 deletions.
10 changes: 10 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ regex = "1.7"
semver = "1.0.13"
serde = { version = "1.0", default-features = false }
serde_json = "1.0.60"
serde-tuple-vec-map = "1.0.1"
serde_yaml = { version = "0.9.0", default-features = false }
sha2 = { version = "0.10" }
siphasher = "1.0.0"
Expand Down
3 changes: 2 additions & 1 deletion crates/fluvio-cli-common/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ default = ["fluvio-types"]
file-records = ["fluvio-protocol/record", "fluvio-protocol/api"]
version-cmd = ["dep:current_platform", "dep:clap", "dep:sysinfo"]
smartmodule-test = ["file-records", "dep:fluvio-sc-schema", "dep:fluvio-smartmodule", "dep:fluvio", "dep:fluvio-smartengine", "dep:clap"]
serde = ["dep:serde", "dep:serde_json"]
serde = ["dep:serde", "dep:serde_json", "dep:serde-tuple-vec-map"]

[dependencies]
anyhow = { workspace = true }
Expand All @@ -31,6 +31,7 @@ hex = { workspace = true }
http = { workspace = true }
serde = { workspace = true, optional = true }
serde_json = { workspace = true, optional = true }
serde-tuple-vec-map = { workspace = true, optional = true }
semver = { workspace = true }
sha2 = { workspace = true }
sysinfo = { workspace = true, optional = true }
Expand Down
9 changes: 4 additions & 5 deletions crates/fluvio-cli-common/src/version_cmd/mod.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
mod basic;

use std::fmt::Display;
use std::collections::HashMap;

pub use basic::BasicVersionCmd;

Expand Down Expand Up @@ -71,16 +70,16 @@ pub fn os_info() -> Option<String> {
pub struct FluvioVersionPrinter {
name: String,
version: String,
#[cfg_attr(feature = "serde", serde(flatten))]
extra: HashMap<String, String>,
#[cfg_attr(feature = "serde", serde(flatten, with = "tuple_vec_map"))]
extra: Vec<(String, String)>,
}

impl FluvioVersionPrinter {
pub fn new(name: &str, version: &str) -> Self {
Self {
name: name.to_string(),
version: version.to_string(),
extra: HashMap::new(),
extra: Vec::new(),
}
}

Expand All @@ -94,7 +93,7 @@ impl FluvioVersionPrinter {

pub fn append_extra(&mut self, key: impl AsRef<str>, value: impl AsRef<str>) {
self.extra
.insert(key.as_ref().to_string(), value.as_ref().to_string());
.push((key.as_ref().to_string(), value.as_ref().to_string()));
}

#[cfg(feature = "serde")]
Expand Down
2 changes: 1 addition & 1 deletion crates/fluvio-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ fluvio-package-index = { workspace = true }
fluvio-extension-common = { workspace = true, features = ["target", "installation"] }
fluvio-channel = { workspace = true }
fluvio-hub-util = { workspace = true, features = ["connector-cmds"] }
fluvio-cli-common = { workspace = true }
fluvio-cli-common = { workspace = true, features = ["serde", "version-cmd"] }
fluvio-smartengine = { workspace = true, features = ["transformation"]}
fluvio-protocol = { workspace = true, features=["record","api"] }
fluvio-smartmodule = { workspace = true }
Expand Down
76 changes: 29 additions & 47 deletions crates/fluvio-cli/src/version.rs
Original file line number Diff line number Diff line change
@@ -1,70 +1,67 @@
use sha2::{Digest, Sha256};
use clap::Parser;
use anyhow::Result;
use current_platform::CURRENT_PLATFORM;

use fluvio::Fluvio;
use fluvio::config::ConfigFile;
use fluvio_cli_common::version_cmd::{FluvioVersionPrinter, os_info};
use fluvio_extension_common::target::ClusterTarget;
use fluvio_channel::FLUVIO_RELEASE_CHANNEL;

use crate::metadata::subcommand_metadata;

#[derive(Debug, Parser)]
pub struct VersionOpt {}
pub struct VersionOpt {
#[clap(short, long)]
/// Output in JSON format
pub json: bool,
}

impl VersionOpt {
pub async fn process(self, target: ClusterTarget) -> Result<()> {
// IF FLUVIO_RELEASE_CHANNEL defined
let mut version_printer = FluvioVersionPrinter::new("Fluvio CLI", crate::VERSION.trim());

if let Ok(channel_name) = std::env::var(FLUVIO_RELEASE_CHANNEL) {
self.print("Release Channel", &channel_name);
version_printer.append_extra("Release Channel", channel_name);
};

self.print("Fluvio CLI", crate::VERSION.trim());
self.print("Fluvio CLI Arch", CURRENT_PLATFORM);

if let Some(sha) = self.format_cli_sha() {
self.print("Fluvio CLI SHA256", &sha);
}
if let Some(sha) = self.format_frontend_sha() {
self.print("Fluvio channel frontend SHA256", &sha);
version_printer.append_extra("Fluvio Channel Frontend SHA256", sha);
}

let platform = self.format_platform_version(target).await;
self.print("Fluvio Platform", &platform);
version_printer.append_extra("Fluvio Platform", platform);

self.print("Git Commit", env!("GIT_HASH"));
if let Some(os_info) = os_info() {
self.print("OS Details", &os_info);
version_printer.append_extra("Git Commit", env!("GIT_HASH"));

if let Some(info) = os_info() {
version_printer.append_extra("OS Details", info);
}

if self.json {
println!("{}", version_printer.to_json_pretty()?);
return Ok(());
}

println!("{}", version_printer);

if let Some(metadata) = self.format_subcommand_metadata() {
println!("=== Plugin Versions ===");
for (name, version) in metadata {
self.print_width(&name, &version, 30);
if !metadata.is_empty() {
println!("=== Plugin Versions ===");

for (name, version) in metadata {
self.print_width(&name, &version, 30);
}
}
}

Ok(())
}

fn print(&self, name: &str, version: &str) {
self.print_width(name, version, 20);
}

fn print_width(&self, name: &str, version: &str, width: usize) {
println!("{name:width$} : {version}");
}

/// Read CLI and compute its sha256
fn format_cli_sha(&self) -> Option<String> {
let path = std::env::current_exe().ok()?;
let fluvio_bin = std::fs::read(path).ok()?;
let mut hasher = Sha256::new();
hasher.update(fluvio_bin);
let fluvio_bin_sha256 = hasher.finalize();
Some(format!("{:x}", &fluvio_bin_sha256))
}

// Read fluvio frontend (fluvio-channel)
// (assuming it is named `fluvio` alongside a CLI named with its channel name (i.e. fluvio-stable))
fn format_frontend_sha(&self) -> Option<String> {
Expand Down Expand Up @@ -117,18 +114,3 @@ impl VersionOpt {
Some(formats)
}
}

/// Fetch OS information
fn os_info() -> Option<String> {
use sysinfo::SystemExt;
let sys = sysinfo::System::new_all();

let info = format!(
"{} {} (kernel {})",
sys.name()?,
sys.os_version()?,
sys.kernel_version()?,
);

Some(info)
}
2 changes: 1 addition & 1 deletion crates/smartmodule-development-kit/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,5 @@ fluvio-smartengine = { path = "../fluvio-smartengine", features = ["transformati
fluvio-extension-common = { path = "../fluvio-extension-common", features = ["target"] }
fluvio-controlplane-metadata = { path = "../fluvio-controlplane-metadata", features = ["smartmodule"] }
fluvio-sc-schema = { path = "../fluvio-sc-schema" }
fluvio-cli-common = { path = "../fluvio-cli-common", features = ["file-records", "version-cmd", "smartmodule-test"] }
fluvio-cli-common = { path = "../fluvio-cli-common", features = ["file-records", "version-cmd", "serde", "smartmodule-test"] }
cargo-builder = { path = "../cargo-builder"}

0 comments on commit 3120cea

Please sign in to comment.