diff --git a/Cargo.lock b/Cargo.lock index 1f4d24f415150dedaf2cc0d155346309e5ad721c..f5aebb6f597728157c099197f23e6a5796861ee4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1162,6 +1162,7 @@ name = "maid" version = "1.1.0" dependencies = [ "anyhow", + "chrono", "clap", "clap-verbosity-flag", "colored", diff --git a/crates/maid/client/Cargo.toml b/crates/maid/client/Cargo.toml index 79bf6c5c61ea435eab18c889c938c39804568459..b120bfb4a22b4faabef18a218732fa848009a13f 100644 --- a/crates/maid/client/Cargo.toml +++ b/crates/maid/client/Cargo.toml @@ -42,3 +42,6 @@ clap-verbosity-flag = "2.1.0" notify-debouncer-mini = "0.4.1" human_bytes = { version = "0.4.3", default-features = false } tungstenite = { version = "0.20.1", features = ["native-tls"] } + +[build-dependencies] +chrono = "0.4.23" \ No newline at end of file diff --git a/crates/maid/client/build.rs b/crates/maid/client/build.rs new file mode 100644 index 0000000000000000000000000000000000000000..ed3cc8cd7de2cb4447d0dea8194d84e88dc83a77 --- /dev/null +++ b/crates/maid/client/build.rs @@ -0,0 +1,29 @@ +use chrono::Datelike; +use std::env; +use std::process::Command; + +struct Env {} +impl Env { + fn git() { + let output = Command::new("git").args(&["rev-parse", "--short=10", "HEAD"]).output().unwrap(); + println!("cargo:rustc-env=GIT_HASH={}", String::from_utf8(output.stdout).unwrap()); + + let output_full = Command::new("git").args(&["rev-parse", "HEAD"]).output().unwrap(); + println!("cargo:rustc-env=GIT_HASH_FULL={}", String::from_utf8(output_full.stdout).unwrap()); + } + + fn date() { + let date = chrono::Utc::now(); + println!("cargo:rustc-env=BUILD_DATE={}-{}-{}", date.year(), date.month(), date.day()); + } + + fn misc() { + println!("cargo:rustc-env=TARGET={}", env::var("TARGET").unwrap()); + } +} + +fn main() { + Env::git(); + Env::date(); + Env::misc(); +} diff --git a/crates/maid/client/src/cli/mod.rs b/crates/maid/client/src/cli/mod.rs index 65c949a1e2ed75a4a81771acb88f6af38d4adcbe..f6e6b606f19599219e8a6ced1191cab1e93bd013 100644 --- a/crates/maid/client/src/cli/mod.rs +++ b/crates/maid/client/src/cli/mod.rs @@ -11,6 +11,13 @@ use human_bytes::human_bytes; use macros_rs::{crashln, fmtstr, string, ternary}; use std::{env, path::Path, time::Instant}; +pub fn get_version(short: bool) -> String { + return match short { + true => format!("{} {}", env!("CARGO_PKG_NAME"), env!("CARGO_PKG_VERSION")), + false => format!("{} ({} {})", env!("CARGO_PKG_VERSION"), env!("GIT_HASH"), env!("BUILD_DATE")), + }; +} + pub fn info(path: &String) { let values = helpers::maidfile::merge(path); let project_root = parse::file::find_maidfile_root(path); diff --git a/crates/maid/client/src/main.rs b/crates/maid/client/src/main.rs index 55e33beff257fcf23243562adf681a46f5ff4b2c..3f4985adec7be8d8c82eee105a436db6d80a65db 100644 --- a/crates/maid/client/src/main.rs +++ b/crates/maid/client/src/main.rs @@ -10,10 +10,11 @@ mod task; use clap::{Parser, Subcommand}; use clap_verbosity_flag::Verbosity; +use macros_rs::str; use std::path::Path; #[derive(Parser)] -#[command(version)] +#[command(version = str!(cli::get_version(false)))] struct Cli { /// Run a task defined in maidfile #[arg(default_value = "", hide_default_value = true)]