Initialize cross-platform workspace host scaffold
Verify / verify (ubuntu-latest, linux-x64) (push) Canceled after 0s
Verify / verify (windows-latest, win-x64) (push) Canceled after 0s

This commit is contained in:
Youmu Liu
2026-09-29 11:30:51 +08:00
commit 4bc3552167
56 changed files with 2627 additions and 0 deletions
+115
View File
@@ -0,0 +1,115 @@
using Nuke.Common;
using Nuke.Common.IO;
using Nuke.Common.Tooling;
using Nuke.Common.Tools.DotNet;
using Serilog;
using static Nuke.Common.Tools.DotNet.DotNetTasks;
namespace WorkspaceAccess.Build;
internal sealed class Build : NukeBuild
{
public static int Main()
{
Environment.SetEnvironmentVariable("NUKE_TELEMETRY_OPTOUT", "1");
return Execute<Build>(build => build.Verify);
}
[Parameter("Build configuration (Debug or Release).")]
readonly string Configuration = "Release";
[Parameter("Publish runtime: win-x64, win-arm64, linux-x64 or linux-arm64.")]
readonly string? Runtime;
[Parameter("Require dependency versions from packages.lock.json.")]
readonly bool LockedRestore;
AbsolutePath SolutionFile => RootDirectory / "WorkspaceAccessHost.slnx";
AbsolutePath ProductProject => RootDirectory / "src/WorkspaceAccessHost.csproj";
AbsolutePath TestProject => RootDirectory / "tests/WorkspaceAccessHost.Tests/WorkspaceAccessHost.Tests.csproj";
AbsolutePath Artifacts => RootDirectory / "artifacts";
Target Restore => _ => _
.Executes(() => DotNetRestore(settings => settings
.SetProjectFile(SolutionFile)
.SetLockedMode(LockedRestore)));
Target Compile => _ => _
.DependsOn(Restore)
.Executes(() => DotNetBuild(settings => settings
.SetProjectFile(SolutionFile)
.SetConfiguration(Configuration)
.SetProcessAdditionalArguments("--disable-build-servers")
.EnableNoRestore()));
Target Test => _ => _
.DependsOn(Compile)
.Executes(() => DotNetTest(settings => settings
.SetProjectFile(TestProject)
.SetConfiguration(Configuration)
.EnableNoBuild()
.EnableNoRestore()
.SetResultsDirectory(Artifacts / "test-results")
.SetLoggers("trx;LogFileName=workspace-access.trx")));
Target CheckDocs => _ => _
.Executes(() => DocumentationChecks.Validate(RootDirectory));
Target Verify => _ => _
.DependsOn(CheckDocs, Test);
Target Publish => _ => _
.DependsOn(Verify)
.Requires(() => Runtime)
.Executes(() =>
{
string[] supported = ["win-x64", "win-arm64", "linux-x64", "linux-arm64"];
if (!supported.Contains(Runtime, StringComparer.Ordinal))
{
throw new ArgumentException($"Runtime must be one of: {string.Join(", ", supported)}.");
}
var destination = Artifacts / "publish" / Runtime!;
DotNetPublish(settings => settings
.SetProject(ProductProject)
.SetConfiguration(Configuration)
.SetRuntime(Runtime)
.SetProcessAdditionalArguments("--disable-build-servers")
.SetSelfContained(true)
.SetProperty("RestoreLockedMode", LockedRestore)
.SetOutput(destination));
var deployment = Runtime!.StartsWith("win-", StringComparison.Ordinal) ? "windows" : "linux";
CopyDirectory(RootDirectory / "deploy" / deployment, destination / "deploy");
Log.Information("Published WorkspaceAccessHost to {Directory}", destination);
});
Target RunHost => _ => _
.DependsOn(Compile)
.Executes(() => DotNetRun(settings => settings
.SetProjectFile(ProductProject)
.SetConfiguration(Configuration)
.SetApplicationArguments("host")
.EnableNoBuild()
.EnableNoRestore()));
Target RunAgent => _ => _
.DependsOn(Compile)
.Executes(() => DotNetRun(settings => settings
.SetProjectFile(ProductProject)
.SetConfiguration(Configuration)
.SetApplicationArguments("agent")
.EnableNoBuild()
.EnableNoRestore()));
private static void CopyDirectory(string source, string destination)
{
Directory.CreateDirectory(destination);
foreach (var file in Directory.EnumerateFiles(source, "*", SearchOption.AllDirectories))
{
var target = Path.Combine(destination, Path.GetRelativePath(source, file));
Directory.CreateDirectory(Path.GetDirectoryName(target)!);
File.Copy(file, target, overwrite: true);
}
}
}
+13
View File
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<IsPackable>false</IsPackable>
<RootNamespace>WorkspaceAccess.Build</RootNamespace>
<NoWarn>$(NoWarn);CS0649</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Nuke.Common" />
<PackageReference Include="NuGet.Packaging" PrivateAssets="all" />
<PackageReference Include="System.Security.Cryptography.Xml" PrivateAssets="all" />
</ItemGroup>
</Project>
+82
View File
@@ -0,0 +1,82 @@
using System.Text.RegularExpressions;
using Serilog;
namespace WorkspaceAccess.Build;
internal static partial class DocumentationChecks
{
public static void Validate(string root)
{
var documents = Directory.EnumerateFiles(Path.Combine(root, "docs"), "*.md", SearchOption.AllDirectories)
.Concat(Directory.EnumerateFiles(root, "*.md", SearchOption.TopDirectoryOnly))
.Concat(Directory.EnumerateFiles(Path.Combine(root, "deploy"), "*.md", SearchOption.AllDirectories))
.ToArray();
var links = new Dictionary<string, List<string>>(StringComparer.Ordinal);
foreach (var document in documents)
{
var content = File.ReadAllText(document);
if (!content.StartsWith("# ", StringComparison.Ordinal))
{
throw new InvalidOperationException($"Document needs a title: {document}");
}
var targets = new List<string>();
foreach (Match match in MarkdownLink().Matches(content))
{
var link = match.Groups[1].Value;
if (link.StartsWith('#') || Uri.TryCreate(link, UriKind.Absolute, out _))
{
continue;
}
var target = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(document)!,
Uri.UnescapeDataString(link.Split('#')[0])));
if (!File.Exists(target) && !Directory.Exists(target))
{
throw new InvalidOperationException($"Broken link in {document}: {link}");
}
targets.Add(target);
}
links[Path.GetFullPath(document)] = targets;
}
var visited = new HashSet<string>(StringComparer.Ordinal);
var pending = new Queue<string>();
pending.Enqueue(Path.Combine(root, "README.md"));
while (pending.TryDequeue(out var current))
{
if (visited.Add(current) && links.TryGetValue(current, out var targets))
{
foreach (var target in targets)
{
pending.Enqueue(target);
}
}
}
foreach (var document in Directory.EnumerateFiles(Path.Combine(root, "docs"), "*.md", SearchOption.AllDirectories))
{
if (!visited.Contains(Path.GetFullPath(document)))
{
throw new InvalidOperationException($"Document must be reachable from README: {document}");
}
}
var overview = File.ReadAllText(Path.Combine(root, "docs", "overview.md"));
foreach (var document in Directory.EnumerateFiles(Path.Combine(root, "docs", "platforms"), "*.md"))
{
var expectedLink = $"platforms/{Path.GetFileName(document)}";
if (!overview.Contains($"]({expectedLink})", StringComparison.Ordinal))
{
throw new InvalidOperationException($"Platform difference needs an overview link: {expectedLink}");
}
}
Log.Information("Validated {Count} documents, local link targets, reachability and platform coverage.", documents.Length);
}
[GeneratedRegex(@"\[[^\]]+\]\(([^)\s]+)\)")]
private static partial Regex MarkdownLink();
}
+514
View File
@@ -0,0 +1,514 @@
{
"version": 2,
"dependencies": {
"net10.0": {
"NuGet.Packaging": {
"type": "Direct",
"requested": "[6.12.5, )",
"resolved": "6.12.5",
"contentHash": "jQ5SCP29VgDVxxyFS/Tkg3lIngPeKoVxHdY7xfZNOyIPousbck6SnnqAEt2kZGfvjxFiSePcsKYu99CI/nE/JQ==",
"dependencies": {
"Newtonsoft.Json": "13.0.3",
"NuGet.Configuration": "6.12.5",
"NuGet.Versioning": "6.12.5",
"System.Security.Cryptography.Pkcs": "6.0.4"
}
},
"Nuke.Common": {
"type": "Direct",
"requested": "[10.1.0, )",
"resolved": "10.1.0",
"contentHash": "bymYGBes5vZUEu4eMkp1zDAbXcEpJQgRo6UcIGIWqsCUpSZIwfozuyRKVpk6lWP5KX6ep8x/XC08KLXlC6D6yg==",
"dependencies": {
"Azure.Identity": "1.17.1",
"Azure.Security.KeyVault.Certificates": "4.8.0",
"Azure.Security.KeyVault.Keys": "4.8.0",
"Azure.Security.KeyVault.Secrets": "4.8.0",
"Nuke.Build": "10.1.0",
"Nuke.Build.Shared": "10.1.0",
"Nuke.ProjectModel": "10.1.0",
"Nuke.SolutionModel": "10.1.0",
"Nuke.Tooling": "10.1.0",
"Nuke.Utilities": "10.1.0",
"Nuke.Utilities.IO.Compression": "10.1.0",
"Nuke.Utilities.IO.Globbing": "10.1.0",
"Nuke.Utilities.Net": "10.1.0",
"Nuke.Utilities.Text.Json": "10.1.0",
"Octokit": "14.0.0"
}
},
"System.Security.Cryptography.Xml": {
"type": "Direct",
"requested": "[10.0.12, )",
"resolved": "10.0.12",
"contentHash": "T3snzcc04R1JDj2XmzrLyk5fHT0YroBz5o2P+YdyJKYePSMqp8JsrxEJQPvUnK6oozQBvKLki9vnI7uMuWepKQ==",
"dependencies": {
"System.Security.Cryptography.Pkcs": "10.0.12"
}
},
"Azure.Core": {
"type": "Transitive",
"resolved": "1.50.0",
"contentHash": "GBNKZEhdIbTXxedvD3R7I/yDVFX9jJJEz02kCziFSJxspSQ5RMHc3GktulJ1s7+ffXaXD7kMgrtdQTaggyInLw==",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "8.0.0",
"System.ClientModel": "1.8.0",
"System.Memory.Data": "8.0.1"
}
},
"Azure.Identity": {
"type": "Transitive",
"resolved": "1.17.1",
"contentHash": "MSZkBrctcpiGxs9Cvr2VKKoN6qFLZlP3I6xuCWJ9iTgitI5Rgxtk5gfOSpXPZE3+CJmZ/mnqpQyGyjawFn5Vvg==",
"dependencies": {
"Azure.Core": "1.50.0",
"Microsoft.Identity.Client": "4.78.0",
"Microsoft.Identity.Client.Extensions.Msal": "4.78.0"
}
},
"Azure.Security.KeyVault.Certificates": {
"type": "Transitive",
"resolved": "4.8.0",
"contentHash": "48EHvsZM0hQow0PP4PAkWZYcE/tmjfx7az07GrqU2Q/0p3O3Vm/F+bEu1iVREBYzSV7uHHPikyJyBnXClfKuJA==",
"dependencies": {
"Azure.Core": "1.46.2"
}
},
"Azure.Security.KeyVault.Keys": {
"type": "Transitive",
"resolved": "4.8.0",
"contentHash": "3rueqKRzNZdW+gEWox07Hpxq3n+0AZdRw3QI4GC3GBzLCw9n00LXgy4upow00bAuQJ9QGX2xwzJPg2/wALPYDA==",
"dependencies": {
"Azure.Core": "1.46.2"
}
},
"Azure.Security.KeyVault.Secrets": {
"type": "Transitive",
"resolved": "4.8.0",
"contentHash": "tmcIgo+de2K5+PTBRNlnFLQFbmSoyuT9RpDr5MwKS6mIfNxLPQpARkRAP91r3tmeiJ9j/UCO0F+hTlk1Bk7HNQ==",
"dependencies": {
"Azure.Core": "1.46.2"
}
},
"Glob": {
"type": "Transitive",
"resolved": "1.1.9",
"contentHash": "AfK5+ECWYTP7G3AAdnU8IfVj+QpGjrh9GC2mpdcJzCvtQ4pnerAGwHsxJ9D4/RnhDUz2DSzd951O/lQjQby2Sw=="
},
"JetBrains.Annotations": {
"type": "Transitive",
"resolved": "2025.2.2",
"contentHash": "0X56ZRizuHdrnPpgXjWV7f2tQO1FlQg5O1967OGKnI/4ZRNOK642J8L7brM1nYvrxTTU5TP1yRyXLRLaXLPQ8A=="
},
"matkoch.Microsoft.VisualStudio.SolutionPersistence": {
"type": "Transitive",
"resolved": "1.0.61",
"contentHash": "EfEzClmsFSy1ukbJ9MeDB0zdAZ2k9HLxd6I3Hiv9Gz14Ql26XQ0GVXJESjTda0T78K/7UiraDx3w5AwRkxb5lg=="
},
"Microsoft.ApplicationInsights": {
"type": "Transitive",
"resolved": "2.23.0",
"contentHash": "nWArUZTdU7iqZLycLKWe0TDms48KKGE6pONH2terYNa8REXiqixrMOkf1sk5DHGMaUTqONU2YkS4SAXBhLStgw=="
},
"Microsoft.Bcl.AsyncInterfaces": {
"type": "Transitive",
"resolved": "8.0.0",
"contentHash": "3WA9q9yVqJp222P3x1wYIGDAkpjAku0TMUaaQV22g6L67AI0LdOIrVS7Ht2vJfLHGSPVuqN94vIr15qn+HEkHw=="
},
"Microsoft.Build": {
"type": "Transitive",
"resolved": "18.0.2",
"contentHash": "MlcYsFVJbA7S1ByOf9DbuPMQ08nlF88VkqkIjmBkIiasA/M0Zo87H6Vk44e/SuLffomGGYSr2Hh5El6UEDDgKw==",
"dependencies": {
"Microsoft.Build.Framework": "18.0.2",
"Microsoft.NET.StringTools": "18.0.2",
"System.Configuration.ConfigurationManager": "9.0.0",
"System.Diagnostics.EventLog": "9.0.0",
"System.Reflection.MetadataLoadContext": "9.0.0",
"System.Security.Cryptography.ProtectedData": "9.0.6"
}
},
"Microsoft.Build.Framework": {
"type": "Transitive",
"resolved": "18.0.2",
"contentHash": "sOSb+0J4G/jCBW/YqmRuL0eOMXgfw1KQLdC9TkbvfA5xs7uNm+PBQXJCOzSJGXtZcZrtXozcwxPmUiRUbmd7FA=="
},
"Microsoft.Build.Locator": {
"type": "Transitive",
"resolved": "1.7.8",
"contentHash": "sPy10x527Ph16S2u0yGME4S6ohBKJ69WfjeGG/bvELYeZVmJdKjxgnlL8cJJJLGV/cZIRqSfB12UDB8ICakOog=="
},
"Microsoft.Build.Tasks.Core": {
"type": "Transitive",
"resolved": "18.0.2",
"contentHash": "ff9DeP4WUVxk6Ojm7qcK4HC+zXaKl0IJYXhS+lC51Sx76QtaQfPGZDJz9Go5ERQecmPV/HZ5brZAa9U36l2laA==",
"dependencies": {
"Microsoft.Build.Framework": "18.0.2",
"Microsoft.Build.Utilities.Core": "18.0.2",
"Microsoft.NET.StringTools": "18.0.2",
"System.CodeDom": "9.0.0",
"System.Configuration.ConfigurationManager": "9.0.0",
"System.Diagnostics.EventLog": "9.0.0",
"System.Formats.Nrbf": "9.0.0",
"System.Resources.Extensions": "9.0.0",
"System.Security.Cryptography.Pkcs": "9.0.6",
"System.Security.Cryptography.ProtectedData": "9.0.6",
"System.Security.Cryptography.Xml": "9.0.0"
}
},
"Microsoft.Build.Utilities.Core": {
"type": "Transitive",
"resolved": "18.0.2",
"contentHash": "qsI2Mc8tbJEyg5m4oTvxlu5wY8te0TIVxObxILvrrPdeFUwH5V5UXUT2RV054b3S9msIR+7zViTWp4nRp0YGbQ==",
"dependencies": {
"Microsoft.Build.Framework": "18.0.2",
"Microsoft.NET.StringTools": "18.0.2",
"System.Configuration.ConfigurationManager": "9.0.0",
"System.Diagnostics.EventLog": "9.0.0",
"System.Security.Cryptography.ProtectedData": "9.0.6"
}
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
"resolved": "8.0.2",
"contentHash": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg=="
},
"Microsoft.Extensions.DependencyModel": {
"type": "Transitive",
"resolved": "10.0.0",
"contentHash": "RFYJR7APio/BiqdQunRq6DB+nDB6nc2qhHr77mlvZ0q0BT8PubMXN7XicmfzCbrDE/dzhBnUKBRXLTcqUiZDGg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
"resolved": "8.0.3",
"contentHash": "dL0QGToTxggRLMYY4ZYX5AMwBb+byQBd/5dMiZE07Nv73o6I5Are3C7eQTh7K2+A4ct0PVISSr7TZANbiNb2yQ==",
"dependencies": {
"Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2"
}
},
"Microsoft.Identity.Client": {
"type": "Transitive",
"resolved": "4.78.0",
"contentHash": "vZ50HE9INSN+Ew8pCgTm0t7wzxQTqozF9L4MAsl64etXz0Teo0dbUvjpVzqDHRs6m1Vn8mHF04fGaxXrIvGpsg==",
"dependencies": {
"Microsoft.IdentityModel.Abstractions": "8.14.0"
}
},
"Microsoft.Identity.Client.Extensions.Msal": {
"type": "Transitive",
"resolved": "4.78.0",
"contentHash": "DYU9o+DrDQuyZxeq91GBA9eNqBvA3ZMkLzQpF7L9dTk6FcIBM1y1IHXWqiKXTvptPF7CZE59upbyUoa+FJ5eiA==",
"dependencies": {
"Microsoft.Identity.Client": "4.78.0",
"System.Security.Cryptography.ProtectedData": "4.5.0"
}
},
"Microsoft.IdentityModel.Abstractions": {
"type": "Transitive",
"resolved": "8.14.0",
"contentHash": "iwbCpSjD3ehfTwBhtSNEtKPK0ICun6ov7Ibx6ISNA9bfwIyzI2Siwyi9eJFCJBwxowK9xcA1mj+jBWiigeqgcQ=="
},
"Microsoft.NET.StringTools": {
"type": "Transitive",
"resolved": "18.0.2",
"contentHash": "cTZw3GHkAlqZACYGeQT3niS3UfVQ8CH0O5+zUdhxstrg1Z8Q2ViXYFKjSxHmEXTX85mrOT/QnHZOeQhhSsIrkQ=="
},
"Namotion.Reflection": {
"type": "Transitive",
"resolved": "3.4.3",
"contentHash": "KLk2gLR9f8scM82EiL+p9TONXXPy9+IAZVMzJOA/Wsa7soZD7UJGG6j0fq0D9ZoVnBRRnSeEC7kShhRo3Olgaw=="
},
"Newtonsoft.Json": {
"type": "Transitive",
"resolved": "13.0.4",
"contentHash": "pdgNNMai3zv51W5aq268sujXUyx7SNdE2bj1wZcWjAQrKMFZV260lbqYop1d2GM67JI1huLRwxo9ZqnfF/lC6A=="
},
"NJsonSchema": {
"type": "Transitive",
"resolved": "11.5.2",
"contentHash": "CAmnt4tnylb82Ro6f2EFIGz8rmThuCsITECUNqGhVEQ5VvxV+XwsTPz6LF58MbvUEV1jVcH+uxxljgM/etgK7A==",
"dependencies": {
"NJsonSchema.Annotations": "11.5.2",
"Namotion.Reflection": "3.4.3",
"Newtonsoft.Json": "13.0.3"
}
},
"NJsonSchema.Annotations": {
"type": "Transitive",
"resolved": "11.5.2",
"contentHash": "OfYQgNzJZb1r/gR5vza0DbBLxnmcITDhA5CXFuX1qxuP3rRdQMjbIz5VyDVHCU1QxyrfAymzajbh7iszEvyFGQ=="
},
"NJsonSchema.NewtonsoftJson": {
"type": "Transitive",
"resolved": "11.5.2",
"contentHash": "2KuhjeP/E/hqixoKRjKUXD56V8gBkEB51gdbTU2gN2AeabCG4gW5YsAUl+ZumFgj0cbEJ7GKdl9IBdeZaLxiTA==",
"dependencies": {
"NJsonSchema": "11.5.2",
"Newtonsoft.Json": "13.0.3"
}
},
"NuGet.Common": {
"type": "Transitive",
"resolved": "6.12.5",
"contentHash": "ceynBLlidkZIfrLdujE3f9FDYTLjs884sRL0zrX3PgTbGGfrLxZGz8KciHsqEnSBqMwpimbxdNrDcorU+Zd9oA==",
"dependencies": {
"NuGet.Frameworks": "6.12.5"
}
},
"NuGet.Configuration": {
"type": "Transitive",
"resolved": "6.12.5",
"contentHash": "6ZHtYcHdMrnWWfeiMBrZTtytnjmb9N7eh4S26peV6mBQF71Mv/7X0gyw0VW9ZfEkm31sVD736a7mKNHf7wee1Q==",
"dependencies": {
"NuGet.Common": "6.12.5",
"System.Security.Cryptography.ProtectedData": "4.4.0"
}
},
"NuGet.Frameworks": {
"type": "Transitive",
"resolved": "6.12.5",
"contentHash": "myEA6gdCZLHrcMSbOFxqaIfYkMFpMePup35qZlYUxSQNrL0WG8im3/pc8trrd9ArqdO8cgKhm9DnZrnYCu33Zg=="
},
"NuGet.Versioning": {
"type": "Transitive",
"resolved": "6.12.5",
"contentHash": "9/Sniz+tzNAjcSziMmh62PIbF1mxaSC+P5Mdw1LgMleCbeaObjkkR/RUlduu6yCL3EfruACO/uknDJ5xCH3quQ=="
},
"Nuke.Build": {
"type": "Transitive",
"resolved": "10.1.0",
"contentHash": "6fW17c3K1M4jw4acp7sujpqSiN8UbZPudBvS9+LEpmH2iwf8uZ0rue1G1D+WNurAMK1p3kOH5qo1M99rwFtSrQ==",
"dependencies": {
"Microsoft.ApplicationInsights": "2.23.0",
"Microsoft.Extensions.DependencyModel": "10.0.0",
"NJsonSchema": "11.5.2",
"NJsonSchema.NewtonsoftJson": "11.5.2",
"Nuke.Build.Shared": "10.1.0",
"Nuke.ProjectModel": "10.1.0",
"Nuke.SolutionModel": "10.1.0",
"Nuke.Tooling": "10.1.0",
"Nuke.Utilities": "10.1.0",
"Nuke.Utilities.IO.Globbing": "10.1.0",
"Nuke.Utilities.Net": "10.1.0",
"Nuke.Utilities.Text.Json": "10.1.0",
"Nuke.Utilities.Text.Yaml": "10.1.0",
"Serilog.Formatting.Compact": "3.0.0",
"Serilog.Formatting.Compact.Reader": "4.0.0",
"Serilog.Sinks.Console": "6.1.1",
"Serilog.Sinks.File": "7.0.0"
}
},
"Nuke.Build.Shared": {
"type": "Transitive",
"resolved": "10.1.0",
"contentHash": "4uwzKj5IbjOeKbVtCScPuFlBAPQvG9z/K9I7zvR7tUFFtXNqBfIZmy+lbOdgxy7YsKWO7xgvAtIC4VCem7AKLA==",
"dependencies": {
"Nuke.Utilities": "10.1.0"
}
},
"Nuke.ProjectModel": {
"type": "Transitive",
"resolved": "10.1.0",
"contentHash": "qOd7BAH/dnfJPxPipjB/slQK6K9FJOPzzj/Kbq4INJtfJod6dRm6Zu9yTk/l1CLRC68CQIVM3OLb1v3NxXgejw==",
"dependencies": {
"Microsoft.Build": "18.0.2",
"Microsoft.Build.Framework": "18.0.2",
"Microsoft.Build.Locator": "1.7.8",
"Microsoft.Build.Tasks.Core": "18.0.2",
"Microsoft.Build.Utilities.Core": "18.0.2",
"Nuke.SolutionModel": "10.1.0",
"Nuke.Tooling": "10.1.0",
"Nuke.Utilities": "10.1.0"
}
},
"Nuke.SolutionModel": {
"type": "Transitive",
"resolved": "10.1.0",
"contentHash": "A/jWyMVrwbT8Oh/X658/MjKLIr8BXWU9gL46FhWGRebgxiwlcuesV7AO5EXiaDH2MaR8RC6Bm0PIw+4OP7PBkQ==",
"dependencies": {
"Nuke.Utilities": "10.1.0",
"matkoch.Microsoft.VisualStudio.SolutionPersistence": "1.0.61"
}
},
"Nuke.Tooling": {
"type": "Transitive",
"resolved": "10.1.0",
"contentHash": "Ilne9MWjyKV99zdlg1Fw2vylWGqCPjGxzbcpW9mdxVZhpNSgA4lSGvaoUBVAd2FjG6ynNmLCZY3Nz+g8QmuHMw==",
"dependencies": {
"Newtonsoft.Json": "13.0.4",
"NuGet.Packaging": "6.12.1",
"Nuke.Utilities": "10.1.0",
"Nuke.Utilities.Text.Json": "10.1.0",
"Serilog": "4.3.0"
}
},
"Nuke.Utilities": {
"type": "Transitive",
"resolved": "10.1.0",
"contentHash": "jLjpdbP751BNiMllC4wreUtGuo436YsntNttPWV9qfthVx11gJJvxR5ASHFiI7mD1+NOXbgP8zFNH+QXxqSM+Q==",
"dependencies": {
"JetBrains.Annotations": "2025.2.2"
}
},
"Nuke.Utilities.IO.Compression": {
"type": "Transitive",
"resolved": "10.1.0",
"contentHash": "6aJuGPmh34XjqGIzCWPEGlyk/7q5oH1BwvHIoc+TqeP/pgHUPHBs1EeXIcIyzTzfsOhQ5l4AYTRNwo0PBX8I7w==",
"dependencies": {
"Nuke.Utilities": "10.1.0",
"SharpZipLib": "1.4.2"
}
},
"Nuke.Utilities.IO.Globbing": {
"type": "Transitive",
"resolved": "10.1.0",
"contentHash": "BDUEnifcXnpdZYOesxMdniLBxqVYXPwlH1WsKlmSEIhZ8JetII4LZcLO1sjEgMays6LmakH/SaH3p3ELEV5Fyw==",
"dependencies": {
"Glob": "1.1.9",
"Nuke.Utilities": "10.1.0"
}
},
"Nuke.Utilities.Net": {
"type": "Transitive",
"resolved": "10.1.0",
"contentHash": "UcdmLosYd5PcFjTqaEnSC5UOmukXp1VXtOroDnQshPJR2Bn2SUuse38eOkvjCN7IemQIN2Q+fYceJAeuQyJ7pQ==",
"dependencies": {
"Newtonsoft.Json": "13.0.4",
"Nuke.Utilities": "10.1.0"
}
},
"Nuke.Utilities.Text.Json": {
"type": "Transitive",
"resolved": "10.1.0",
"contentHash": "MEqDU6eeum4uzLz+jgMFuFcaZy/bpbWtz8rLl9i7T4wW8Q+YMgPXZ7RHhzPhcwEG3n8TvV4jnDImfPcqNx065Q==",
"dependencies": {
"Newtonsoft.Json": "13.0.4",
"Nuke.Utilities": "10.1.0"
}
},
"Nuke.Utilities.Text.Yaml": {
"type": "Transitive",
"resolved": "10.1.0",
"contentHash": "bO3dEpQcDk5He851rQzyrPyuLI3vL0q8EGZG7qFP4soMYHIPjSP68A/BQdWJOCmv4/zpMMYuKUBnhSeTD2BJAQ==",
"dependencies": {
"Nuke.Utilities": "10.1.0",
"YamlDotNet": "16.3.0"
}
},
"Octokit": {
"type": "Transitive",
"resolved": "14.0.0",
"contentHash": "jGOuTH1l+TCpJH+fwYOp7USzHDuGfN1jKbLz3J2COwyn+wL08eynvpnM6rY2qkzIEXum3PN2p2QkP3BW/p9Qcw=="
},
"Serilog": {
"type": "Transitive",
"resolved": "4.3.0",
"contentHash": "+cDryFR0GRhsGOnZSKwaDzRRl4MupvJ42FhCE4zhQRVanX0Jpg6WuCBk59OVhVDPmab1bB+nRykAnykYELA9qQ=="
},
"Serilog.Formatting.Compact": {
"type": "Transitive",
"resolved": "3.0.0",
"contentHash": "wQsv14w9cqlfB5FX2MZpNsTawckN4a8dryuNGbebB/3Nh1pXnROHZov3swtu3Nj5oNG7Ba+xdu7Et/ulAUPanQ==",
"dependencies": {
"Serilog": "4.0.0"
}
},
"Serilog.Formatting.Compact.Reader": {
"type": "Transitive",
"resolved": "4.0.0",
"contentHash": "E1gvPAx0AsQhlyzGwgcVnGe5QrdkSugwKh+6V/FUSdTMVKKPSiO6Ff5iosjBMNBvq244Zys7BhTfFmgCE0KUyQ==",
"dependencies": {
"Newtonsoft.Json": "13.0.3",
"Serilog": "4.0.0"
}
},
"Serilog.Sinks.Console": {
"type": "Transitive",
"resolved": "6.1.1",
"contentHash": "8jbqgjUyZlfCuSTaJk6lOca465OndqOz3KZP6Cryt/IqZYybyBu7GP0fE/AXBzrrQB3EBmQntBFAvMVz1COvAA==",
"dependencies": {
"Serilog": "4.0.0"
}
},
"Serilog.Sinks.File": {
"type": "Transitive",
"resolved": "7.0.0",
"contentHash": "fKL7mXv7qaiNBUC71ssvn/dU0k9t0o45+qm2XgKAlSt19xF+ijjxyA3R6HmCgfKEKwfcfkwWjayuQtRueZFkYw==",
"dependencies": {
"Serilog": "4.2.0"
}
},
"SharpZipLib": {
"type": "Transitive",
"resolved": "1.4.2",
"contentHash": "yjj+3zgz8zgXpiiC3ZdF/iyTBbz2fFvMxZFEBPUcwZjIvXOf37Ylm+K58hqMfIBt5JgU/Z2uoUS67JmTLe973A=="
},
"System.ClientModel": {
"type": "Transitive",
"resolved": "1.8.0",
"contentHash": "AqRzhn0v29GGGLj/Z6gKq4lGNtvPHT4nHdG5PDJh9IfVjv/nYUVmX11hwwws1vDFeIAzrvmn0dPu8IjLtu6fAw==",
"dependencies": {
"Microsoft.Extensions.Logging.Abstractions": "8.0.3",
"System.Memory.Data": "8.0.1"
}
},
"System.CodeDom": {
"type": "Transitive",
"resolved": "9.0.0",
"contentHash": "oTE5IfuMoET8yaZP/vdvy9xO47guAv/rOhe4DODuFBN3ySprcQOlXqO3j+e/H/YpKKR5sglrxRaZ2HYOhNJrqA=="
},
"System.Configuration.ConfigurationManager": {
"type": "Transitive",
"resolved": "9.0.0",
"contentHash": "PdkuMrwDhXoKFo/JxISIi9E8L+QGn9Iquj2OKDWHB6Y/HnUOuBouF7uS3R4Hw3FoNmwwMo6hWgazQdyHIIs27A==",
"dependencies": {
"System.Diagnostics.EventLog": "9.0.0",
"System.Security.Cryptography.ProtectedData": "9.0.0"
}
},
"System.Diagnostics.EventLog": {
"type": "Transitive",
"resolved": "9.0.0",
"contentHash": "qd01+AqPhbAG14KtdtIqFk+cxHQFZ/oqRSCoxU1F+Q6Kv0cl726sl7RzU9yLFGd4BUOKdN4XojXF0pQf/R6YeA=="
},
"System.Formats.Nrbf": {
"type": "Transitive",
"resolved": "9.0.0",
"contentHash": "F/6tNE+ckmdFeSQAyQo26bQOqfPFKEfZcuqnp4kBE6/7jP26diP+QTHCJJ6vpEfaY6bLy+hBLiIQUSxSmNwLkA=="
},
"System.Memory.Data": {
"type": "Transitive",
"resolved": "8.0.1",
"contentHash": "BVYuec3jV23EMRDeR7Dr1/qhx7369dZzJ9IWy2xylvb4YfXsrUxspWc4UWYid/tj4zZK58uGZqn2WQiaDMhmAg=="
},
"System.Reflection.MetadataLoadContext": {
"type": "Transitive",
"resolved": "9.0.0",
"contentHash": "nGdCUVhEQ9/CWYqgaibYEDwIJjokgIinQhCnpmtZfSXdMS6ysLZ8p9xvcJ8VPx6Xpv5OsLIUrho4B9FN+VV/tw=="
},
"System.Resources.Extensions": {
"type": "Transitive",
"resolved": "9.0.0",
"contentHash": "tvhuT1D2OwPROdL1kRWtaTJliQo0WdyhvwDpd8RM997G7m3Hya5nhbYhNTS75x6Vu+ypSOgL5qxDCn8IROtCxw==",
"dependencies": {
"System.Formats.Nrbf": "9.0.0"
}
},
"System.Security.Cryptography.Pkcs": {
"type": "Transitive",
"resolved": "10.0.12",
"contentHash": "W6BsawU2tB2qy6u4+3cBOSOmiTUgYWW365b5WMVA1bDxQwZZeNWD+qufKJkDQNKzAKq4b6Q04DDKhmr2SNJ1eg=="
},
"System.Security.Cryptography.ProtectedData": {
"type": "Transitive",
"resolved": "9.0.6",
"contentHash": "yErfw/3pZkJE/VKza/Cm5idTpIKOy/vsmVi59Ta5SruPVtubzxb8CtnE8tyUpzs5pr0Y28GUFfSVzAhCLN3F/Q=="
},
"YamlDotNet": {
"type": "Transitive",
"resolved": "16.3.0",
"contentHash": "SgMOdxbz8X65z8hraIs6hOEdnkH6hESTAIUa7viEngHOYaH+6q5XJmwr1+yb9vJpNQ19hCQY69xbFsLtXpobQA=="
}
}
}
}