From c80ef093dffccb1d5fc0c113047f0bf340561523 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2026 03:11:04 +0000 Subject: [PATCH 01/11] chore: Bump TUnit from 1.63.0 to 1.64.6 --- updated-dependencies: - dependency-name: TUnit dependency-version: 1.64.6 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- apps.Tests/apps.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.Tests/apps.Tests.csproj b/apps.Tests/apps.Tests.csproj index fa3c606..a9adc88 100644 --- a/apps.Tests/apps.Tests.csproj +++ b/apps.Tests/apps.Tests.csproj @@ -12,7 +12,7 @@ - + From 2bfb61ae7bdfb58f64b0a5f77562f7fa52f09eb6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 03:11:06 +0000 Subject: [PATCH 02/11] chore: Bump Microsoft.Extensions.DependencyInjection from 10.0.10 to 10.0.11 --- updated-dependencies: - dependency-name: Microsoft.Extensions.DependencyInjection dependency-version: 10.0.11 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- apps/apps.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/apps.csproj b/apps/apps.csproj index 947fee3..e7df738 100644 --- a/apps/apps.csproj +++ b/apps/apps.csproj @@ -35,7 +35,7 @@ - + From b34b5f2ace575a94d15cce6a0175ae76718e07ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 03:12:10 +0000 Subject: [PATCH 03/11] chore: Bump System.CommandLine from 2.0.10 to 2.0.11 --- updated-dependencies: - dependency-name: System.CommandLine dependency-version: 2.0.11 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- apps/apps.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/apps.csproj b/apps/apps.csproj index 947fee3..a6a332a 100644 --- a/apps/apps.csproj +++ b/apps/apps.csproj @@ -43,7 +43,7 @@ - + From 4504bcc8438d0d09c8ca5817c65041773f3470b6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 03:12:27 +0000 Subject: [PATCH 04/11] chore: Bump System.Threading.RateLimiting from 10.0.10 to 10.0.11 --- updated-dependencies: - dependency-name: System.Threading.RateLimiting dependency-version: 10.0.11 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- apps/apps.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/apps.csproj b/apps/apps.csproj index 947fee3..2c0592d 100644 --- a/apps/apps.csproj +++ b/apps/apps.csproj @@ -44,7 +44,7 @@ - + From a88612d0b25b4e9e813323d3d4380c4425b2938d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Aug 2026 03:12:48 +0000 Subject: [PATCH 05/11] chore: Bump TUnit from 1.64.6 to 1.65.0 --- updated-dependencies: - dependency-name: TUnit dependency-version: 1.65.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- apps.Tests/apps.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.Tests/apps.Tests.csproj b/apps.Tests/apps.Tests.csproj index a9adc88..35a7e07 100644 --- a/apps.Tests/apps.Tests.csproj +++ b/apps.Tests/apps.Tests.csproj @@ -12,7 +12,7 @@ - + From ef28493f859001bfd335b473b6787428c488a308 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 10:16:49 +0000 Subject: [PATCH 06/11] chore: Bump Microsoft.Extensions.Http from 10.0.10 to 10.0.11 --- updated-dependencies: - dependency-name: Microsoft.Extensions.Http dependency-version: 10.0.11 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- apps/apps.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/apps.csproj b/apps/apps.csproj index 0587d2b..d3bf491 100644 --- a/apps/apps.csproj +++ b/apps/apps.csproj @@ -36,7 +36,7 @@ - + From 48e3cbde6db089d0dedb3faf6f00c73e87bf989b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 10:16:49 +0000 Subject: [PATCH 07/11] chore: Bump Microsoft.Extensions.Http.Resilience from 10.8.0 to 10.9.0 --- updated-dependencies: - dependency-name: Microsoft.Extensions.Http.Resilience dependency-version: 10.9.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- apps/apps.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/apps.csproj b/apps/apps.csproj index 0587d2b..45e42d2 100644 --- a/apps/apps.csproj +++ b/apps/apps.csproj @@ -37,7 +37,7 @@ - + From a3dabf9f162bed581a095421b7cfd75d3e0191e1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 19 Aug 2026 10:16:51 +0000 Subject: [PATCH 08/11] chore: Bump Microsoft.Extensions.Logging.Console from 10.0.10 to 10.0.11 --- updated-dependencies: - dependency-name: Microsoft.Extensions.Logging.Console dependency-version: 10.0.11 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- apps/apps.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/apps.csproj b/apps/apps.csproj index 0587d2b..7e923f6 100644 --- a/apps/apps.csproj +++ b/apps/apps.csproj @@ -38,7 +38,7 @@ - + From 15abc68fe33e1abc85650c44e4911915bb9920a3 Mon Sep 17 00:00:00 2001 From: Arash Shabbeh Date: Fri, 21 Aug 2026 22:45:58 +0300 Subject: [PATCH 09/11] fix(jetbrains): match plugin platform Marketplace compatible updates can select another OS or CPU artifact when platform selectors are omitted. Send the IntelliJ platform values with each build-aware request. --- VERSION | 2 +- .../Components/JetBrainsPluginScannerTests.cs | 46 ++++++++++++++++++ .../JetBrains/JetBrainsJsonContext.cs | 6 +++ .../JetBrains/JetBrainsPluginScanner.cs | 47 ++++++++++++++++++- 4 files changed, 99 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index fcd1e22..4bf7ee7 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.13-beta +0.0.14-beta diff --git a/apps.Tests/Components/JetBrainsPluginScannerTests.cs b/apps.Tests/Components/JetBrainsPluginScannerTests.cs index 9236a7b..5550047 100644 --- a/apps.Tests/Components/JetBrainsPluginScannerTests.cs +++ b/apps.Tests/Components/JetBrainsPluginScannerTests.cs @@ -1,4 +1,6 @@ using System.Net; +using System.Runtime.InteropServices; +using System.Text.Json; using apps.Components.JetBrains; using apps.Tests.Fakes; @@ -102,6 +104,50 @@ await Assert.That(() => JetBrainsPluginScanner.ParsePluginXml("not xml <")) .Throws(); } + [Test] + [Arguments(OS.MacOS, Architecture.Arm64, "macOS", "ARM64")] + [Arguments(OS.MacOS, Architecture.X64, "macOS", "X86_64")] + [Arguments(OS.Windows, Architecture.Arm64, "Windows", "ARM64")] + [Arguments(OS.Windows, Architecture.X64, "Windows", "X86_64")] + [Arguments(OS.Windows, Architecture.X86, "Windows", "X86")] + [Arguments(OS.Windows, Architecture.Arm, "Windows", "ARM32")] + [Arguments(OS.Windows, Architecture.Armv6, "Windows", "ARM32")] + [Arguments(OS.None, Architecture.Wasm, "Other", "OTHER")] + public async Task CreateCompatibleUpdateRequest_MapsMarketplacePlatform( + OS operatingSystem, + Architecture architecture, + string expectedOs, + string expectedArchitecture) + { + var request = JetBrainsPluginScanner.CreateCompatibleUpdateRequest( + "RD-262.9437.287", + ["com.intellij.platform.daemon"], + operatingSystem, + architecture); + + await Assert.That(request.Os).IsEqualTo(expectedOs); + await Assert.That(request.Arch).IsEqualTo(expectedArchitecture); + } + + [Test] + public async Task CreateCompatibleUpdateRequest_SerializesPlatformFilters() + { + var request = JetBrainsPluginScanner.CreateCompatibleUpdateRequest( + "RD-262.9437.287", + ["com.intellij.platform.daemon"], + OS.MacOS, + Architecture.Arm64); + + var json = JsonSerializer.Serialize(request, JetBrainsJsonContext.Default.JetBrainsCompatibleUpdateRequest); + using var document = JsonDocument.Parse(json); + var root = document.RootElement; + + await Assert.That(root.GetProperty("build").GetString()).IsEqualTo("RD-262.9437.287"); + await Assert.That(root.GetProperty("pluginXMLIds")[0].GetString()).IsEqualTo("com.intellij.platform.daemon"); + await Assert.That(root.GetProperty("os").GetString()).IsEqualTo("macOS"); + await Assert.That(root.GetProperty("arch").GetString()).IsEqualTo("ARM64"); + } + [Test] public async Task CheckAsync_NumericId_WhenRepoHasNewerVersion_SetsLatestAndUpdateAvailable() { diff --git a/apps/Components/JetBrains/JetBrainsJsonContext.cs b/apps/Components/JetBrains/JetBrainsJsonContext.cs index ad26787..23ed490 100644 --- a/apps/Components/JetBrains/JetBrainsJsonContext.cs +++ b/apps/Components/JetBrains/JetBrainsJsonContext.cs @@ -23,6 +23,12 @@ internal sealed class JetBrainsCompatibleUpdateRequest [JsonPropertyName("pluginXMLIds")] public required string[] PluginXmlIds { get; init; } + + [JsonPropertyName("os")] + public required string Os { get; init; } + + [JsonPropertyName("arch")] + public required string Arch { get; init; } } /// diff --git a/apps/Components/JetBrains/JetBrainsPluginScanner.cs b/apps/Components/JetBrains/JetBrainsPluginScanner.cs index 7511122..8d2c3aa 100644 --- a/apps/Components/JetBrains/JetBrainsPluginScanner.cs +++ b/apps/Components/JetBrains/JetBrainsPluginScanner.cs @@ -1,6 +1,7 @@ using System.IO.Compression; using System.Net.Http.Json; using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; using System.Threading.Channels; using System.Xml; @@ -184,7 +185,11 @@ public async IAsyncEnumerable ScanAsync([EnumeratorCancellation] try { using var client = httpClientFactory.CreateClient("jetbrains"); - var request = new JetBrainsCompatibleUpdateRequest { Build = build, PluginXmlIds = xmlIds! }; + var request = CreateCompatibleUpdateRequest( + build, + xmlIds!, + GetCurrentOperatingSystem(), + RuntimeInformation.ProcessArchitecture); using var content = JsonContent.Create(request, JetBrainsJsonContext.Default.JetBrainsCompatibleUpdateRequest); using var response = await client.PostAsync("/api/search/compatibleUpdates", content, cancellationToken).ConfigureAwait(false); response.EnsureSuccessStatusCode(); @@ -443,4 +448,44 @@ internal static (string? Id, string? Name, string? Version, string? DisplayId)? return (id, name, version, displayId); } + + internal static JetBrainsCompatibleUpdateRequest CreateCompatibleUpdateRequest( + string build, + string[] pluginXmlIds, + OS operatingSystem, + Architecture architecture) => + new() + { + Build = build, + PluginXmlIds = pluginXmlIds, + Os = operatingSystem switch + { + OS.MacOS => "macOS", + OS.Windows => "Windows", + _ => "Other" + }, + Arch = architecture switch + { + Architecture.X86 => "X86", + Architecture.X64 => "X86_64", + Architecture.Arm or Architecture.Armv6 => "ARM32", + Architecture.Arm64 => "ARM64", + _ => "OTHER" + } + }; + + private static OS GetCurrentOperatingSystem() + { + if (OperatingSystem.IsMacOS()) + { + return OS.MacOS; + } + + if (OperatingSystem.IsWindows()) + { + return OS.Windows; + } + + return OS.None; + } } \ No newline at end of file From 7d4a53ff124b80901a2ffb4fb6f83b4f93415640 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Aug 2026 19:53:59 +0000 Subject: [PATCH 10/11] chore: Bump TUnit from 1.65.0 to 1.65.38 --- updated-dependencies: - dependency-name: TUnit dependency-version: 1.65.38 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- apps.Tests/apps.Tests.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.Tests/apps.Tests.csproj b/apps.Tests/apps.Tests.csproj index 35a7e07..c5c65b0 100644 --- a/apps.Tests/apps.Tests.csproj +++ b/apps.Tests/apps.Tests.csproj @@ -12,7 +12,7 @@ - + From 5e0a143be290e01c9c84273caa85e5f51e550664 Mon Sep 17 00:00:00 2001 From: Arash Shabbeh Date: Fri, 21 Aug 2026 23:20:58 +0300 Subject: [PATCH 11/11] fix(security): resolve scan alerts Require the patched .NET 10.0.11 runtime and explicitly handle expected progress timer cancellation reported by CodeQL. --- apps/CheckOrchestrator.cs | 3 ++- apps/ScanOrchestrator.cs | 3 ++- apps/apps.csproj | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/CheckOrchestrator.cs b/apps/CheckOrchestrator.cs index c55f4b0..b9bd04f 100644 --- a/apps/CheckOrchestrator.cs +++ b/apps/CheckOrchestrator.cs @@ -74,8 +74,9 @@ public sealed class CheckOrchestrator(IEnumerable scanners, LiveProgre { await timerTask.ConfigureAwait(false); } - catch (OperationCanceledException) + catch (OperationCanceledException) when (timerCts.IsCancellationRequested) { + logger.LogDebug("Check progress timer cancelled"); } var updates = checkedApps.Count(c => c.HasUpdate); diff --git a/apps/ScanOrchestrator.cs b/apps/ScanOrchestrator.cs index 753e342..7b2503c 100644 --- a/apps/ScanOrchestrator.cs +++ b/apps/ScanOrchestrator.cs @@ -72,8 +72,9 @@ public async Task> ScanAsync(AppKind? kind, Ca { await timerTask.ConfigureAwait(false); } - catch (OperationCanceledException) + catch (OperationCanceledException) when (timerCts.IsCancellationRequested) { + logger.LogDebug("Scan progress timer cancelled"); } // Count sub-apps too (e.g. a Homebrew cask channel of a scanned bundle): they are diff --git a/apps/apps.csproj b/apps/apps.csproj index 1ab6c05..b1a41d5 100644 --- a/apps/apps.csproj +++ b/apps/apps.csproj @@ -3,6 +3,7 @@ Exe net10.0 + 10.0.11 apps enable enable