diff --git a/UnoCheck/CheckCommand.cs b/UnoCheck/CheckCommand.cs index 987ebfcc..cd834af2 100644 --- a/UnoCheck/CheckCommand.cs +++ b/UnoCheck/CheckCommand.cs @@ -314,7 +314,7 @@ public override async Task ExecuteAsync(CommandContext context, CheckSettin private async Task NeedsToolUpdateAsync(CheckSettings settings) { - if (settings.Manifest is not null && !settings.CI) + if ( (settings.Manifest is not null && !settings.CI) || Debugger.IsAttached) { return false; } diff --git a/UnoCheck/Checkups/DotNetWorkloadsCheckup.cs b/UnoCheck/Checkups/DotNetWorkloadsCheckup.cs index e54bb9b4..bd26f537 100644 --- a/UnoCheck/Checkups/DotNetWorkloadsCheckup.cs +++ b/UnoCheck/Checkups/DotNetWorkloadsCheckup.cs @@ -24,7 +24,7 @@ public DotNetWorkloadsCheckup(SharedState sharedState, string sdkVersion, Manife SdkRoot = dotnet.DotNetSdkLocation.FullName; SdkVersion = sdkVersion; - RequiredWorkloads = requiredWorkloads; + RequiredWorkloads = requiredWorkloads.Where(w => w.SupportedPlatforms?.Contains(Util.Platform) ?? false).ToArray(); NuGetPackageSources = nugetPackageSources; } @@ -68,7 +68,7 @@ public override async Task Examine(SharedState history) var missingWorkloads = new List(); - foreach (var rp in RequiredWorkloads.Where(w => w.SupportedPlatforms?.Contains(Util.Platform) ?? false)) + foreach (var rp in RequiredWorkloads) { var versionParts = rp.Version.Split("/", StringSplitOptions.None); var workloadVersion = versionParts.First(); diff --git a/UnoCheck/Checkups/OpenJdkCheckup.cs b/UnoCheck/Checkups/OpenJdkCheckup.cs index fa80c1fa..6b6716b0 100644 --- a/UnoCheck/Checkups/OpenJdkCheckup.cs +++ b/UnoCheck/Checkups/OpenJdkCheckup.cs @@ -6,6 +6,7 @@ using System.IO; using System.Linq; using System.Runtime.InteropServices; +using System.Security.Policy; using System.Text.RegularExpressions; using System.Threading.Tasks; using Xamarin.Android.Tools; @@ -43,7 +44,7 @@ public bool RequireExact static string PlatformJavaCExtension => Util.IsWindows ? ".exe" : string.Empty; public override bool IsPlatformSupported(Platform platform) - => platform == Platform.OSX || platform == Platform.Windows; + => platform == Platform.OSX || platform == Platform.Windows || platform == Platform.Linux; public override bool ShouldExamine(SharedState history) => Manifest?.Check?.OpenJdk != null; @@ -87,7 +88,8 @@ public override Task Examine(SharedState history) { Environment.SetEnvironmentVariable("JAVA_HOME", jdk.Directory.FullName, EnvironmentVariableTarget.Machine); ReportStatus($"Set Environment Variable: JAVA_HOME={jdk.Directory.FullName}", Status.Ok); - } catch { } + } + catch { } } } else @@ -97,10 +99,18 @@ public override Task Examine(SharedState history) if (ok) return Task.FromResult(DiagnosticResult.Ok(this)); - var url = Manifest?.Check?.OpenJdk?.Url; - return Task.FromResult(new DiagnosticResult(Status.Error, this, - new Suggestion("Install OpenJDK11", - new BootsSolution(url, "Download and Install Microsoft OpenJDK 11")))); + if (Util.IsLinux) + { + return Task.FromResult(new DiagnosticResult(Status.Error, this, + new Suggestion("Install OpenJDK11", "OpenJDK 11 is missing, follow the installation instructions here: https://learn.microsoft.com/en-us/java/openjdk/install#install-on-ubuntu"))); + } + else + { + var url = Manifest?.Check?.OpenJdk?.Url; + return Task.FromResult(new DiagnosticResult(Status.Error, this, + new Suggestion("Install OpenJDK11", + new BootsSolution(url, "Download and Install Microsoft OpenJDK 11")))); + } } IEnumerable FindJdks() @@ -130,7 +140,8 @@ IEnumerable FindJdks() SearchDirectoryForJdks(paths, Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Microsoft", "Jdk"), true); - } else if (Util.IsMac) + } + else if (Util.IsMac) { var ms11Dir = Path.Combine("/Library", "Java", "JavaVirtualMachines", "microsoft-11.jdk", "Contents", "Home"); SearchDirectoryForJdks(paths, ms11Dir, true); @@ -163,7 +174,7 @@ IEnumerable FindJdks() SearchDirectoryForJdks(paths, Environment.GetEnvironmentVariable("JAVA_HOME") ?? string.Empty, true); SearchDirectoryForJdks(paths, Environment.GetEnvironmentVariable("JDK_HOME") ?? string.Empty, true); - var environmentPaths = Environment.GetEnvironmentVariable("PATH")?.Split(';') ?? Array.Empty(); + var environmentPaths = Environment.GetEnvironmentVariable("PATH")?.Split(Path.PathSeparator) ?? Array.Empty(); foreach (var envPath in environmentPaths) { @@ -171,6 +182,29 @@ IEnumerable FindJdks() SearchDirectoryForJdks(paths, envPath, true); } + if (Util.IsLinux) + { + var r = ShellProcessRunner.Run("whereis", "-b javac"); + + if ( + r.Success + && r.StandardOutput.Count > 0 + && r.StandardOutput[0].Split(" ").Skip(1).FirstOrDefault() is { } javacBinPath) + { + var readlinkResult = ShellProcessRunner.Run("readlink", "-f " + javacBinPath); + + if ( + readlinkResult.Success + && r.StandardOutput.Count > 0) + { + if (TryGetJavaJdkInfo(readlinkResult.StandardOutput[0], out var jdkInfo)) + { + paths.Add(jdkInfo); + } + } + } + } + return paths .GroupBy(i => i.JavaC.FullName) .Select(g => g.First()); diff --git a/UnoCheck/DotNet/DotNetWorkloadManager.cs b/UnoCheck/DotNet/DotNetWorkloadManager.cs index f6355c4d..f1f97c7e 100644 --- a/UnoCheck/DotNet/DotNetWorkloadManager.cs +++ b/UnoCheck/DotNet/DotNetWorkloadManager.cs @@ -67,10 +67,10 @@ public async Task Install(Manifest.DotNetWorkload[] workloads) string WriteRollbackFile(Manifest.DotNetWorkload[] workloads) { - var workloadRolback = GetInstalledWorkloadManifestIdsAndVersions(); + var workloadRollback = GetInstalledWorkloadManifestIdsAndVersions(); foreach (var workload in workloads) - workloadRolback[workload.WorkloadManifestId] = workload.Version; + workloadRollback[workload.WorkloadManifestId] = workload.Version; var json = new StringBuilder(); json.AppendLine("{"); diff --git a/UnoCheck/Manifest/Urls.cs b/UnoCheck/Manifest/Urls.cs index d65b607e..c12d753c 100644 --- a/UnoCheck/Manifest/Urls.cs +++ b/UnoCheck/Manifest/Urls.cs @@ -23,6 +23,9 @@ public partial class Urls [JsonProperty("linux", NullValueHandling = NullValueHandling.Ignore)] public Uri Linux { get; set; } + [JsonProperty("linuxArm64", NullValueHandling = NullValueHandling.Ignore)] + public Uri LinuxArm64 { get; set; } + public Uri Get(string version, Platform? platform = default) { var uri = For(platform ?? Util.Platform)?.ToString(); @@ -49,7 +52,9 @@ Uri For(Platform platform) : (Util.Is64 ? Win64 ?? Win : Win), - Platform.Linux => Linux, + Platform.Linux => Util.IsArm64 + ? (LinuxArm64 ?? Linux) + : Linux, _ => Win }; } diff --git a/manifests/uno.ui.manifest.json b/manifests/uno.ui.manifest.json index 5a378a17..ef716f30 100644 --- a/manifests/uno.ui.manifest.json +++ b/manifests/uno.ui.manifest.json @@ -15,10 +15,13 @@ "openjdk": { "version": "11.0", "urls": { + // Sources https://learn.microsoft.com/en-us/java/openjdk/download#openjdk-11 "win64": "https://aka.ms/download-jdk/microsoft-jdk-$(OPENJDK_VERSION)-windows-x64.msi", "winArm64": "https://aka.ms/download-jdk/microsoft-jdk-$(OPENJDK_VERSION)-windows-aarch64.msi", "osx": "https://aka.ms/download-jdk/microsoft-jdk-$(OPENJDK_VERSION)-macos-x64.pkg", - "osxArm64": "https://aka.ms/download-jdk/microsoft-jdk-$(OPENJDK_VERSION)-macos-aarch64.pkg" + "osxArm64": "https://aka.ms/download-jdk/microsoft-jdk-$(OPENJDK_VERSION)-macos-aarch64.pkg", + "linux": "https://aka.ms/download-jdk/microsoft-jdk-$(OPENJDK_VERSION)-linux-x64.tar.gz", + "linuxArm64": "https://aka.ms/download-jdk/microsoft-jdk-$(OPENJDK_VERSION)-linux-aarch64.tar.gz" } }, "xcode": {