diff --git a/app/Build/Commands/CheckRidsCommand.cs b/app/Build/Commands/CheckRidsCommand.cs index 62bf3662..74912a33 100644 --- a/app/Build/Commands/CheckRidsCommand.cs +++ b/app/Build/Commands/CheckRidsCommand.cs @@ -17,5 +17,10 @@ public sealed class CheckRidsCommand { Console.WriteLine($"- {rid}"); } + + Console.WriteLine(); + Console.WriteLine("The RID for the current OS and CPU is:"); + var currentRid = Environment.GetCurrentRid(); + Console.WriteLine($"- {currentRid}"); } } \ No newline at end of file diff --git a/app/Build/Commands/UpdateMetadataCommands.cs b/app/Build/Commands/UpdateMetadataCommands.cs index a2cc4595..09592169 100644 --- a/app/Build/Commands/UpdateMetadataCommands.cs +++ b/app/Build/Commands/UpdateMetadataCommands.cs @@ -105,105 +105,99 @@ public sealed partial class UpdateMetadataCommands // Build the .NET project: // var pathApp = Environment.GetAIStudioDirectory(); - var rids = Environment.GetRidsForCurrentOS(); - foreach (var rid in rids) - { - Console.WriteLine("=============================="); - await this.UpdateArchitecture(rid); - - Console.Write($"- Start .NET build for '{rid.AsMicrosoftRid()}' ..."); - await this.ReadCommandOutput(pathApp, "dotnet", $"clean --configuration release --runtime {rid.AsMicrosoftRid()}"); - var dotnetBuildOutput = await this.ReadCommandOutput(pathApp, "dotnet", $"publish --configuration release --runtime {rid.AsMicrosoftRid()} --disable-build-servers --force"); - var dotnetBuildOutputLines = dotnetBuildOutput.Split([global::System.Environment.NewLine], StringSplitOptions.RemoveEmptyEntries); - var foundIssue = false; - foreach (var buildOutputLine in dotnetBuildOutputLines) - { - if(buildOutputLine.Contains(" error ") || buildOutputLine.Contains("#warning")) - { - if(!foundIssue) - { - foundIssue = true; - Console.WriteLine(); - Console.WriteLine("- Build has issues:"); - } - - Console.Write(" - "); - Console.WriteLine(buildOutputLine); - } - } - - if(foundIssue) - Console.WriteLine(); - else - { - Console.WriteLine(" completed successfully."); - } - - // - // Prepare the .NET artifact to be used by Tauri as sidecar: - // - var os = Environment.GetOS(); - var tauriSidecarArtifactName = rid switch - { - RID.WIN_X64 => "mindworkAIStudioServer-x86_64-pc-windows-msvc.exe", - RID.WIN_ARM64 => "mindworkAIStudioServer-aarch64-pc-windows-msvc.exe", - - RID.LINUX_X64 => "mindworkAIStudioServer-x86_64-unknown-linux-gnu", - RID.LINUX_ARM64 => "mindworkAIStudioServer-aarch64-unknown-linux-gnu", - - RID.OSX_ARM64 => "mindworkAIStudioServer-aarch64-apple-darwin", - RID.OSX_X64 => "mindworkAIStudioServer-x86_64-apple-darwin", - - _ => string.Empty, - }; - - if (string.IsNullOrWhiteSpace(tauriSidecarArtifactName)) - { - Console.WriteLine($"- Error: Unsupported rid '{rid.AsMicrosoftRid()}'."); - return; - } + var rid = Environment.GetCurrentRid(); - var dotnetArtifactPath = Path.Combine(pathApp, "bin", "dist"); - if(!Directory.Exists(dotnetArtifactPath)) - Directory.CreateDirectory(dotnetArtifactPath); - - var dotnetArtifactFilename = os switch + Console.WriteLine("=============================="); + await this.UpdateArchitecture(rid); + + Console.Write($"- Start .NET build for '{rid.AsMicrosoftRid()}' ..."); + await this.ReadCommandOutput(pathApp, "dotnet", $"clean --configuration release --runtime {rid.AsMicrosoftRid()}"); + var dotnetBuildOutput = await this.ReadCommandOutput(pathApp, "dotnet", $"publish --configuration release --runtime {rid.AsMicrosoftRid()} --disable-build-servers --force"); + var dotnetBuildOutputLines = dotnetBuildOutput.Split([global::System.Environment.NewLine], StringSplitOptions.RemoveEmptyEntries); + var foundIssue = false; + foreach (var buildOutputLine in dotnetBuildOutputLines) + { + if(buildOutputLine.Contains(" error ") || buildOutputLine.Contains("#warning")) { - "windows" => "mindworkAIStudio.exe", - _ => "mindworkAIStudio", - }; - - var dotnetPublishedPath = Path.Combine(pathApp, "bin", "release", Environment.DOTNET_VERSION, rid.AsMicrosoftRid(), "publish", dotnetArtifactFilename); - var finalDestination = Path.Combine(dotnetArtifactPath, tauriSidecarArtifactName); - - if(File.Exists(dotnetPublishedPath)) - Console.WriteLine("- Published .NET artifact found."); - else - { - Console.WriteLine($"- Error: Published .NET artifact not found: '{dotnetPublishedPath}'."); - return; - } + if(!foundIssue) + { + foundIssue = true; + Console.WriteLine(); + Console.WriteLine("- Build has issues:"); + } - Console.Write($"- Move the .NET artifact to the Tauri sidecar destination ..."); - try - { - File.Move(dotnetPublishedPath, finalDestination, true); - Console.WriteLine(" done."); + Console.Write(" - "); + Console.WriteLine(buildOutputLine); } - catch (Exception e) - { - Console.WriteLine(" failed."); - Console.WriteLine($" - Error: {e.Message}"); - } - + } + + if(foundIssue) Console.WriteLine(); + else + { + Console.WriteLine(" completed successfully."); + } + + // + // Prepare the .NET artifact to be used by Tauri as sidecar: + // + var os = Environment.GetOS(); + var tauriSidecarArtifactName = rid switch + { + RID.WIN_X64 => "mindworkAIStudioServer-x86_64-pc-windows-msvc.exe", + RID.WIN_ARM64 => "mindworkAIStudioServer-aarch64-pc-windows-msvc.exe", + + RID.LINUX_X64 => "mindworkAIStudioServer-x86_64-unknown-linux-gnu", + RID.LINUX_ARM64 => "mindworkAIStudioServer-aarch64-unknown-linux-gnu", + + RID.OSX_ARM64 => "mindworkAIStudioServer-aarch64-apple-darwin", + RID.OSX_X64 => "mindworkAIStudioServer-x86_64-apple-darwin", + + _ => string.Empty, + }; + + if (string.IsNullOrWhiteSpace(tauriSidecarArtifactName)) + { + Console.WriteLine($"- Error: Unsupported rid '{rid.AsMicrosoftRid()}'."); + return; + } + + var dotnetArtifactPath = Path.Combine(pathApp, "bin", "dist"); + if(!Directory.Exists(dotnetArtifactPath)) + Directory.CreateDirectory(dotnetArtifactPath); + + var dotnetArtifactFilename = os switch + { + "windows" => "mindworkAIStudio.exe", + _ => "mindworkAIStudio", + }; + + var dotnetPublishedPath = Path.Combine(pathApp, "bin", "release", Environment.DOTNET_VERSION, rid.AsMicrosoftRid(), "publish", dotnetArtifactFilename); + var finalDestination = Path.Combine(dotnetArtifactPath, tauriSidecarArtifactName); + + if(File.Exists(dotnetPublishedPath)) + Console.WriteLine("- Published .NET artifact found."); + else + { + Console.WriteLine($"- Error: Published .NET artifact not found: '{dotnetPublishedPath}'."); + return; } + Console.Write($"- Move the .NET artifact to the Tauri sidecar destination ..."); + try + { + File.Move(dotnetPublishedPath, finalDestination, true); + Console.WriteLine(" done."); + } + catch (Exception e) + { + Console.WriteLine(" failed."); + Console.WriteLine($" - Error: {e.Message}"); + } + // // Build the Rust project / runtime: // - - Console.WriteLine("=============================="); Console.WriteLine("- Start building the Rust runtime ..."); var pathRuntime = Environment.GetRustRuntimeDirectory(); diff --git a/app/Build/Commands/UpdateWebAssetsCommand.cs b/app/Build/Commands/UpdateWebAssetsCommand.cs index f56dc795..d044a256 100644 --- a/app/Build/Commands/UpdateWebAssetsCommand.cs +++ b/app/Build/Commands/UpdateWebAssetsCommand.cs @@ -17,7 +17,7 @@ public sealed class UpdateWebAssetsCommand Console.WriteLine("========================="); Console.Write("- Updating web assets ..."); - var rid = Environment.GetRidsForCurrentOS().First(); + var rid = Environment.GetCurrentRid(); var cwd = Environment.GetAIStudioDirectory(); var contentPath = Path.Join(cwd, "bin", "release", Environment.DOTNET_VERSION, rid.AsMicrosoftRid(), "publish", "wwwroot", "_content"); var isMudBlazorDirectoryPresent = Directory.Exists(Path.Join(contentPath, "MudBlazor")); diff --git a/app/Build/Tools/Environment.cs b/app/Build/Tools/Environment.cs index a86000f4..f03ff354 100644 --- a/app/Build/Tools/Environment.cs +++ b/app/Build/Tools/Environment.cs @@ -76,4 +76,38 @@ public static class Environment Console.WriteLine($"Error: Unsupported OS '{RuntimeInformation.OSDescription}'"); return []; } + + public static RID GetCurrentRid() + { + var arch = RuntimeInformation.ProcessArchitecture; + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + return arch switch + { + Architecture.X64 => RID.WIN_X64, + Architecture.Arm64 => RID.WIN_ARM64, + + _ => RID.NONE, + }; + + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + return arch switch + { + Architecture.X64 => RID.OSX_X64, + Architecture.Arm64 => RID.OSX_ARM64, + + _ => RID.NONE, + }; + + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + return arch switch + { + Architecture.X64 => RID.LINUX_X64, + Architecture.Arm64 => RID.LINUX_ARM64, + + _ => RID.NONE, + }; + + Console.WriteLine($"Error: Unsupported OS '{RuntimeInformation.OSDescription}'"); + return RID.NONE; + } } \ No newline at end of file