Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
c80ef09
chore: Bump TUnit from 1.63.0 to 1.64.6
dependabot[bot] Aug 10, 2026
d2559ce
chore: Bump TUnit from 1.63.0 to 1.64.6 (#45)
iamr8 Aug 10, 2026
2bfb61a
chore: Bump Microsoft.Extensions.DependencyInjection from 10.0.10 to …
dependabot[bot] Aug 17, 2026
b34b5f2
chore: Bump System.CommandLine from 2.0.10 to 2.0.11
dependabot[bot] Aug 17, 2026
4504bcc
chore: Bump System.Threading.RateLimiting from 10.0.10 to 10.0.11
dependabot[bot] Aug 17, 2026
a88612d
chore: Bump TUnit from 1.64.6 to 1.65.0
dependabot[bot] Aug 17, 2026
5f0cb7a
chore: Bump TUnit from 1.64.6 to 1.65.0 (#52)
iamr8 Aug 19, 2026
d565299
chore: Bump System.Threading.RateLimiting from 10.0.10 to 10.0.11 (#51)
iamr8 Aug 19, 2026
028a94d
Merge branch 'develop' into dependabot/nuget/apps/develop/System.Comm…
iamr8 Aug 19, 2026
6b0b61b
chore: Bump Microsoft.Extensions.DependencyInjection from 10.0.10 to …
iamr8 Aug 19, 2026
ef28493
chore: Bump Microsoft.Extensions.Http from 10.0.10 to 10.0.11
dependabot[bot] Aug 19, 2026
48e3cbd
chore: Bump Microsoft.Extensions.Http.Resilience from 10.8.0 to 10.9.0
dependabot[bot] Aug 19, 2026
a3dabf9
chore: Bump Microsoft.Extensions.Logging.Console from 10.0.10 to 10.0.11
dependabot[bot] Aug 19, 2026
ba25d8a
chore: Bump System.CommandLine from 2.0.10 to 2.0.11 (#50)
iamr8 Aug 19, 2026
07d3b1d
chore: Bump Microsoft.Extensions.Logging.Console from 10.0.10 to 10.0…
iamr8 Aug 19, 2026
6af7b05
chore: Bump Microsoft.Extensions.Http from 10.0.10 to 10.0.11 (#47)
iamr8 Aug 19, 2026
6fe93bd
Merge branch 'develop' into dependabot/nuget/apps/develop/Microsoft.E…
iamr8 Aug 19, 2026
1d45ff4
chore: Bump Microsoft.Extensions.Http.Resilience from 10.8.0 to 10.9.…
iamr8 Aug 19, 2026
15abc68
fix(jetbrains): match plugin platform
iamr8 Aug 21, 2026
7d4a53f
chore: Bump TUnit from 1.65.0 to 1.65.38
dependabot[bot] Aug 21, 2026
e33fe24
chore: Bump TUnit from 1.65.0 to 1.65.38 (#54)
iamr8 Aug 21, 2026
5e0a143
fix(security): resolve scan alerts
iamr8 Aug 21, 2026
e678cbb
fix: match plugins and resolve security alerts (#53)
iamr8 Aug 21, 2026
d1f9fc8
Optimize CI workflows and improve app handling (#55)
iamr8 Aug 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.0.13-beta
0.0.14-beta
46 changes: 46 additions & 0 deletions apps.Tests/Components/JetBrainsPluginScannerTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using System.Net;
using System.Runtime.InteropServices;
using System.Text.Json;

using apps.Components.JetBrains;
using apps.Tests.Fakes;
Expand Down Expand Up @@ -102,6 +104,50 @@ await Assert.That(() => JetBrainsPluginScanner.ParsePluginXml("not xml <"))
.Throws<System.Xml.XmlException>();
}

[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()
{
Expand Down
2 changes: 1 addition & 1 deletion apps.Tests/apps.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="TUnit" Version="1.63.0" />
<PackageReference Include="TUnit" Version="1.65.38" />
</ItemGroup>

<ItemGroup>
Expand Down
3 changes: 2 additions & 1 deletion apps/CheckOrchestrator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,9 @@ public sealed class CheckOrchestrator(IEnumerable<IScanner> 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);
Expand Down
6 changes: 6 additions & 0 deletions apps/Components/JetBrains/JetBrainsJsonContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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; }
}

/// <summary>
Expand Down
47 changes: 46 additions & 1 deletion apps/Components/JetBrains/JetBrainsPluginScanner.cs
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -184,7 +185,11 @@ public async IAsyncEnumerable<DiscoveredApp> 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();
Expand Down Expand Up @@ -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;
}
}
3 changes: 2 additions & 1 deletion apps/ScanOrchestrator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,9 @@ public async Task<Dictionary<string, DiscoveredApp>> 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
Expand Down
13 changes: 7 additions & 6 deletions apps/apps.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<RuntimeFrameworkVersion>10.0.11</RuntimeFrameworkVersion>
<AssemblyName>apps</AssemblyName>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
Expand Down Expand Up @@ -35,16 +36,16 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="10.8.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="10.0.10" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.11" />
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="10.9.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="10.0.11" />
<PackageReference Include="Serilog" Version="4.4.0" />
<PackageReference Include="Serilog.Extensions.Logging" Version="10.0.0" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.1.1" />
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
<PackageReference Include="System.CommandLine" Version="2.0.10" />
<PackageReference Include="System.Threading.RateLimiting" Version="10.0.10" />
<PackageReference Include="System.CommandLine" Version="2.0.11" />
<PackageReference Include="System.Threading.RateLimiting" Version="10.0.11" />
</ItemGroup>

</Project>
Loading