diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 562886b2..8e350994 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,13 +3,13 @@ "isRoot": true, "tools": { "strawberryshake.tools": { - "version": "13.4.0", + "version": "13.7.0", "commands": [ "dotnet-graphql" ] }, "dotnet-ef": { - "version": "7.0.9", + "version": "8.0.0", "commands": [ "dotnet-ef" ] diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index a51403eb..76eeb9d6 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -32,7 +32,7 @@ jobs: - name: Update dotnet uses: actions/setup-dotnet@v1 with: - dotnet-version: '7.0.x' + dotnet-version: '8.0.x' - name: Checkout repository uses: actions/checkout@v2 diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 0aaa9bdd..cbaf7654 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -15,7 +15,7 @@ jobs: - name: update dotnet core sdk uses: actions/setup-dotnet@v1 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: dotnet restore (first try) run: dotnet restore --ignore-failed-sources - name: dotnet restore (second try) @@ -35,7 +35,7 @@ jobs: - name: update dotnet core sdk uses: actions/setup-dotnet@v1 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: dotnet restore (first try) run: dotnet restore --ignore-failed-sources - name: dotnet restore (second try) @@ -70,7 +70,7 @@ jobs: - name: update dotnet core sdk uses: actions/setup-dotnet@v1 with: - dotnet-version: 7.0.x + dotnet-version: 8.0.x - name: dotnet restore (first try) run: dotnet restore --ignore-failed-sources - name: dotnet restore (second try) diff --git a/Clients/CirrusCiClient/CirrusCiClient.csproj b/Clients/CirrusCiClient/CirrusCiClient.csproj index 83904cec..35b18f21 100644 --- a/Clients/CirrusCiClient/CirrusCiClient.csproj +++ b/Clients/CirrusCiClient/CirrusCiClient.csproj @@ -1,6 +1,6 @@ - net7.0 + net8.0 enable false @@ -8,9 +8,9 @@ - - - - + + + + \ No newline at end of file diff --git a/Clients/CompatApiClient/CompatApiClient.csproj b/Clients/CompatApiClient/CompatApiClient.csproj index 50d5e0da..8dcd4401 100644 --- a/Clients/CompatApiClient/CompatApiClient.csproj +++ b/Clients/CompatApiClient/CompatApiClient.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 enable @@ -14,10 +14,10 @@ - - + + - + diff --git a/Clients/GithubClient/GithubClient.csproj b/Clients/GithubClient/GithubClient.csproj index 7dc51625..6a75bf67 100644 --- a/Clients/GithubClient/GithubClient.csproj +++ b/Clients/GithubClient/GithubClient.csproj @@ -1,12 +1,12 @@ - net7.0 + net8.0 latest enable - - + + diff --git a/Clients/IrdLibraryClient/IrdLibraryClient.csproj b/Clients/IrdLibraryClient/IrdLibraryClient.csproj index acc5084c..301f731a 100644 --- a/Clients/IrdLibraryClient/IrdLibraryClient.csproj +++ b/Clients/IrdLibraryClient/IrdLibraryClient.csproj @@ -1,13 +1,13 @@ - net7.0 + net8.0 latest enable - + diff --git a/Clients/MediafireClient/MediafireClient.csproj b/Clients/MediafireClient/MediafireClient.csproj index 55470b37..1e501172 100644 --- a/Clients/MediafireClient/MediafireClient.csproj +++ b/Clients/MediafireClient/MediafireClient.csproj @@ -1,6 +1,6 @@ - net7.0 + net8.0 enable diff --git a/Clients/OneDriveClient/OneDriveClient.csproj b/Clients/OneDriveClient/OneDriveClient.csproj index 55470b37..1e501172 100644 --- a/Clients/OneDriveClient/OneDriveClient.csproj +++ b/Clients/OneDriveClient/OneDriveClient.csproj @@ -1,6 +1,6 @@ - net7.0 + net8.0 enable diff --git a/Clients/PsnClient/PsnClient.csproj b/Clients/PsnClient/PsnClient.csproj index f7647ba6..2cb1ee58 100644 --- a/Clients/PsnClient/PsnClient.csproj +++ b/Clients/PsnClient/PsnClient.csproj @@ -1,6 +1,6 @@  - net7.0 + net8.0 enable @@ -10,8 +10,8 @@ - - + + diff --git a/Clients/YandexDiskClient/YandexDiskClient.csproj b/Clients/YandexDiskClient/YandexDiskClient.csproj index 55470b37..1e501172 100644 --- a/Clients/YandexDiskClient/YandexDiskClient.csproj +++ b/Clients/YandexDiskClient/YandexDiskClient.csproj @@ -1,6 +1,6 @@ - net7.0 + net8.0 enable diff --git a/CompatBot/Commands/Pr.cs b/CompatBot/Commands/Pr.cs index bccc122b..50fbbd88 100644 --- a/CompatBot/Commands/Pr.cs +++ b/CompatBot/Commands/Pr.cs @@ -2,7 +2,6 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -using CirrusCiClient; using CompatApiClient.Utils; using CompatBot.Commands.Attributes; using CompatBot.Utils; @@ -12,7 +11,8 @@ using DSharpPlus.CommandsNext; using DSharpPlus.CommandsNext.Attributes; using DSharpPlus.Entities; -using TaskStatus = CirrusCiClient.Generated.TaskStatus; +using Microsoft.TeamFoundation.Build.WebApi; +using BuildStatus = Microsoft.TeamFoundation.Build.WebApi.BuildStatus; namespace CompatBot.Commands; @@ -134,13 +134,13 @@ public static async Task LinkPrBuild(DiscordClient client, DiscordMessage messag string? macDownloadText = null; string? buildTime = null; - if (prInfo.Head?.Sha is string commit) + if (azureClient != null && prInfo.Head?.Sha is string commit) try { windowsDownloadText = "⏳ Pending..."; linuxDownloadText = "⏳ Pending..."; macDownloadText = "⏳ Pending..."; - var latestBuild = await CirrusCi.GetPrBuildInfoAsync(commit, prInfo.MergedAt?.DateTime, pr, Config.Cts.Token).ConfigureAwait(false); + var latestBuild = await azureClient.GetPrBuildInfoAsync(commit, prInfo.MergedAt?.DateTime, pr, Config.Cts.Token).ConfigureAwait(false); if (latestBuild == null) { if (state == "Open") @@ -155,20 +155,23 @@ public static async Task LinkPrBuild(DiscordClient client, DiscordMessage messag { bool shouldHaveArtifacts = false; - if ((latestBuild.WindowsBuild?.Status is TaskStatus.Completed - || latestBuild.LinuxBuild?.Status is TaskStatus.Completed - || latestBuild.MacBuild?.Status is TaskStatus.Completed) - && latestBuild.FinishTime.HasValue) + if (latestBuild is + { + Status: BuildStatus.Completed, + Result: BuildResult.Succeeded or BuildResult.PartiallySucceeded, + FinishTime: not null + }) { buildTime = $"Built on {latestBuild.FinishTime:u} ({(DateTime.UtcNow - latestBuild.FinishTime.Value).AsTimeDeltaDescription()} ago)"; shouldHaveArtifacts = true; } // Check for subtask errors (win/lin/mac) - if (latestBuild.WindowsBuild?.Status is TaskStatus.Aborted or TaskStatus.Failed or TaskStatus.Skipped) + if (latestBuild.Result is BuildResult.Failed or BuildResult.Canceled) { - windowsDownloadText = $"❌ {latestBuild.WindowsBuild?.Status}"; + windowsDownloadText = $"❌ {latestBuild.Result}"; } + /* if (latestBuild.LinuxBuild?.Status is TaskStatus.Aborted or TaskStatus.Failed or TaskStatus.Skipped) { linuxDownloadText = $"❌ {latestBuild.LinuxBuild?.Status}"; @@ -177,17 +180,20 @@ public static async Task LinkPrBuild(DiscordClient client, DiscordMessage messag { macDownloadText = $"❌ {latestBuild.MacBuild?.Status}"; } + */ // Check estimated time for pending builds - if (latestBuild.WindowsBuild?.Status is TaskStatus.Executing - || latestBuild.LinuxBuild?.Status is TaskStatus.Executing - || latestBuild.MacBuild?.Status is TaskStatus.Executing) + if (latestBuild is { Status: BuildStatus.InProgress, StartTime: not null }) { - var estimatedCompletionTime = latestBuild.StartTime + (await CirrusCi.GetPipelineDurationAsync(Config.Cts.Token).ConfigureAwait(false)).Mean; + var estimatedCompletionTime = latestBuild.StartTime.Value + (await azureClient.GetPipelineDurationAsync(Config.Cts.Token).ConfigureAwait(false)).Mean; var estimatedTime = TimeSpan.FromMinutes(1); if (estimatedCompletionTime > DateTime.UtcNow) estimatedTime = estimatedCompletionTime - DateTime.UtcNow; + windowsDownloadText = $"⏳ Pending in {estimatedTime.AsTimeDeltaDescription()}..."; + linuxDownloadText = windowsDownloadText; + macDownloadText = windowsDownloadText; + /* if (latestBuild.WindowsBuild?.Status is TaskStatus.Executing) { windowsDownloadText = $"⏳ Pending in {estimatedTime.AsTimeDeltaDescription()}..."; @@ -200,13 +206,14 @@ public static async Task LinkPrBuild(DiscordClient client, DiscordMessage messag { macDownloadText = $"⏳ Pending in {estimatedTime.AsTimeDeltaDescription()}..."; } + */ } // windows build - var name = latestBuild.WindowsBuild?.Filename ?? "Windows PR Build"; + var name = latestBuild.WindowsFilename ?? "Windows PR Build"; name = name.Replace("rpcs3-", "").Replace("_win64", ""); - if (!string.IsNullOrEmpty(latestBuild.WindowsBuild?.DownloadLink)) - windowsDownloadText = $"[⏬ {name}]({latestBuild.WindowsBuild?.DownloadLink})"; + if (!string.IsNullOrEmpty(latestBuild.WindowsBuildDownloadLink)) + windowsDownloadText = $"[⏬ {name}]({latestBuild.WindowsBuildDownloadLink})"; else if (shouldHaveArtifacts) { if (latestBuild.FinishTime.HasValue && (DateTime.UtcNow - latestBuild.FinishTime.Value).TotalDays > 30) @@ -214,10 +221,10 @@ public static async Task LinkPrBuild(DiscordClient client, DiscordMessage messag } // linux build - name = latestBuild.LinuxBuild?.Filename ?? "Linux PR Build"; + name = latestBuild.LinuxFilename ?? "Linux PR Build"; name = name.Replace("rpcs3-", "").Replace("_linux64", ""); - if (!string.IsNullOrEmpty(latestBuild.LinuxBuild?.DownloadLink)) - linuxDownloadText = $"[⏬ {name}]({latestBuild.LinuxBuild?.DownloadLink})"; + if (!string.IsNullOrEmpty(latestBuild.LinuxBuildDownloadLink)) + linuxDownloadText = $"[⏬ {name}]({latestBuild.LinuxBuildDownloadLink})"; else if (shouldHaveArtifacts) { if (latestBuild.FinishTime.HasValue && (DateTime.UtcNow - latestBuild.FinishTime.Value).TotalDays > 30) @@ -225,10 +232,10 @@ public static async Task LinkPrBuild(DiscordClient client, DiscordMessage messag } // mac build - name = latestBuild.MacBuild?.Filename ?? "Mac PR Build"; + name = latestBuild.MacFilename ?? "Mac PR Build"; name = name.Replace("rpcs3-", "").Replace("_macos", ""); - if (!string.IsNullOrEmpty(latestBuild.MacBuild?.DownloadLink)) - macDownloadText = $"[⏬ {name}]({latestBuild.MacBuild?.DownloadLink})"; + if (!string.IsNullOrEmpty(latestBuild.MacBuildDownloadLink)) + macDownloadText = $"[⏬ {name}]({latestBuild.MacBuildDownloadLink})"; else if (shouldHaveArtifacts) { if (latestBuild.FinishTime.HasValue && (DateTime.UtcNow - latestBuild.FinishTime.Value).TotalDays > 30) @@ -236,7 +243,7 @@ public static async Task LinkPrBuild(DiscordClient client, DiscordMessage messag } // Neatify PR's with missing builders - if (latestBuild.WindowsBuild?.Status is null) + /*if (latestBuild.WindowsBuild?.Status is null) { windowsDownloadText = null; } @@ -247,9 +254,7 @@ public static async Task LinkPrBuild(DiscordClient client, DiscordMessage messag if (latestBuild.MacBuild?.Status is null) { macDownloadText = null; - } - - + }*/ } } catch (Exception e) diff --git a/CompatBot/Commands/Sudo.Bot.cs b/CompatBot/Commands/Sudo.Bot.cs index 8301832f..a463d5a1 100644 --- a/CompatBot/Commands/Sudo.Bot.cs +++ b/CompatBot/Commands/Sudo.Bot.cs @@ -87,7 +87,7 @@ await ctx.Channel.SendMessageAsync(ctx.Channel.IsPrivate ).ConfigureAwait(false); Config.Log.Info($"Shutting down by request from {ctx.User.Username}#{ctx.User.Discriminator}"); Config.InMemorySettings["shutdown"] = "true"; - Config.Cts.Cancel(); + await Config.Cts.CancelAsync().ConfigureAwait(false); } [Command("status")] diff --git a/CompatBot/CompatBot.csproj b/CompatBot/CompatBot.csproj index 9f95c26c..03d9ac18 100644 --- a/CompatBot/CompatBot.csproj +++ b/CompatBot/CompatBot.csproj @@ -1,7 +1,7 @@  Exe - net7.0 + net8.0 true CompatBot c2e6548b-b215-4a18-a010-958ef294b310 @@ -39,36 +39,36 @@ - - - - - + + + + + - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - + + + + - - - + + + - - - + + + diff --git a/CompatBot/Program.cs b/CompatBot/Program.cs index 47fc3a3a..cf888572 100644 --- a/CompatBot/Program.cs +++ b/CompatBot/Program.cs @@ -6,7 +6,6 @@ using System.Text; using System.Threading; using System.Threading.Tasks; -using CirrusCiClient; using CompatBot.Commands; using CompatBot.Commands.Converters; using CompatBot.Database; @@ -122,7 +121,6 @@ internal static async Task Main(string[] args) CompatList.ImportCompatListAsync(), Config.GetAzureDevOpsClient().GetPipelineDurationAsync(Config.Cts.Token), Config.GetCurrentGitRevisionAsync(Config.Cts.Token), - CirrusCi.GetPipelineDurationAsync(Config.Cts.Token), Sudo.Bot.UpdateCheckScheduledAsync(Config.Cts.Token) ); diff --git a/CompatBot/Utils/ResultFormatters/LogParserResultFormatter.GeneralNotesSection.cs b/CompatBot/Utils/ResultFormatters/LogParserResultFormatter.GeneralNotesSection.cs index f4101d2b..a1af0613 100644 --- a/CompatBot/Utils/ResultFormatters/LogParserResultFormatter.GeneralNotesSection.cs +++ b/CompatBot/Utils/ResultFormatters/LogParserResultFormatter.GeneralNotesSection.cs @@ -255,7 +255,7 @@ private static async Task BuildNotesSectionAsync(DiscordEmbedBuilder builder, Lo if (items["os_type"] == "Windows" && Version.TryParse(items["os_version"], out var winVersion) - && (winVersion is { Major: < 10 } or { Build: < 19045 or (> 20000 and < 22000) })) + && (winVersion is { Major: < 10 } or { Build: < 19045 or (> 20000 and < 22621) })) notes.Add("⚠️ Please [upgrade your Windows](https://www.microsoft.com/en-us/software-download/windows11) to currently supported version"); var gpuInfo = items["gpu_info"] ?? items["discrete_gpu_info"]; @@ -265,12 +265,14 @@ private static async Task BuildNotesSectionAsync(DiscordEmbedBuilder builder, Lo { var family = intelMatch.Groups["gpu_family"].Value.TrimEnd(); var modelNumber = intelMatch.Groups["gpu_model_number"].Value; + if (modelNumber is null or "" && family.Split(' ', 2, StringSplitOptions.TrimEntries) is [string fp, string mp]) + (family, modelNumber) = (fp, mp); if (!string.IsNullOrEmpty(modelNumber) && modelNumber.StartsWith('P')) modelNumber = modelNumber[1..]; _ = int.TryParse(modelNumber, out var modelNumberInt); if (family is "UHD" or "Iris Plus" or "Iris Xe" || modelNumberInt is > 500 and < 1000) notes.Add("⚠️ Intel iGPUs are not officially supported; visual glitches are to be expected"); - else + else if (family is not "Arc") { notes.Add("⚠️ Intel iGPUs before Skylake do not fully comply with OpenGL 4.3"); supportedGpu = false; diff --git a/CompatBot/Utils/ResultFormatters/LogParserResultFormatter.cs b/CompatBot/Utils/ResultFormatters/LogParserResultFormatter.cs index c78f60c0..41476c0b 100644 --- a/CompatBot/Utils/ResultFormatters/LogParserResultFormatter.cs +++ b/CompatBot/Utils/ResultFormatters/LogParserResultFormatter.cs @@ -958,7 +958,7 @@ select m < 21390 => "10 Dev Build " + windowsVersion.Build, 21390 => "10 21H2 Insider", < 22000 => "11 Internal Build " + windowsVersion.Build, - 22000 => "11 21H2", + 22000 => "11 21H2", // deprecated < 22621 => "11 22H2 Insider Build " + windowsVersion.Build, 22621 => "11 22H2", 22631 => "11 23H2", diff --git a/Dockerfile b/Dockerfile index efd10e7c..4d21a9ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/dotnet/sdk:7.0-jammy AS base +FROM mcr.microsoft.com/dotnet/sdk:8.0-jammy AS base # Native libgdiplus dependencies RUN apt-get update diff --git a/HomoglyphConverter/HomoglyphConverter.csproj b/HomoglyphConverter/HomoglyphConverter.csproj index c85e6bb0..372d377f 100644 --- a/HomoglyphConverter/HomoglyphConverter.csproj +++ b/HomoglyphConverter/HomoglyphConverter.csproj @@ -1,7 +1,7 @@ - net7.0 + net8.0 latest enable false diff --git a/HomoglyphConverter/confusables.txt b/HomoglyphConverter/confusables.txt index 327a5f32..cf73eca0 100644 --- a/HomoglyphConverter/confusables.txt +++ b/HomoglyphConverter/confusables.txt @@ -1,11 +1,11 @@ # confusables.txt -# Date: 2022-08-26, 16:49:08 GMT -# © 2022 Unicode®, Inc. +# Date: 2023-08-11, 17:46:40 GMT +# © 2023 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html # # Unicode Security Mechanisms for UTS #39 -# Version: 15.0.0 +# Version: 15.1.0 # # For documentation and usage, see https://www.unicode.org/reports/tr39 # @@ -349,8 +349,8 @@ A4FA ; 002E 002E ; MA # ( ꓺ → .. ) LISU LETTER TONE MYA CYA → FULL STOP, F A6F4 ; A6F3 A6F3 ; MA #* ( ꛴ → ꛳꛳ ) BAMUM COLON → BAMUM FULL STOP, BAMUM FULL STOP # -30FB ; 00B7 ; MA #* ( ・ → · ) KATAKANA MIDDLE DOT → MIDDLE DOT # →•→ -FF65 ; 00B7 ; MA #* ( ・ → · ) HALFWIDTH KATAKANA MIDDLE DOT → MIDDLE DOT # →•→ +30FB ; 00B7 ; MA # ( ・ → · ) KATAKANA MIDDLE DOT → MIDDLE DOT # →•→ +FF65 ; 00B7 ; MA # ( ・ → · ) HALFWIDTH KATAKANA MIDDLE DOT → MIDDLE DOT # →•→ 16EB ; 00B7 ; MA #* ( ᛫ → · ) RUNIC SINGLE PUNCTUATION → MIDDLE DOT # 0387 ; 00B7 ; MA # ( · → · ) GREEK ANO TELEIA → MIDDLE DOT # 2E31 ; 00B7 ; MA #* ( ⸱ → · ) WORD SEPARATOR MIDDLE DOT → MIDDLE DOT # diff --git a/README.md b/README.md index 0f1c275c..9a1ac855 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ You can read the design and implementation notes by visiting the folders in the Development Requirements ------------------------ -* [.NET 7.0 SDK](https://dotnet.microsoft.com/download) or newer +* [.NET 8.0 SDK](https://dotnet.microsoft.com/download) or newer * Any text editor, but here are some recommends: * [Visual Studio](https://visualstudio.microsoft.com/) (Windows and Mac only, has free Community edition) * [Visual Studio Code](https://code.visualstudio.com/) (cross-platform, free) @@ -17,7 +17,7 @@ Development Requirements Runtime Requirements -------------------- -* [.NET 7.0 SDK](https://dotnet.microsoft.com/download) or newer to run from sources +* [.NET 8.0 SDK](https://dotnet.microsoft.com/download) or newer to run from sources * bot needs `dotnet` command to be available (i.e. alias for the Snap package) * Optionally Google API credentials to access Google Drive: * Create new project in the [Google Cloud Resource Manager](https://console.developers.google.com/cloud-resource-manager) diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index c2ec51f6..ec718351 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -1,18 +1,18 @@  - net7.0 + net8.0 false - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive