diff --git a/Cargo.lock b/Cargo.lock index 466d7ba9..5c0a3dae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -907,6 +907,7 @@ dependencies = [ "clap", "conduwuit_admin", "conduwuit_api", + "conduwuit_build_metadata", "conduwuit_core", "conduwuit_database", "conduwuit_router", diff --git a/src/main/Cargo.toml b/src/main/Cargo.toml index 9e8b8682..b33b76df 100644 --- a/src/main/Cargo.toml +++ b/src/main/Cargo.toml @@ -201,6 +201,7 @@ conduwuit-core.workspace = true conduwuit-database.workspace = true conduwuit-router.workspace = true conduwuit-service.workspace = true +conduwuit-build-metadata.workspace = true clap.workspace = true console-subscriber.optional = true diff --git a/src/main/sentry.rs b/src/main/sentry.rs index 2a09f415..825393c6 100644 --- a/src/main/sentry.rs +++ b/src/main/sentry.rs @@ -1,10 +1,12 @@ #![cfg(feature = "sentry_telemetry")] use std::{ + borrow::Cow, str::FromStr, sync::{Arc, OnceLock}, }; +use conduwuit_build_metadata as build; use conduwuit_core::{config::Config, debug, trace}; use sentry::{ Breadcrumb, ClientOptions, Level, @@ -44,7 +46,7 @@ fn options(config: &Config) -> ClientOptions { server_name, traces_sample_rate: config.sentry_traces_sample_rate, debug: cfg!(debug_assertions), - release: sentry::release_name!(), + release: release_name(), user_agent: conduwuit_core::version::user_agent().into(), attach_stacktrace: config.sentry_attach_stacktrace, before_send: Some(Arc::new(before_send)), @@ -91,3 +93,21 @@ fn before_breadcrumb(crumb: Breadcrumb) -> Option { trace!("Sentry breadcrumb: {crumb:?}"); Some(crumb) } + +fn release_name() -> Option> { + static RELEASE: OnceLock> = OnceLock::new(); + + RELEASE + .get_or_init(|| { + let pkg_name = env!("CARGO_PKG_NAME"); + let pkg_version = env!("CARGO_PKG_VERSION"); + + if let Some(commit_short) = build::GIT_COMMIT_HASH_SHORT { + Some(format!("{pkg_name}@{pkg_version}+{commit_short}")) + } else { + Some(format!("{pkg_name}@{pkg_version}")) + } + }) + .as_ref() + .map(|s| Cow::Borrowed(s.as_str())) +}