From 9c1a49bc0134297733ad451251abbe7a9f0820a1 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Sun, 19 May 2024 20:54:43 +0200 Subject: [PATCH 01/22] Improved imports --- app/MindWork AI Studio/Chat/ChatRole.cs | 2 -- app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs | 3 --- app/MindWork AI Studio/Chat/ContentImage.cs | 2 -- app/MindWork AI Studio/Chat/ContentText.cs | 2 -- app/MindWork AI Studio/Chat/IContent.cs | 2 -- .../Components/CommonDialogs/ConfirmDialog.razor.cs | 2 -- .../Components/Layout/MainLayout.razor.cs | 1 - app/MindWork AI Studio/Components/Pages/About.razor | 1 + app/MindWork AI Studio/Components/Pages/About.razor.cs | 7 +++++++ app/MindWork AI Studio/Components/Pages/Chat.razor.cs | 3 --- app/MindWork AI Studio/Components/Pages/Settings.razor.cs | 3 --- app/MindWork AI Studio/GlobalUsings.cs | 5 +++++ app/MindWork AI Studio/MarkdownClipboardService.cs | 4 ---- app/MindWork AI Studio/Program.cs | 1 - app/MindWork AI Studio/Provider/IProvider.cs | 3 --- app/MindWork AI Studio/Provider/NoProvider.cs | 4 ---- app/MindWork AI Studio/Provider/OpenAI/ProviderOpenAI.cs | 4 ---- app/MindWork AI Studio/Settings/ProviderDialog.razor.cs | 3 --- app/MindWork AI Studio/Settings/SettingsManager.cs | 1 - app/MindWork AI Studio/Tools/Rust.cs | 4 ---- 20 files changed, 13 insertions(+), 44 deletions(-) create mode 100644 app/MindWork AI Studio/Components/Pages/About.razor create mode 100644 app/MindWork AI Studio/Components/Pages/About.razor.cs create mode 100644 app/MindWork AI Studio/GlobalUsings.cs diff --git a/app/MindWork AI Studio/Chat/ChatRole.cs b/app/MindWork AI Studio/Chat/ChatRole.cs index 763b432..2b8712b 100644 --- a/app/MindWork AI Studio/Chat/ChatRole.cs +++ b/app/MindWork AI Studio/Chat/ChatRole.cs @@ -1,5 +1,3 @@ -using MudBlazor; - namespace AIStudio.Chat; /// diff --git a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs index 8ab4c89..a08c5bf 100644 --- a/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs +++ b/app/MindWork AI Studio/Chat/ContentBlockComponent.razor.cs @@ -1,9 +1,6 @@ using AIStudio.Tools; using Microsoft.AspNetCore.Components; -using Microsoft.JSInterop; - -using MudBlazor; namespace AIStudio.Chat; diff --git a/app/MindWork AI Studio/Chat/ContentImage.cs b/app/MindWork AI Studio/Chat/ContentImage.cs index ccd845c..247c484 100644 --- a/app/MindWork AI Studio/Chat/ContentImage.cs +++ b/app/MindWork AI Studio/Chat/ContentImage.cs @@ -1,8 +1,6 @@ using AIStudio.Provider; using AIStudio.Settings; -using Microsoft.JSInterop; - namespace AIStudio.Chat; /// diff --git a/app/MindWork AI Studio/Chat/ContentText.cs b/app/MindWork AI Studio/Chat/ContentText.cs index b926c46..24c7b63 100644 --- a/app/MindWork AI Studio/Chat/ContentText.cs +++ b/app/MindWork AI Studio/Chat/ContentText.cs @@ -1,8 +1,6 @@ using AIStudio.Provider; using AIStudio.Settings; -using Microsoft.JSInterop; - namespace AIStudio.Chat; /// diff --git a/app/MindWork AI Studio/Chat/IContent.cs b/app/MindWork AI Studio/Chat/IContent.cs index 228b967..e8dcd4d 100644 --- a/app/MindWork AI Studio/Chat/IContent.cs +++ b/app/MindWork AI Studio/Chat/IContent.cs @@ -1,8 +1,6 @@ using AIStudio.Provider; using AIStudio.Settings; -using Microsoft.JSInterop; - namespace AIStudio.Chat; /// diff --git a/app/MindWork AI Studio/Components/CommonDialogs/ConfirmDialog.razor.cs b/app/MindWork AI Studio/Components/CommonDialogs/ConfirmDialog.razor.cs index 5e367e1..d75d6a8 100644 --- a/app/MindWork AI Studio/Components/CommonDialogs/ConfirmDialog.razor.cs +++ b/app/MindWork AI Studio/Components/CommonDialogs/ConfirmDialog.razor.cs @@ -1,7 +1,5 @@ using Microsoft.AspNetCore.Components; -using MudBlazor; - namespace AIStudio.Components.CommonDialogs; /// diff --git a/app/MindWork AI Studio/Components/Layout/MainLayout.razor.cs b/app/MindWork AI Studio/Components/Layout/MainLayout.razor.cs index 819c370..de25ecd 100644 --- a/app/MindWork AI Studio/Components/Layout/MainLayout.razor.cs +++ b/app/MindWork AI Studio/Components/Layout/MainLayout.razor.cs @@ -1,6 +1,5 @@ using AIStudio.Settings; using Microsoft.AspNetCore.Components; -using Microsoft.JSInterop; namespace AIStudio.Components.Layout; diff --git a/app/MindWork AI Studio/Components/Pages/About.razor b/app/MindWork AI Studio/Components/Pages/About.razor new file mode 100644 index 0000000..e7fbad6 --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/About.razor @@ -0,0 +1 @@ +@page "/About" diff --git a/app/MindWork AI Studio/Components/Pages/About.razor.cs b/app/MindWork AI Studio/Components/Pages/About.razor.cs new file mode 100644 index 0000000..bed101b --- /dev/null +++ b/app/MindWork AI Studio/Components/Pages/About.razor.cs @@ -0,0 +1,7 @@ +using Microsoft.AspNetCore.Components; + +namespace AIStudio.Components.Pages; + +public partial class About : ComponentBase +{ +} \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/Chat.razor.cs b/app/MindWork AI Studio/Components/Pages/Chat.razor.cs index 5b5b4c3..5607260 100644 --- a/app/MindWork AI Studio/Components/Pages/Chat.razor.cs +++ b/app/MindWork AI Studio/Components/Pages/Chat.razor.cs @@ -4,9 +4,6 @@ using AIStudio.Settings; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; -using Microsoft.JSInterop; - -using MudBlazor; namespace AIStudio.Components.Pages; diff --git a/app/MindWork AI Studio/Components/Pages/Settings.razor.cs b/app/MindWork AI Studio/Components/Pages/Settings.razor.cs index b287877..ee23e07 100644 --- a/app/MindWork AI Studio/Components/Pages/Settings.razor.cs +++ b/app/MindWork AI Studio/Components/Pages/Settings.razor.cs @@ -2,9 +2,6 @@ using AIStudio.Components.CommonDialogs; using AIStudio.Provider; using AIStudio.Settings; using Microsoft.AspNetCore.Components; -using Microsoft.JSInterop; - -using MudBlazor; // ReSharper disable ClassNeverInstantiated.Global diff --git a/app/MindWork AI Studio/GlobalUsings.cs b/app/MindWork AI Studio/GlobalUsings.cs new file mode 100644 index 0000000..8cd95b6 --- /dev/null +++ b/app/MindWork AI Studio/GlobalUsings.cs @@ -0,0 +1,5 @@ +// Global using directives + +global using Microsoft.JSInterop; + +global using MudBlazor; \ No newline at end of file diff --git a/app/MindWork AI Studio/MarkdownClipboardService.cs b/app/MindWork AI Studio/MarkdownClipboardService.cs index 66cc961..3d9740c 100644 --- a/app/MindWork AI Studio/MarkdownClipboardService.cs +++ b/app/MindWork AI Studio/MarkdownClipboardService.cs @@ -1,9 +1,5 @@ using AIStudio.Tools; -using Microsoft.JSInterop; - -using MudBlazor; - // ReSharper disable ClassNeverInstantiated.Global namespace AIStudio; diff --git a/app/MindWork AI Studio/Program.cs b/app/MindWork AI Studio/Program.cs index 72f6f22..ffd873f 100644 --- a/app/MindWork AI Studio/Program.cs +++ b/app/MindWork AI Studio/Program.cs @@ -3,7 +3,6 @@ using AIStudio.Components; using AIStudio.Settings; using AIStudio.Tools; -using MudBlazor; using MudBlazor.Services; #if !DEBUG diff --git a/app/MindWork AI Studio/Provider/IProvider.cs b/app/MindWork AI Studio/Provider/IProvider.cs index 7c5baeb..153ebba 100644 --- a/app/MindWork AI Studio/Provider/IProvider.cs +++ b/app/MindWork AI Studio/Provider/IProvider.cs @@ -1,8 +1,5 @@ using AIStudio.Chat; using AIStudio.Settings; -using Microsoft.JSInterop; - -using MudBlazor; namespace AIStudio.Provider; diff --git a/app/MindWork AI Studio/Provider/NoProvider.cs b/app/MindWork AI Studio/Provider/NoProvider.cs index d65ea57..5c0a9e5 100644 --- a/app/MindWork AI Studio/Provider/NoProvider.cs +++ b/app/MindWork AI Studio/Provider/NoProvider.cs @@ -3,10 +3,6 @@ using System.Runtime.CompilerServices; using AIStudio.Chat; using AIStudio.Settings; -using Microsoft.JSInterop; - -using MudBlazor; - namespace AIStudio.Provider; public class NoProvider : IProvider diff --git a/app/MindWork AI Studio/Provider/OpenAI/ProviderOpenAI.cs b/app/MindWork AI Studio/Provider/OpenAI/ProviderOpenAI.cs index 8abb5f3..f883a6e 100644 --- a/app/MindWork AI Studio/Provider/OpenAI/ProviderOpenAI.cs +++ b/app/MindWork AI Studio/Provider/OpenAI/ProviderOpenAI.cs @@ -6,10 +6,6 @@ using System.Text.Json; using AIStudio.Chat; using AIStudio.Settings; -using Microsoft.JSInterop; - -using MudBlazor; - namespace AIStudio.Provider.OpenAI; /// diff --git a/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs b/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs index 1a267ca..3cfd257 100644 --- a/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs +++ b/app/MindWork AI Studio/Settings/ProviderDialog.razor.cs @@ -3,9 +3,6 @@ using System.Text.RegularExpressions; using AIStudio.Provider; using Microsoft.AspNetCore.Components; -using Microsoft.JSInterop; - -using MudBlazor; namespace AIStudio.Settings; diff --git a/app/MindWork AI Studio/Settings/SettingsManager.cs b/app/MindWork AI Studio/Settings/SettingsManager.cs index af6adf5..50765cd 100644 --- a/app/MindWork AI Studio/Settings/SettingsManager.cs +++ b/app/MindWork AI Studio/Settings/SettingsManager.cs @@ -1,6 +1,5 @@ using System.Text.Json; using AIStudio.Provider; -using Microsoft.JSInterop; // ReSharper disable NotAccessedPositionalProperty.Local diff --git a/app/MindWork AI Studio/Tools/Rust.cs b/app/MindWork AI Studio/Tools/Rust.cs index 6db275a..9763b39 100644 --- a/app/MindWork AI Studio/Tools/Rust.cs +++ b/app/MindWork AI Studio/Tools/Rust.cs @@ -1,7 +1,3 @@ -using Microsoft.JSInterop; - -using MudBlazor; - namespace AIStudio.Tools; /// From 18def8a49e17f81b61b5765abdc1c1308f604808 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Sun, 19 May 2024 21:09:23 +0200 Subject: [PATCH 02/22] Added tooltips to the navigation --- .../Components/Layout/MainLayout.razor | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/app/MindWork AI Studio/Components/Layout/MainLayout.razor b/app/MindWork AI Studio/Components/Layout/MainLayout.razor index 578c5d0..605299c 100644 --- a/app/MindWork AI Studio/Components/Layout/MainLayout.razor +++ b/app/MindWork AI Studio/Components/Layout/MainLayout.razor @@ -5,9 +5,15 @@ - Home - Chats - Settings + + Home + + + Chats + + + Settings + From c7ae71863f1faae40ea4580b7468a55b8af317c1 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 21 May 2024 18:54:07 +0200 Subject: [PATCH 03/22] Enhanced build script to generate & maintain the metadata; closes #29 --- app/MindWork AI Studio/build.nu | 205 +++++++++++++++++++++++++++++++- metadata.txt | 9 ++ 2 files changed, 213 insertions(+), 1 deletion(-) create mode 100644 metadata.txt diff --git a/app/MindWork AI Studio/build.nu b/app/MindWork AI Studio/build.nu index 0f50c84..e3c322e 100755 --- a/app/MindWork AI Studio/build.nu +++ b/app/MindWork AI Studio/build.nu @@ -6,6 +6,43 @@ def are_assets_exist [rid: string]: string -> bool { $"bin/release/net8.0/($rid)/publish/wwwroot/_content/MudBlazor/MudBlazor.min.css" | path exists } +def "main help" []: nothing -> nothing { + print "Usage: nu build.nu [action]" + print "" + print "Optional Actions:" + print "-----------------" + print " fix_web_assets Prepare the web assets; run this once for each release on one platform; changes will be committed." + print "" + print " metadata Update the metadata file; run this on every platform right before the release; changes will be" + print " committed once; there should be no differences between the platforms." + print "" + print "Actions:" + print "---------" + print " prepare [action] Prepare the project for a release; increases the version & build numbers, updates the build time," + print " and runs fix_web_assets; run this once for each release on one platform; changes will be committed." + print " The action can be 'major', 'minor', or 'patch'. The version will be updated accordingly." + print "" + print " publish Publish the project for all supported RIDs; run this on every platform." + print "" +} + +def "main prepare" [action: string]: string -> nothing { + if (update_app_version $action) { + main fix_web_assets + inc_build_number + update_build_time + main metadata + } +} + +def "main metadata" []: nothing -> nothing { + update_dotnet_version + update_rust_version + update_mudblazor_version + update_tauri_version + update_project_commit_hash +} + def "main fix_web_assets" []: nothing -> nothing { # Get the matching RIDs for the current OS: @@ -29,6 +66,8 @@ def "main fix_web_assets" []: nothing -> nothing { def "main publish" []: nothing -> nothing { + main metadata + # Ensure, that the dist directory exists: mkdir bin/dist @@ -51,7 +90,7 @@ def "main publish" []: nothing -> nothing { print "==============================" print $"Start building for ($rid)..." - ^dotnet publish --configuration release --runtime $rid + ^dotnet publish --configuration release --runtime $rid --disable-build-servers --force let final_filename = match $rid { "win-x64" => "mindworkAIStudio-x86_64-pc-windows-msvc.exe", @@ -120,4 +159,168 @@ def get_rids []: nothing -> list { def get_os []: nothing -> string { (sys).host.name | str downcase +} + +def update_build_time []: nothing -> nothing { + mut meta_lines = open --raw ../../metadata.txt | lines + mut build_time = $meta_lines.1 + + let updated_build_time = (date now | date to-timezone UTC | format date "%Y-%m-%d %H:%M:%S") + print $"Updated build time from ($build_time) to ($updated_build_time) UTC." + + $build_time = $"($updated_build_time) UTC" + $meta_lines.1 = $build_time + $meta_lines | save --raw --force ../../metadata.txt +} + +def inc_build_number []: nothing -> nothing { + mut meta_lines = open --raw ../../metadata.txt | lines + mut build_number = $meta_lines.2 | into int + + let updated_build_number = ([$build_number, 1] | math sum) + print $"Incremented build number from ($build_number) to ($updated_build_number)." + + $build_number = $updated_build_number + $meta_lines.2 = ($build_number | into string) + $meta_lines | save --raw --force ../../metadata.txt +} + +def update_dotnet_version []: nothing -> nothing { + mut meta_lines = open --raw ../../metadata.txt | lines + mut dotnet_sdk_version = $meta_lines.3 + mut dotnet_version = $meta_lines.4 + + let dotnet_data = (^dotnet --info) | parse --regex '(?s).NET SDK:\s+Version:\s+(?P[0-9.]+).+Commit:\s+(?P[a-zA-Z0-9]+).+Host:\s+Version:\s+(?P[0-9.]+).+Commit:\s+(?P[a-zA-Z0-9]+)' + let sdk_version = $dotnet_data.sdkVersion.0 + let host_version = $dotnet_data.hostVersion.0 + let sdkCommit = $dotnet_data.sdkCommit.0 + let hostCommit = $dotnet_data.hostCommit.0 + + print $"Updated .NET SDK version from ($dotnet_sdk_version) to ($sdk_version) \(commit ($sdkCommit)\)." + $meta_lines.3 = $"($sdk_version) \(commit ($sdkCommit)\)" + + print $"Updated .NET version from ($dotnet_version) to ($host_version) \(commit ($hostCommit)\)." + $meta_lines.4 = $"($host_version) \(commit ($hostCommit)\)" + + $meta_lines | save --raw --force ../../metadata.txt +} + +def update_rust_version []: nothing -> nothing { + mut meta_lines = open --raw ../../metadata.txt | lines + mut rust_version = $meta_lines.5 + + let rust_data = (^rustc -Vv) | parse --regex 'rustc (?[0-9.]+) \((?[a-zA-Z0-9]+)' + let version = $rust_data.version.0 + let commit = $rust_data.commit.0 + + print $"Updated Rust version from ($rust_version) to ($version) \(commit ($commit)\)." + $meta_lines.5 = $"($version) \(commit ($commit)\)" + + $meta_lines | save --raw --force ../../metadata.txt +} + +def update_mudblazor_version []: nothing -> nothing { + mut meta_lines = open --raw ../../metadata.txt | lines + mut mudblazor_version = $meta_lines.6 + + let mudblazor_data = (^dotnet list package) | parse --regex 'MudBlazor\s+(?[0-9.]+)' + let version = $mudblazor_data.version.0 + + print $"Updated MudBlazor version from ($mudblazor_version) to ($version)." + $meta_lines.6 = $version + + $meta_lines | save --raw --force ../../metadata.txt +} + +def update_tauri_version []: nothing -> nothing { + mut meta_lines = open --raw ../../metadata.txt | lines + mut tauri_version = $meta_lines.7 + + cd ../../runtime + let tauri_data = (^cargo tree --depth 1) | parse --regex 'tauri\s+v(?[0-9.]+)' + let version = $tauri_data.version.0 + cd "../app/MindWork AI Studio" + + print $"Updated Tauri version from ($tauri_version) to ($version)." + $meta_lines.7 = $version + + $meta_lines | save --raw --force ../../metadata.txt +} + +def update_app_version [action: string]: string -> bool { + mut meta_lines = open --raw ../../metadata.txt | lines + mut app_version = $meta_lines.0 + + let version_data = $app_version | parse --regex '(?P[0-9]+)\.(?P[0-9]+)\.(?P[0-9]+)' + + if $action == "major" { + + mut major = $version_data.major | into int + $major = ([$major.0, 1] | math sum) + + let updated_version = [$major, 0, 0] | str join "." + print $"Updated app version from ($app_version) to ($updated_version)." + $meta_lines.0 = $updated_version + + } else if $action == "minor" { + + let major = $version_data.major | into int + mut minor = $version_data.minor | into int + $minor = ([$minor.0, 1] | math sum) + + let updated_version = [$major.0, $minor, 0] | str join "." + print $"Updated app version from ($app_version) to ($updated_version)." + $meta_lines.0 = $updated_version + + } else if $action == "patch" { + + let major = $version_data.major | into int + let minor = $version_data.minor | into int + mut patch = $version_data.patch | into int + $patch = ([$patch.0, 1] | math sum) + + let updated_version = [$major.0, $minor.0, $patch] | str join "." + print $"Updated app version from ($app_version) to ($updated_version)." + $meta_lines.0 = $updated_version + + } else { + print $"Invalid action '($action)'. Please use 'major', 'minor', or 'patch'." + return false + } + + $meta_lines | save --raw --force ../../metadata.txt + return true +} + +def update_project_commit_hash []: nothing -> nothing { + mut meta_lines = open --raw ../../metadata.txt | lines + mut commit_hash = $meta_lines.8 + + # Check, if the work directory is clean. We allow, that the metadata file is dirty: + let git_status = (^git status --porcelain) | lines + let dirty_files = $git_status | length + let first_is_metadata = ($git_status.0 =~ '^\sM\s+metadata.txt$') + let git_tag_response = ^git describe --tags --exact-match | complete + let state = { + num_dirty: $dirty_files, + first_is_metadata: $first_is_metadata, + git_tag_present: ($git_tag_response.exit_code == 0), + git_tag: $git_tag_response.stdout + } + + let commit_postfix = match $state { + { num_dirty: $num_dirty, first_is_metadata: _, git_tag_present: _, git_tag: _ } if $num_dirty > 1 => ", dev debug", + { num_dirty: $num_dirty, first_is_metadata: false, git_tag_present: _, git_tag: _ } if $num_dirty == 1 => ", dev debug", + { num_dirty: $num_dirty, first_is_metadata: true, git_tag_present: false, git_tag: _ } if $num_dirty == 1 => ", dev testing", + { num_dirty: $num_dirty, first_is_metadata: true, git_tag_present: true, git_tag: $tag } if $num_dirty == 1 => $", release $tag", + + _ => "-dev unknown" + } + + # Use the first ten characters of the commit hash: + let updated_commit_hash = (^git rev-parse HEAD) | str substring 0..10 | append $commit_postfix | str join + print $"Updated commit hash from ($commit_hash) to ($updated_commit_hash)." + + $meta_lines.8 = $updated_commit_hash + $meta_lines | save --raw --force ../../metadata.txt } \ No newline at end of file diff --git a/metadata.txt b/metadata.txt new file mode 100644 index 0000000..bb827e6 --- /dev/null +++ b/metadata.txt @@ -0,0 +1,9 @@ +0.3.2 +2024-05-21 16:40:39 UTC +139 +8.0.205 (commit 3e1383b780) +8.0.5 (commit 087e15321b) +1.78.0 (commit 9b00956e5) +6.19.1 +1.6.1 +18def8a49e, dev debug From 3adad8fb5552334ba7c9e608bd786753df8888ab Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 21 May 2024 18:55:08 +0200 Subject: [PATCH 04/22] Read metadata to update project information --- runtime/build.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/runtime/build.rs b/runtime/build.rs index 94722df..bdd0922 100644 --- a/runtime/build.rs +++ b/runtime/build.rs @@ -2,6 +2,54 @@ use std::path::PathBuf; fn main() { tauri_build::build(); + + // Tells Cargo to re-run this script only, when the version.txt file was changed: + println!("cargo:rerun-if-changed=../metadata.txt"); + let out_dir = PathBuf::from(std::env::var("OUT_DIR").unwrap()); println!("cargo:rustc-env=OUT_DIR={}", out_dir.to_str().unwrap()); + + let metadata = include_str!("../metadata.txt"); + let mut metadata_lines = metadata.lines(); + let version = metadata_lines.next().unwrap(); + + update_cargo_toml("Cargo.toml", version); + update_tauri_conf("tauri.conf.json", version); +} + +fn update_cargo_toml(cargo_path: &str, version: &str) { + let cargo_toml = std::fs::read_to_string(cargo_path).unwrap(); + let cargo_toml_lines = cargo_toml.lines(); + let mut new_cargo_toml = String::new(); + + for line in cargo_toml_lines { + if line.starts_with("version = ") { + new_cargo_toml.push_str(&format!("version = \"{version}\"")); + } else { + new_cargo_toml.push_str(line); + } + new_cargo_toml.push('\n'); + } + + std::fs::write(cargo_path, new_cargo_toml).unwrap(); +} + +fn update_tauri_conf(tauri_conf_path: &str, version: &str) { + let tauri_conf = std::fs::read_to_string(tauri_conf_path).unwrap(); + let tauri_conf_lines = tauri_conf.lines(); + let mut new_tauri_conf = String::new(); + + for line in tauri_conf_lines { + // The version in Tauri's config is formatted like this: + // "version": "0.1.0-alpha.0" + // Please notice, that the version number line might have a leading tab, etc. + if line.contains("\"version\": ") { + new_tauri_conf.push_str(&format!("\t\"version\": \"{version}\"")); + } else { + new_tauri_conf.push_str(line); + } + new_tauri_conf.push('\n'); + } + + std::fs::write(tauri_conf_path, new_tauri_conf).unwrap(); } From 5b194d7b4b90bccbb076f5abcc0b21b41b830eb1 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 21 May 2024 18:55:35 +0200 Subject: [PATCH 05/22] Log metadata at start --- runtime/src/main.rs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/runtime/src/main.rs b/runtime/src/main.rs index 8924ee7..06b94e5 100644 --- a/runtime/src/main.rs +++ b/runtime/src/main.rs @@ -18,11 +18,32 @@ use log::{debug, error, info, warn}; fn main() { + let metadata = 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(); + Logger::try_with_str("debug").expect("Cannot create logging") .log_to_stdout() .adaptive_format_for_stdout(AdaptiveFormat::Detailed) .start().expect("Cannot start logging"); + info!("Starting MindWork AI Studio:"); + info!(".. Version: v{app_version} (commit {app_commit_hash}, build {build_number})"); + info!(".. Build time: {build_time}"); + info!(".. .NET SDK: v{dotnet_sdk_version}"); + info!(".. .NET: v{dotnet_version}"); + info!(".. Rust: v{rust_version}"); + info!(".. MudBlazor: v{mud_blazor_version}"); + info!(".. Tauri: v{tauri_version}"); + if is_dev() { warn!("Running in development mode."); } else { From 1c9f07595555fc0701f363723e9d0e8c35f1653d Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 21 May 2024 18:56:38 +0200 Subject: [PATCH 06/22] Read metadata to update project information --- app/MindWork AI Studio/MetaDataAttribute.cs | 33 +++++++++++++ .../MindWork AI Studio.csproj | 48 ++++++++++++++++++- 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 app/MindWork AI Studio/MetaDataAttribute.cs diff --git a/app/MindWork AI Studio/MetaDataAttribute.cs b/app/MindWork AI Studio/MetaDataAttribute.cs new file mode 100644 index 0000000..4b610eb --- /dev/null +++ b/app/MindWork AI Studio/MetaDataAttribute.cs @@ -0,0 +1,33 @@ +namespace AIStudio; + +[AttributeUsage(AttributeTargets.Assembly)] +public class MetaDataAttribute( + string version, + string buildTime, + uint buildNum, + string dotnetSdkVersion, + string dotnetVersion, + string rustVersion, + string mudBlazorVersion, + string tauriVersion, + string appCommitHash + ) : Attribute +{ + public string BuildTime { get; } = buildTime; + + public string Version { get; } = version; + + public uint BuildNum { get; } = buildNum; + + public string DotnetVersion { get; } = dotnetVersion; + + public string DotnetSdkVersion { get; } = dotnetSdkVersion; + + public string RustVersion { get; } = rustVersion; + + public string MudBlazorVersion { get; } = mudBlazorVersion; + + public string TauriVersion { get; } = tauriVersion; + + public string AppCommitHash { get; } = appCommitHash; +} \ No newline at end of file diff --git a/app/MindWork AI Studio/MindWork AI Studio.csproj b/app/MindWork AI Studio/MindWork AI Studio.csproj index aa0d895..d9d3803 100644 --- a/app/MindWork AI Studio/MindWork AI Studio.csproj +++ b/app/MindWork AI Studio/MindWork AI Studio.csproj @@ -1,5 +1,8 @@ + + + net8.0 enable @@ -29,7 +32,7 @@ - + @@ -45,4 +48,47 @@ + + + + + + + + + + $([System.String]::Copy( $(Metadata) ).Split( ';' )[ 0 ]) + $([System.String]::Copy( $(Metadata) ).Split( ';' )[ 1 ]) + $([System.String]::Copy( $(Metadata) ).Split( ';' )[ 2 ]) + $([System.String]::Copy( $(Metadata) ).Split( ';' )[ 3 ]) + $([System.String]::Copy( $(Metadata) ).Split( ';' )[ 4 ]) + $([System.String]::Copy( $(Metadata) ).Split( ';' )[ 5 ]) + $([System.String]::Copy( $(Metadata) ).Split( ';' )[ 6 ]) + $([System.String]::Copy( $(Metadata) ).Split( ';' )[ 7 ]) + $([System.String]::Copy( $(Metadata) ).Split( ';' )[ 8 ]) + + true + + $(MetaVersion) + $(MetaVersion) + $(MetaVersion) + + + + + <_Parameter1>$(MetaVersion) + <_Parameter2>$(MetaBuildTime) + <_Parameter3>$(MetaBuild) + <_Parameter3_TypeName>System.UInt32 + <_Parameter4>$(MetaDotnetSdkVersion) + <_Parameter5>$(MetaDotnetVersion) + <_Parameter6>$(MetaRustVersion) + <_Parameter7>$(MetaMudBlazorVersion) + <_Parameter8>$(MetaTauriVersion) + <_Parameter9>$(MetaAppCommitHash) + + + + + From 3b7d8a4db4a2d21ebd71ff2cdf016675da4b2bc1 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 21 May 2024 18:56:56 +0200 Subject: [PATCH 07/22] Add author --- app/MindWork AI Studio/MindWork AI Studio.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/app/MindWork AI Studio/MindWork AI Studio.csproj b/app/MindWork AI Studio/MindWork AI Studio.csproj index d9d3803..6679fb2 100644 --- a/app/MindWork AI Studio/MindWork AI Studio.csproj +++ b/app/MindWork AI Studio/MindWork AI Studio.csproj @@ -4,6 +4,7 @@ + Thorsten Sommer net8.0 enable CS8600;CS8602;CS8603 From e60a8d5b3c14bd3f689cdc7ed21a8df38401ea0e Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 21 May 2024 18:57:45 +0200 Subject: [PATCH 08/22] Added about page to show metadata --- .../Components/Layout/MainLayout.razor | 3 +++ .../Components/Pages/About.razor | 23 ++++++++++++++++++- .../Components/Pages/About.razor.cs | 18 +++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/app/MindWork AI Studio/Components/Layout/MainLayout.razor b/app/MindWork AI Studio/Components/Layout/MainLayout.razor index 605299c..ff7c92d 100644 --- a/app/MindWork AI Studio/Components/Layout/MainLayout.razor +++ b/app/MindWork AI Studio/Components/Layout/MainLayout.razor @@ -11,6 +11,9 @@ Chats + + About + Settings diff --git a/app/MindWork AI Studio/Components/Pages/About.razor b/app/MindWork AI Studio/Components/Pages/About.razor index e7fbad6..271418c 100644 --- a/app/MindWork AI Studio/Components/Pages/About.razor +++ b/app/MindWork AI Studio/Components/Pages/About.razor @@ -1 +1,22 @@ -@page "/About" +@page "/about" +About MindWork AI Studio + + + + Versions + + + + The following list shows the versions of the MindWork AI Studio, the used compilers, build time, etc.: + + + + + + + + + + + + \ No newline at end of file diff --git a/app/MindWork AI Studio/Components/Pages/About.razor.cs b/app/MindWork AI Studio/Components/Pages/About.razor.cs index bed101b..d8d650d 100644 --- a/app/MindWork AI Studio/Components/Pages/About.razor.cs +++ b/app/MindWork AI Studio/Components/Pages/About.razor.cs @@ -1,7 +1,25 @@ +using System.Reflection; + using Microsoft.AspNetCore.Components; namespace AIStudio.Components.Pages; public partial class About : ComponentBase { + private static readonly Assembly ASSEMBLY = Assembly.GetExecutingAssembly(); + private static readonly MetaDataAttribute META_DATA = ASSEMBLY.GetCustomAttribute()!; + + private static string VersionDotnet => $"Used .NET compiler: v{META_DATA.DotnetVersion}"; + + private static string VersionDotnetSdk => $"Used .NET SDK: v{META_DATA.DotnetSdkVersion}"; + + private static string VersionRust => $"Used Rust compiler: v{META_DATA.RustVersion}"; + + private static string VersionApp => $"MindWork AI Studio: v{META_DATA.Version} (commit {META_DATA.AppCommitHash}, build {META_DATA.BuildNum})"; + + private static string BuildTime => $"Build time: {META_DATA.BuildTime}"; + + private static string MudBlazorVersion => $"MudBlazor: v{META_DATA.MudBlazorVersion}"; + + private static string TauriVersion => $"Tauri: v{META_DATA.TauriVersion}"; } \ No newline at end of file From bbce08ddc55cff4cb8be630e1275e6d5e9ce0cc0 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 21 May 2024 18:58:02 +0200 Subject: [PATCH 09/22] Prevent Tauri watch --- app/.run/Tauri Dev.run.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/.run/Tauri Dev.run.xml b/app/.run/Tauri Dev.run.xml index cc9d386..7c319e8 100644 --- a/app/.run/Tauri Dev.run.xml +++ b/app/.run/Tauri Dev.run.xml @@ -1,6 +1,6 @@ -