Refactored metadata initialization (#441)

This commit is contained in:
Thorsten Sommer 2025-05-03 14:26:13 +02:00 committed by GitHub
parent b0d4615506
commit 437ea2c243
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 57 additions and 38 deletions

View File

@ -10,39 +10,12 @@ use mindwork_ai_studio::certificate::{generate_certificate};
use mindwork_ai_studio::dotnet::start_dotnet_server; use mindwork_ai_studio::dotnet::start_dotnet_server;
use mindwork_ai_studio::environment::is_dev; use mindwork_ai_studio::environment::is_dev;
use mindwork_ai_studio::log::init_logging; use mindwork_ai_studio::log::init_logging;
use mindwork_ai_studio::metadata::{MetaData, META_DATA}; use mindwork_ai_studio::metadata::MetaData;
use mindwork_ai_studio::runtime_api::start_runtime_api; use mindwork_ai_studio::runtime_api::start_runtime_api;
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {
let metadata = include_str!("../../metadata.txt"); let metadata = MetaData::init_from_string(include_str!("../../metadata.txt"));
let mut metadata_lines = metadata.lines();
let app_version = metadata_lines.next().unwrap();
let build_time = metadata_lines.next().unwrap();
let build_number = metadata_lines.next().unwrap();
let dotnet_sdk_version = metadata_lines.next().unwrap();
let dotnet_version = metadata_lines.next().unwrap();
let rust_version = metadata_lines.next().unwrap();
let mud_blazor_version = metadata_lines.next().unwrap();
let tauri_version = metadata_lines.next().unwrap();
let app_commit_hash = metadata_lines.next().unwrap();
let architecture = metadata_lines.next().unwrap();
let pdfium_version = metadata_lines.next().unwrap();
let metadata = MetaData {
architecture: architecture.to_string(),
app_commit_hash: app_commit_hash.to_string(),
app_version: app_version.to_string(),
build_number: build_number.to_string(),
build_time: build_time.to_string(),
dotnet_sdk_version: dotnet_sdk_version.to_string(),
dotnet_version: dotnet_version.to_string(),
mud_blazor_version: mud_blazor_version.to_string(),
rust_version: rust_version.to_string(),
tauri_version: tauri_version.to_string(),
};
*META_DATA.lock().unwrap() = Some(metadata);
init_logging(); init_logging();
info!("Starting MindWork AI Studio:"); info!("Starting MindWork AI Studio:");
@ -50,14 +23,18 @@ async fn main() {
let working_directory = std::env::current_dir().unwrap(); let working_directory = std::env::current_dir().unwrap();
info!(".. The working directory is: '{working_directory:?}'"); info!(".. The working directory is: '{working_directory:?}'");
info!(".. Version: v{app_version} (commit {app_commit_hash}, build {build_number}, {architecture})"); info!(".. Version: v{app_version} (commit {hash}, build {build_num}, {architecture})",
info!(".. Build time: {build_time}"); app_version = metadata.app_version,
info!(".. .NET SDK: v{dotnet_sdk_version}"); hash = metadata.app_commit_hash,
info!(".. .NET: v{dotnet_version}"); build_num = metadata.build_number,
info!(".. Rust: v{rust_version}"); architecture = metadata.architecture);
info!(".. MudBlazor: v{mud_blazor_version}"); info!(".. Build time: {build_time}", build_time = metadata.build_time);
info!(".. Tauri: v{tauri_version}"); info!(".. .NET SDK: v{sdk_version}", sdk_version = metadata.dotnet_sdk_version);
info!(".. PDFium: v{pdfium_version}"); info!(".. .NET: v{dotnet_version}", dotnet_version = metadata.dotnet_version);
info!(".. Rust: v{rust_version}", rust_version = metadata.rust_version);
info!(".. MudBlazor: v{mud_blazor_version}", mud_blazor_version = metadata.mud_blazor_version);
info!(".. Tauri: v{tauri_version}", tauri_version = metadata.tauri_version);
info!(".. PDFium: v{pdfium_version}", pdfium_version = metadata.pdfium_version);
if is_dev() { if is_dev() {
warn!("Running in development mode."); warn!("Running in development mode.");

View File

@ -1,5 +1,5 @@
use std::sync::Mutex;
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
use std::sync::Mutex;
pub static META_DATA: Lazy<Mutex<Option<MetaData>>> = Lazy::new(|| Mutex::new(None)); pub static META_DATA: Lazy<Mutex<Option<MetaData>>> = Lazy::new(|| Mutex::new(None));
@ -15,4 +15,46 @@ pub struct MetaData {
pub tauri_version: String, pub tauri_version: String,
pub app_commit_hash: String, pub app_commit_hash: String,
pub architecture: String, pub architecture: String,
pub pdfium_version: String,
}
impl MetaData {
/// Creates a new instance of `MetaData` from the given metadata string.
pub fn init_from_string(metadata: &str) -> Self {
// When the metadata is already initialized, return the existing instance:
if let Some(metadata) = META_DATA.lock().unwrap().as_ref() {
return metadata.clone();
}
let mut metadata_lines = metadata.lines();
let app_version = metadata_lines.next().unwrap();
let build_time = metadata_lines.next().unwrap();
let build_number = metadata_lines.next().unwrap();
let dotnet_sdk_version = metadata_lines.next().unwrap();
let dotnet_version = metadata_lines.next().unwrap();
let rust_version = metadata_lines.next().unwrap();
let mud_blazor_version = metadata_lines.next().unwrap();
let tauri_version = metadata_lines.next().unwrap();
let app_commit_hash = metadata_lines.next().unwrap();
let architecture = metadata_lines.next().unwrap();
let pdfium_version = metadata_lines.next().unwrap();
let metadata = MetaData {
architecture: architecture.to_string(),
app_commit_hash: app_commit_hash.to_string(),
app_version: app_version.to_string(),
build_number: build_number.to_string(),
build_time: build_time.to_string(),
dotnet_sdk_version: dotnet_sdk_version.to_string(),
dotnet_version: dotnet_version.to_string(),
mud_blazor_version: mud_blazor_version.to_string(),
rust_version: rust_version.to_string(),
tauri_version: tauri_version.to_string(),
pdfium_version: pdfium_version.to_string(),
};
*META_DATA.lock().unwrap() = Some(metadata.clone());
metadata
}
} }