summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorextrawurst <mail@rusticorn.com>2024-03-27 12:38:15 +0000
committerextrawurst <776816+extrawurst@users.noreply.github.com>2024-03-27 12:49:53 +0000
commit89e9f855cb55aa83559585ed0ce999276fe6817d (patch)
tree9075bdf15b721ea3a93a7eca5a78826832f0b58c
parent92e0face1e5d29d1d87e1a334efeb4c663cd0767 (diff)
encode nightly version, commit, date into binary
-rw-r--r--Cargo.lock30
-rw-r--r--Cargo.toml4
-rw-r--r--Makefile12
-rw-r--r--build.rs38
-rw-r--r--src/args.rs4
-rw-r--r--src/main.rs1
-rw-r--r--src/popups/help.rs6
-rw-r--r--src/version.rs35
8 files changed, 84 insertions, 46 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 22a04a8c..9d1a6530 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -305,6 +305,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
[[package]]
+name = "compile-time"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e55ede5279d4d7c528906853743abeb26353ae1e6c440fcd6d18316c2c2dd903"
+dependencies = [
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "semver",
+ "time",
+]
+
+[[package]]
name = "core-foundation-sys"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -733,6 +747,7 @@ dependencies = [
"bytesize",
"chrono",
"clap",
+ "compile-time",
"crossbeam-channel",
"crossterm",
"dirs",
@@ -1380,6 +1395,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
name = "rustix"
version = "0.38.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1427,6 +1451,12 @@ dependencies = [
]
[[package]]
+name = "semver"
+version = "1.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca"
+
+[[package]]
name = "serde"
version = "1.0.197"
source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/Cargo.toml b/Cargo.toml
index a759d57c..6751f187 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -12,6 +12,7 @@ readme = "README.md"
license = "MIT"
categories = ["command-line-utilities"]
keywords = ["git", "gui", "cli", "terminal", "ui"]
+build = "build.rs"
[dependencies]
anyhow = "1.0"
@@ -64,6 +65,9 @@ which = "6.0"
pretty_assertions = "1.4"
tempfile = "3"
+[build-dependencies]
+compile-time = "0.2"
+
[badges]
maintenance = { status = "actively-developed" }
diff --git a/Makefile b/Makefile
index 32498b52..9fbc87f5 100644
--- a/Makefile
+++ b/Makefile
@@ -16,7 +16,7 @@ debug:
RUST_BACKTRACE=true cargo run --features=timing -- ${ARGS}
build-release:
- cargo build --release --locked
+ GITUI_RELEASE=1 cargo build --release --locked
release-mac: build-release
strip target/release/gitui
@@ -42,7 +42,7 @@ build-linux-musl-debug:
cargo build --target=x86_64-unknown-linux-musl
build-linux-musl-release:
- cargo build --release --target=x86_64-unknown-linux-musl
+ GITUI_RELEASE=1 cargo build --release --target=x86_64-unknown-linux-musl
test-linux-musl:
cargo test --workspace --target=x86_64-unknown-linux-musl
@@ -64,9 +64,9 @@ build-linux-arm-debug:
cargo build --target=arm-unknown-linux-gnueabihf
build-linux-arm-release:
- cargo build --release --target=aarch64-unknown-linux-gnu
- cargo build --release --target=armv7-unknown-linux-gnueabihf
- cargo build --release --target=arm-unknown-linux-gnueabihf
+ GITUI_RELEASE=1 cargo build --release --target=aarch64-unknown-linux-gnu
+ GITUI_RELEASE=1 cargo build --release --target=armv7-unknown-linux-gnueabihf
+ GITUI_RELEASE=1 cargo build --release --target=arm-unknown-linux-gnueabihf
test:
cargo test --workspace
@@ -100,4 +100,4 @@ licenses:
cargo bundle-licenses --format toml --output THIRDPARTY.toml
clean:
- cargo clean \ No newline at end of file
+ cargo clean
diff --git a/build.rs b/build.rs
new file mode 100644
index 00000000..67ef0960
--- /dev/null
+++ b/build.rs
@@ -0,0 +1,38 @@
+fn get_git_hash() -> String {
+ use std::process::Command;
+
+ let commit = Command::new("git")
+ .arg("rev-parse")
+ .arg("--short")
+ .arg("--verify")
+ .arg("HEAD")
+ .output();
+ if let Ok(commit_output) = commit {
+ let commit_string =
+ String::from_utf8_lossy(&commit_output.stdout);
+
+ return commit_string.lines().next().unwrap_or("").into();
+ }
+
+ panic!("Can not get git commit: {}", commit.unwrap_err());
+}
+
+fn main() {
+ let build_name = if std::env::var("GITUI_RELEASE").is_ok() {
+ format!(
+ "{} {} ({})",
+ env!("CARGO_PKG_VERSION"),
+ compile_time::date_str!(),
+ get_git_hash()
+ )
+ } else {
+ format!(
+ "nightly {} ({})",
+ compile_time::date_str!(),
+ get_git_hash()
+ )
+ };
+
+ println!("cargo:warning=buildname '{}'", build_name);
+ println!("cargo:rustc-env=GITUI_BUILD_NAME={}", build_name);
+}
diff --git a/src/args.rs b/src/args.rs
index 2effe5fc..74654220 100644
--- a/src/args.rs
+++ b/src/args.rs
@@ -2,7 +2,7 @@ use crate::bug_report;
use anyhow::{anyhow, Result};
use asyncgit::sync::RepoPath;
use clap::{
- crate_authors, crate_description, crate_name, crate_version, Arg,
+ crate_authors, crate_description, crate_name, Arg,
Command as ClapApp,
};
use simplelog::{Config, LevelFilter, WriteLogger};
@@ -63,7 +63,7 @@ pub fn process_cmdline() -> Result<CliArgs> {
fn app() -> ClapApp {
ClapApp::new(crate_name!())
.author(crate_authors!())
- .version(crate_version!())
+ .version(env!("GITUI_BUILD_NAME"))
.about(crate_description!())
.help_template(
"\
diff --git a/src/main.rs b/src/main.rs
index 84a7a82e..26093811 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -43,7 +43,6 @@ mod string_utils;
mod strings;
mod tabs;
mod ui;
-mod version;
mod watcher;
use crate::{app::App, args::process_cmdline};
diff --git a/src/popups/help.rs b/src/popups/help.rs
index 9933d5c7..d472257a 100644
--- a/src/popups/help.rs
+++ b/src/popups/help.rs
@@ -6,7 +6,6 @@ use crate::{
app::Environment,
keys::{key_match, SharedKeyConfig},
strings, ui,
- version::Version,
};
use anyhow::Result;
use asyncgit::hash;
@@ -70,7 +69,10 @@ impl DrawableComponent for HelpPopup {
f.render_widget(
Paragraph::new(Line::from(vec![Span::styled(
- Cow::from(format!("gitui {}", Version::new(),)),
+ Cow::from(format!(
+ "gitui {}",
+ env!("GITUI_BUILD_NAME"),
+ )),
Style::default(),
)]))
.alignment(Alignment::Right),
diff --git a/src/version.rs b/src/version.rs
deleted file mode 100644
index 02af65c2..00000000
--- a/src/version.rs
+++ /dev/null
@@ -1,35 +0,0 @@
-use std::{env, fmt};
-
-/// version type
-#[derive(Default)]
-pub struct Version {
- major: u32,
- minor: u32,
- patch: u32,
-}
-
-impl Version {
- /// read version at compile time from env variables
- pub fn new() -> Self {
- let mut res = Self::default();
- let major_str = env!("CARGO_PKG_VERSION_MAJOR");
- if let Ok(major) = major_str.parse::<u32>() {
- res.major = major;
- }
- let minor_str = env!("CARGO_PKG_VERSION_MINOR");
- if let Ok(minor) = minor_str.parse::<u32>() {
- res.minor = minor;
- }
- let patch_str = env!("CARGO_PKG_VERSION_PATCH");
- if let Ok(patch) = patch_str.parse::<u32>() {
- res.patch = patch;
- }
- res
- }
-}
-
-impl fmt::Display for Version {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "v{}.{}.{}", self.major, self.minor, self.patch)
- }
-}