encode nightly version, commit, date into binary

This commit is contained in:
extrawurst 2024-03-27 12:38:15 +00:00 committed by extrawurst
parent 92e0face1e
commit 89e9f855cb
8 changed files with 84 additions and 46 deletions

30
Cargo.lock generated
View File

@ -304,6 +304,20 @@ version = "1.0.0"
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"
@ -733,6 +747,7 @@ dependencies = [
"bytesize",
"chrono",
"clap",
"compile-time",
"crossbeam-channel",
"crossterm",
"dirs",
@ -1379,6 +1394,15 @@ version = "0.1.23"
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"
@ -1426,6 +1450,12 @@ dependencies = [
"log",
]
[[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"

View File

@ -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" }

View File

@ -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
cargo clean

38
build.rs Normal file
View File

@ -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);
}

View File

@ -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(
"\

View File

@ -43,7 +43,6 @@ mod string_utils;
mod strings;
mod tabs;
mod ui;
mod version;
mod watcher;
use crate::{app::App, args::process_cmdline};

View File

@ -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),

View File

@ -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)
}
}