summaryrefslogtreecommitdiff
path: root/cli/version.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/version.rs')
-rw-r--r--cli/version.rs109
1 files changed, 74 insertions, 35 deletions
diff --git a/cli/version.rs b/cli/version.rs
index e4801e108..4a71d7090 100644
--- a/cli/version.rs
+++ b/cli/version.rs
@@ -1,47 +1,86 @@
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+use once_cell::sync::Lazy;
+
use crate::shared::ReleaseChannel;
-pub const GIT_COMMIT_HASH: &str = env!("GIT_COMMIT_HASH");
-pub const TYPESCRIPT: &str = env!("TS_VERSION");
+const GIT_COMMIT_HASH: &str = env!("GIT_COMMIT_HASH");
+const TYPESCRIPT: &str = env!("TS_VERSION");
+const CARGO_PKG_VERSION: &str = env!("CARGO_PKG_VERSION");
// TODO(bartlomieju): ideally we could remove this const.
const IS_CANARY: bool = option_env!("DENO_CANARY").is_some();
-pub const RELEASE_CHANNEL: ReleaseChannel = if IS_CANARY {
- ReleaseChannel::Canary
-} else {
- ReleaseChannel::Stable
-};
-
-pub fn deno() -> &'static str {
- if IS_CANARY {
- concat!(
- env!("CARGO_PKG_VERSION"),
- "+",
- env!("GIT_COMMIT_HASH_SHORT")
- )
- } else {
- env!("CARGO_PKG_VERSION")
- }
-}
-// Keep this in sync with `deno()` above
-pub fn get_user_agent() -> &'static str {
- if IS_CANARY {
- concat!(
- "Deno/",
- env!("CARGO_PKG_VERSION"),
- "+",
- env!("GIT_COMMIT_HASH_SHORT")
- )
- } else {
- concat!("Deno/", env!("CARGO_PKG_VERSION"))
+pub static DENO_VERSION_INFO: Lazy<DenoVersionInfo> = Lazy::new(|| {
+ let release_channel = libsui::find_section("denover")
+ .and_then(|buf| std::str::from_utf8(buf).ok())
+ .and_then(|str_| ReleaseChannel::deserialize(str_).ok())
+ .unwrap_or({
+ if IS_CANARY {
+ ReleaseChannel::Canary
+ } else {
+ ReleaseChannel::Stable
+ }
+ });
+
+ DenoVersionInfo {
+ // TODO(bartlomieju): fix further for RC and LTS releases
+ deno: if IS_CANARY {
+ concat!(
+ env!("CARGO_PKG_VERSION"),
+ "+",
+ env!("GIT_COMMIT_HASH_SHORT")
+ )
+ } else {
+ env!("CARGO_PKG_VERSION")
+ },
+
+ release_channel,
+
+ git_hash: GIT_COMMIT_HASH,
+
+ // Keep in sync with `deno` field.
+ // TODO(bartlomieju): fix further for RC and LTS releases
+ user_agent: if IS_CANARY {
+ concat!(
+ "Deno/",
+ env!("CARGO_PKG_VERSION"),
+ "+",
+ env!("GIT_COMMIT_HASH_SHORT")
+ )
+ } else {
+ concat!("Deno/", env!("CARGO_PKG_VERSION"))
+ },
+
+ typescript: TYPESCRIPT,
}
+});
+
+pub struct DenoVersionInfo {
+ /// Human-readable version of the current Deno binary.
+ ///
+ /// For stable release, a semver, eg. `v1.46.2`.
+ /// For canary release, a semver + 7-char git hash, eg. `v1.46.3+asdfqwq`.
+ pub deno: &'static str,
+
+ pub release_channel: ReleaseChannel,
+
+ /// A full git hash.
+ pub git_hash: &'static str,
+
+ /// A user-agent header that will be used in HTTP client.
+ pub user_agent: &'static str,
+
+ pub typescript: &'static str,
}
-pub fn release_version_or_canary_commit_hash() -> &'static str {
- if IS_CANARY {
- GIT_COMMIT_HASH
- } else {
- env!("CARGO_PKG_VERSION")
+impl DenoVersionInfo {
+ /// For stable release, a semver like, eg. `v1.46.2`.
+ /// For canary release a full git hash, eg. `9bdab6fb6b93eb43b1930f40987fa4997287f9c8`.
+ pub fn version_or_git_hash(&self) -> &'static str {
+ if IS_CANARY {
+ self.git_hash
+ } else {
+ CARGO_PKG_VERSION
+ }
}
}