Skip to content

Commit fdb59a6

Browse files
committed
Show git semver in bannder
1 parent 3dc764d commit fdb59a6

File tree

1 file changed

+81
-32
lines changed

1 file changed

+81
-32
lines changed

server/src/banner.rs

Lines changed: 81 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919

2020
use crossterm::style::Stylize;
21+
use std::fmt;
2122
use sysinfo::{System, SystemExt};
2223

2324
pub fn system_info() {
@@ -44,56 +45,104 @@ pub fn warning_line() {
4445
);
4546
}
4647

48+
pub enum ParseableVersion {
49+
Version(semver::Version),
50+
Prerelease(semver::Prerelease),
51+
}
52+
53+
impl fmt::Display for ParseableVersion {
54+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
55+
match self {
56+
ParseableVersion::Version(v) => write!(f, "{}", v),
57+
ParseableVersion::Prerelease(p) => write!(f, "{}", p),
58+
}
59+
}
60+
}
61+
4762
pub mod version {
4863
use chrono::Duration;
4964
use chrono_humanize::{Accuracy, Tense};
5065
use crossterm::style::Stylize;
51-
use semver::Version;
66+
use semver::{Prerelease, Version};
5267

5368
use crate::utils::update;
5469

70+
use super::ParseableVersion;
71+
5572
pub fn print() {
5673
// print current version
5774
let current = current();
58-
// not eprintln because if it is old release then time passed with be displayed beside it
59-
eprint!(
60-
"
75+
76+
match current {
77+
ParseableVersion::Version(current_version) => {
78+
// not eprintln because if it is old release then time passed with be displayed beside it
79+
eprint!(
80+
"
6181
{} {} ",
62-
"Current Version:".to_string().blue().bold(),
63-
current
64-
);
65-
66-
// check for latest release, if it cannot be fetched then print error as warn and return
67-
let latest_release = match update::get_latest() {
68-
Ok(latest_release) => latest_release,
69-
Err(e) => {
70-
log::warn!("{}", e);
71-
return;
72-
}
73-
};
82+
"Current Version:".to_string().blue().bold(),
83+
current_version
84+
);
85+
86+
// check for latest release, if it cannot be fetched then print error as warn and return
87+
let latest_release = match update::get_latest() {
88+
Ok(latest_release) => latest_release,
89+
Err(e) => {
90+
log::warn!("{}", e);
91+
return;
92+
}
93+
};
7494

75-
if latest_release.version > current {
76-
let time_since_latest_release = chrono::Utc::now() - latest_release.date;
77-
let time_since_latest_release = humanize_time(time_since_latest_release);
95+
if latest_release.version > current_version {
96+
let time_since_latest_release = chrono::Utc::now() - latest_release.date;
97+
let time_since_latest_release = humanize_time(time_since_latest_release);
7898

79-
let fmt_latest_version = format!(
80-
"( v{} released {} ago )",
81-
latest_release.version, time_since_latest_release
82-
);
99+
let fmt_latest_version = format!(
100+
"( v{} released {} ago )",
101+
latest_release.version, time_since_latest_release
102+
);
83103

84-
eprint!("{}", fmt_latest_version.yellow().bold());
85-
eprintln!(
86-
"
104+
eprint!("{}", fmt_latest_version.yellow().bold());
105+
eprintln!(
106+
"
87107
Download latest version from https://github.com/parseablehq/parseable/releases/latest"
88-
);
89-
} else {
90-
eprintln!();
108+
);
109+
} else {
110+
eprintln!();
111+
}
112+
}
113+
ParseableVersion::Prerelease(current_prerelease) => {
114+
eprint!(
115+
"
116+
{} {} ",
117+
"Current Version:".to_string().blue().bold(),
118+
current_prerelease
119+
);
120+
}
91121
}
92122
}
93123

94-
pub fn current() -> Version {
95-
let current = env!("VERGEN_BUILD_SEMVER");
96-
semver::Version::parse(current).expect("VERGEN_BUILD_SEMVER is always valid semver")
124+
pub fn current() -> ParseableVersion {
125+
let build_semver = env!("VERGEN_BUILD_SEMVER");
126+
127+
let mut git_semver = env!("VERGEN_GIT_SEMVER");
128+
129+
if git_semver.chars().nth(0).unwrap() == 'v' {
130+
let mut git_semver_chars = git_semver.chars();
131+
git_semver_chars.next();
132+
git_semver = git_semver_chars.as_str();
133+
}
134+
135+
if build_semver == git_semver {
136+
ParseableVersion::Version(
137+
semver::Version::parse(build_semver)
138+
.expect("VERGEN_BUILD_SEMVER is always valid semver"),
139+
)
140+
} else {
141+
ParseableVersion::Prerelease(
142+
semver::Prerelease::new(git_semver)
143+
.expect("VERGEN_GIT_SEMVER is always valid semver"),
144+
)
145+
}
97146
}
98147

99148
fn humanize_time(time_passed: Duration) -> String {

0 commit comments

Comments
 (0)