From 5fc5fd8a53b87e057954c5256e33f1f33949d397 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 21 May 2025 09:50:25 +0000 Subject: [PATCH 01/10] Initial plan for issue From 84af1888963582387062cbc629280d111e458cf4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 21 May 2025 10:14:39 +0000 Subject: [PATCH 02/10] Remove --prerelease switches from CLI commands Co-authored-by: mitchdenny <513398+mitchdenny@users.noreply.github.com> --- src/Aspire.Cli/Commands/AddCommand.cs | 8 +------- src/Aspire.Cli/Commands/NewCommand.cs | 11 +++-------- src/Aspire.Cli/DotNetCliRunner.cs | 6 ++++-- src/Aspire.Cli/NuGetPackageCache.cs | 10 +++++----- .../TestServices/TestDotNetCliRunner.cs | 6 +++--- 5 files changed, 16 insertions(+), 25 deletions(-) diff --git a/src/Aspire.Cli/Commands/AddCommand.cs b/src/Aspire.Cli/Commands/AddCommand.cs index b530c14b279..4cf167dec41 100644 --- a/src/Aspire.Cli/Commands/AddCommand.cs +++ b/src/Aspire.Cli/Commands/AddCommand.cs @@ -49,10 +49,6 @@ public AddCommand(IDotNetCliRunner runner, INuGetPackageCache nuGetPackageCache, versionOption.Description = "The version of the integration to add."; Options.Add(versionOption); - var prereleaseOption = new Option("--prerelease"); - prereleaseOption.Description = "Include pre-release versions of the integration when searching."; - Options.Add(prereleaseOption); - var sourceOption = new Option("--source", "-s"); sourceOption.Description = "The NuGet source to use for the integration."; Options.Add(sourceOption); @@ -79,13 +75,11 @@ protected override async Task ExecuteAsync(ParseResult parseResult, Cancell return ExitCodeConstants.FailedToFindProject; } - var prerelease = parseResult.GetValue("--prerelease"); - var source = parseResult.GetValue("--source"); var packages = await _interactionService.ShowStatusAsync( "Searching for Aspire packages...", - () => _nuGetPackageCache.GetIntegrationPackagesAsync(effectiveAppHostProjectFile.Directory!, prerelease, source, cancellationToken) + () => _nuGetPackageCache.GetIntegrationPackagesAsync(effectiveAppHostProjectFile.Directory!, true, source, cancellationToken) ); var version = parseResult.GetValue("--version"); diff --git a/src/Aspire.Cli/Commands/NewCommand.cs b/src/Aspire.Cli/Commands/NewCommand.cs index ea4978b0e58..4afd4991992 100644 --- a/src/Aspire.Cli/Commands/NewCommand.cs +++ b/src/Aspire.Cli/Commands/NewCommand.cs @@ -55,10 +55,6 @@ public NewCommand(IDotNetCliRunner runner, INuGetPackageCache nuGetPackageCache, var templateVersionOption = new Option("--version", "-v"); templateVersionOption.Description = "The version of the project templates to use."; Options.Add(templateVersionOption); - - var prereleaseOption = new Option("--prerelease"); - prereleaseOption.Description = "Include prerelease versions when searching for project templates."; - Options.Add(prereleaseOption); } private async Task<(string TemplateName, string TemplateDescription, Func PathDeriver)> GetProjectTemplateAsync(ParseResult parseResult, CancellationToken cancellationToken) @@ -111,7 +107,7 @@ private async Task GetOutputPathAsync(ParseResult parseResult, Func GetProjectTemplatesVersionAsync(ParseResult parseResult, bool prerelease, string? source, CancellationToken cancellationToken) + private async Task GetProjectTemplatesVersionAsync(ParseResult parseResult, string? source, CancellationToken cancellationToken) { if (parseResult.GetValue("--version") is { } version) { @@ -123,7 +119,7 @@ private async Task GetProjectTemplatesVersionAsync(ParseResult parseResu var candidatePackages = await _interactionService.ShowStatusAsync( "Searching for available project template versions...", - () => _nuGetPackageCache.GetTemplatePackagesAsync(workingDirectory, prerelease, source, cancellationToken) + () => _nuGetPackageCache.GetTemplatePackagesAsync(workingDirectory, true, source, cancellationToken) ); var orderedCandidatePackages = candidatePackages.OrderByDescending(p => SemVersion.Parse(p.Version), SemVersion.PrecedenceComparer); @@ -141,9 +137,8 @@ protected override async Task ExecuteAsync(ParseResult parseResult, Cancell var template = await GetProjectTemplateAsync(parseResult, cancellationToken); var name = await GetProjectNameAsync(parseResult, cancellationToken); var outputPath = await GetOutputPathAsync(parseResult, template.PathDeriver, name, cancellationToken); - var prerelease = parseResult.GetValue("--prerelease"); var source = parseResult.GetValue("--source"); - var version = await GetProjectTemplatesVersionAsync(parseResult, prerelease, source, cancellationToken); + var version = await GetProjectTemplatesVersionAsync(parseResult, source, cancellationToken); var templateInstallCollector = new OutputCollector(); var templateInstallResult = await _interactionService.ShowStatusAsync<(int ExitCode, string? TemplateVersion)>( diff --git a/src/Aspire.Cli/DotNetCliRunner.cs b/src/Aspire.Cli/DotNetCliRunner.cs index 6f7788dca4e..71e50a033cd 100644 --- a/src/Aspire.Cli/DotNetCliRunner.cs +++ b/src/Aspire.Cli/DotNetCliRunner.cs @@ -25,7 +25,7 @@ internal interface IDotNetCliRunner Task NewProjectAsync(string templateName, string name, string outputPath, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken); Task BuildAsync(FileInfo projectFilePath, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken); Task AddPackageAsync(FileInfo projectFilePath, string packageName, string packageVersion, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken); - Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, int take, int skip, string? nugetSource, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken); + Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease = true, int take = 1000, int skip = 0, string? nugetSource = null, DotNetCliRunnerInvocationOptions? options = null, CancellationToken cancellationToken = default); } internal sealed class DotNetCliRunnerInvocationOptions @@ -589,9 +589,11 @@ public async Task AddPackageAsync(FileInfo projectFilePath, string packageN return result; } - public async Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, int take, int skip, string? nugetSource, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken) + public async Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease = true, int take = 1000, int skip = 0, string? nugetSource = null, DotNetCliRunnerInvocationOptions? options = null, CancellationToken cancellationToken = default) { using var activity = _activitySource.StartActivity(); + + options ??= new DotNetCliRunnerInvocationOptions(); List cliArgs = [ "package", diff --git a/src/Aspire.Cli/NuGetPackageCache.cs b/src/Aspire.Cli/NuGetPackageCache.cs index c483be4852d..7304ed53577 100644 --- a/src/Aspire.Cli/NuGetPackageCache.cs +++ b/src/Aspire.Cli/NuGetPackageCache.cs @@ -8,8 +8,8 @@ namespace Aspire.Cli; internal interface INuGetPackageCache { - Task> GetTemplatePackagesAsync(DirectoryInfo workingDirectory, bool prerelease, string? source, CancellationToken cancellationToken); - Task> GetIntegrationPackagesAsync(DirectoryInfo workingDirectory, bool prerelease, string? source, CancellationToken cancellationToken); + Task> GetTemplatePackagesAsync(DirectoryInfo workingDirectory, bool prerelease = true, string? source = null, CancellationToken cancellationToken = default); + Task> GetIntegrationPackagesAsync(DirectoryInfo workingDirectory, bool prerelease = true, string? source = null, CancellationToken cancellationToken = default); } internal sealed class NuGetPackageCache(ILogger logger, IDotNetCliRunner cliRunner) : INuGetPackageCache @@ -18,17 +18,17 @@ internal sealed class NuGetPackageCache(ILogger logger, IDotN private const int SearchPageSize = 1000; - public async Task> GetTemplatePackagesAsync(DirectoryInfo workingDirectory, bool prerelease, string? source, CancellationToken cancellationToken) + public async Task> GetTemplatePackagesAsync(DirectoryInfo workingDirectory, bool prerelease = true, string? source = null, CancellationToken cancellationToken = default) { return await GetPackagesAsync(workingDirectory, "Aspire.ProjectTemplates", prerelease, source, cancellationToken); } - public async Task> GetIntegrationPackagesAsync(DirectoryInfo workingDirectory, bool prerelease, string? source, CancellationToken cancellationToken) + public async Task> GetIntegrationPackagesAsync(DirectoryInfo workingDirectory, bool prerelease = true, string? source = null, CancellationToken cancellationToken = default) { return await GetPackagesAsync(workingDirectory, "Aspire.Hosting", prerelease, source, cancellationToken); } - internal async Task> GetPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, string? source, CancellationToken cancellationToken) + internal async Task> GetPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease = true, string? source = null, CancellationToken cancellationToken = default) { using var activity = _activitySource.StartActivity(); diff --git a/tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs b/tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs index b0554d76677..d3227644013 100644 --- a/tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs +++ b/tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs @@ -17,7 +17,7 @@ internal sealed class TestDotNetCliRunner : IDotNetCliRunner public Func? InstallTemplateAsyncCallback { get; set; } public Func? NewProjectAsyncCallback { get; set; } public Func?, TaskCompletionSource?, DotNetCliRunnerInvocationOptions, CancellationToken, Task>? RunAsyncCallback { get; set; } - public Func? SearchPackagesAsyncCallback { get; set; } + public Func? SearchPackagesAsyncCallback { get; set; } public Func? TrustHttpCertificateAsyncCallback { get; set; } public Task AddPackageAsync(FileInfo projectFilePath, string packageName, string packageVersion, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken) @@ -78,10 +78,10 @@ public Task RunAsync(FileInfo projectFile, bool watch, bool noBuild, string : throw new NotImplementedException(); } - public Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, int take, int skip, string? nugetSource, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken) + public Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease = true, int take = 1000, int skip = 0, string? nugetSource = null, DotNetCliRunnerInvocationOptions? options = null, CancellationToken cancellationToken = default) { return SearchPackagesAsyncCallback != null - ? Task.FromResult(SearchPackagesAsyncCallback(workingDirectory, query, prerelease, take, skip, nugetSource, options, cancellationToken)) + ? Task.FromResult(SearchPackagesAsyncCallback(workingDirectory, query, prerelease, take, skip, nugetSource, options ?? new DotNetCliRunnerInvocationOptions(), cancellationToken)) : throw new NotImplementedException(); } From 509592be9228d022ac3a0ec05ec54ee6576e6de3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 21 May 2025 11:22:16 +0000 Subject: [PATCH 03/10] Restore the prerelease parameter in GetProjectTemplatesVersionAsync method Co-authored-by: mitchdenny <513398+mitchdenny@users.noreply.github.com> --- src/Aspire.Cli/Commands/NewCommand.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Aspire.Cli/Commands/NewCommand.cs b/src/Aspire.Cli/Commands/NewCommand.cs index 4afd4991992..b6c32a5e035 100644 --- a/src/Aspire.Cli/Commands/NewCommand.cs +++ b/src/Aspire.Cli/Commands/NewCommand.cs @@ -107,7 +107,7 @@ private async Task GetOutputPathAsync(ParseResult parseResult, Func GetProjectTemplatesVersionAsync(ParseResult parseResult, string? source, CancellationToken cancellationToken) + private async Task GetProjectTemplatesVersionAsync(ParseResult parseResult, bool prerelease, string? source, CancellationToken cancellationToken) { if (parseResult.GetValue("--version") is { } version) { @@ -119,7 +119,7 @@ private async Task GetProjectTemplatesVersionAsync(ParseResult parseResu var candidatePackages = await _interactionService.ShowStatusAsync( "Searching for available project template versions...", - () => _nuGetPackageCache.GetTemplatePackagesAsync(workingDirectory, true, source, cancellationToken) + () => _nuGetPackageCache.GetTemplatePackagesAsync(workingDirectory, prerelease, source, cancellationToken) ); var orderedCandidatePackages = candidatePackages.OrderByDescending(p => SemVersion.Parse(p.Version), SemVersion.PrecedenceComparer); @@ -138,7 +138,7 @@ protected override async Task ExecuteAsync(ParseResult parseResult, Cancell var name = await GetProjectNameAsync(parseResult, cancellationToken); var outputPath = await GetOutputPathAsync(parseResult, template.PathDeriver, name, cancellationToken); var source = parseResult.GetValue("--source"); - var version = await GetProjectTemplatesVersionAsync(parseResult, source, cancellationToken); + var version = await GetProjectTemplatesVersionAsync(parseResult, true, source, cancellationToken); var templateInstallCollector = new OutputCollector(); var templateInstallResult = await _interactionService.ShowStatusAsync<(int ExitCode, string? TemplateVersion)>( From 90ac8541f440693f3f05c6ceaa28b772a4e41baf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 21 May 2025 11:33:00 +0000 Subject: [PATCH 04/10] Remove default parameter values from NuGetPackageCache.cs Co-authored-by: mitchdenny <513398+mitchdenny@users.noreply.github.com> --- src/Aspire.Cli/NuGetPackageCache.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Aspire.Cli/NuGetPackageCache.cs b/src/Aspire.Cli/NuGetPackageCache.cs index 7304ed53577..c483be4852d 100644 --- a/src/Aspire.Cli/NuGetPackageCache.cs +++ b/src/Aspire.Cli/NuGetPackageCache.cs @@ -8,8 +8,8 @@ namespace Aspire.Cli; internal interface INuGetPackageCache { - Task> GetTemplatePackagesAsync(DirectoryInfo workingDirectory, bool prerelease = true, string? source = null, CancellationToken cancellationToken = default); - Task> GetIntegrationPackagesAsync(DirectoryInfo workingDirectory, bool prerelease = true, string? source = null, CancellationToken cancellationToken = default); + Task> GetTemplatePackagesAsync(DirectoryInfo workingDirectory, bool prerelease, string? source, CancellationToken cancellationToken); + Task> GetIntegrationPackagesAsync(DirectoryInfo workingDirectory, bool prerelease, string? source, CancellationToken cancellationToken); } internal sealed class NuGetPackageCache(ILogger logger, IDotNetCliRunner cliRunner) : INuGetPackageCache @@ -18,17 +18,17 @@ internal sealed class NuGetPackageCache(ILogger logger, IDotN private const int SearchPageSize = 1000; - public async Task> GetTemplatePackagesAsync(DirectoryInfo workingDirectory, bool prerelease = true, string? source = null, CancellationToken cancellationToken = default) + public async Task> GetTemplatePackagesAsync(DirectoryInfo workingDirectory, bool prerelease, string? source, CancellationToken cancellationToken) { return await GetPackagesAsync(workingDirectory, "Aspire.ProjectTemplates", prerelease, source, cancellationToken); } - public async Task> GetIntegrationPackagesAsync(DirectoryInfo workingDirectory, bool prerelease = true, string? source = null, CancellationToken cancellationToken = default) + public async Task> GetIntegrationPackagesAsync(DirectoryInfo workingDirectory, bool prerelease, string? source, CancellationToken cancellationToken) { return await GetPackagesAsync(workingDirectory, "Aspire.Hosting", prerelease, source, cancellationToken); } - internal async Task> GetPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease = true, string? source = null, CancellationToken cancellationToken = default) + internal async Task> GetPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, string? source, CancellationToken cancellationToken) { using var activity = _activitySource.StartActivity(); From 1bdceb5c6f1f3d2ce0e589d0c9edc4d856f1780e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 22 May 2025 01:09:10 +0000 Subject: [PATCH 05/10] Remove default parameter values from DotNetCliRunner.cs Co-authored-by: mitchdenny <513398+mitchdenny@users.noreply.github.com> --- src/Aspire.Cli/DotNetCliRunner.cs | 2 +- tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Aspire.Cli/DotNetCliRunner.cs b/src/Aspire.Cli/DotNetCliRunner.cs index 71e50a033cd..5ad53d42fd8 100644 --- a/src/Aspire.Cli/DotNetCliRunner.cs +++ b/src/Aspire.Cli/DotNetCliRunner.cs @@ -589,7 +589,7 @@ public async Task AddPackageAsync(FileInfo projectFilePath, string packageN return result; } - public async Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease = true, int take = 1000, int skip = 0, string? nugetSource = null, DotNetCliRunnerInvocationOptions? options = null, CancellationToken cancellationToken = default) + public async Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, int take, int skip, string? nugetSource, DotNetCliRunnerInvocationOptions? options, CancellationToken cancellationToken) { using var activity = _activitySource.StartActivity(); diff --git a/tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs b/tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs index d3227644013..d68f3b2dfc8 100644 --- a/tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs +++ b/tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs @@ -78,7 +78,7 @@ public Task RunAsync(FileInfo projectFile, bool watch, bool noBuild, string : throw new NotImplementedException(); } - public Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease = true, int take = 1000, int skip = 0, string? nugetSource = null, DotNetCliRunnerInvocationOptions? options = null, CancellationToken cancellationToken = default) + public Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, int take, int skip, string? nugetSource, DotNetCliRunnerInvocationOptions? options, CancellationToken cancellationToken) { return SearchPackagesAsyncCallback != null ? Task.FromResult(SearchPackagesAsyncCallback(workingDirectory, query, prerelease, take, skip, nugetSource, options ?? new DotNetCliRunnerInvocationOptions(), cancellationToken)) From b02cc45db3295d3bcb3ffc3353a147cf73ff8732 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 22 May 2025 01:19:30 +0000 Subject: [PATCH 06/10] Remove default parameter values from IDotNetCliRunner interface Co-authored-by: mitchdenny <513398+mitchdenny@users.noreply.github.com> --- src/Aspire.Cli/DotNetCliRunner.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Aspire.Cli/DotNetCliRunner.cs b/src/Aspire.Cli/DotNetCliRunner.cs index 5ad53d42fd8..1559359e021 100644 --- a/src/Aspire.Cli/DotNetCliRunner.cs +++ b/src/Aspire.Cli/DotNetCliRunner.cs @@ -25,7 +25,7 @@ internal interface IDotNetCliRunner Task NewProjectAsync(string templateName, string name, string outputPath, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken); Task BuildAsync(FileInfo projectFilePath, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken); Task AddPackageAsync(FileInfo projectFilePath, string packageName, string packageVersion, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken); - Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease = true, int take = 1000, int skip = 0, string? nugetSource = null, DotNetCliRunnerInvocationOptions? options = null, CancellationToken cancellationToken = default); + Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, int take, int skip, string? nugetSource, DotNetCliRunnerInvocationOptions? options, CancellationToken cancellationToken); } internal sealed class DotNetCliRunnerInvocationOptions From 702300219e896c44c90cff534048778d9d332dfb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 22 May 2025 01:55:48 +0000 Subject: [PATCH 07/10] Fix: Make DotNetCliRunnerInvocationOptions non-nullable in SearchPackagesAsync Co-authored-by: mitchdenny <513398+mitchdenny@users.noreply.github.com> --- src/Aspire.Cli/DotNetCliRunner.cs | 6 ++---- tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs | 6 +++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Aspire.Cli/DotNetCliRunner.cs b/src/Aspire.Cli/DotNetCliRunner.cs index 1559359e021..5878dee2d4e 100644 --- a/src/Aspire.Cli/DotNetCliRunner.cs +++ b/src/Aspire.Cli/DotNetCliRunner.cs @@ -25,7 +25,7 @@ internal interface IDotNetCliRunner Task NewProjectAsync(string templateName, string name, string outputPath, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken); Task BuildAsync(FileInfo projectFilePath, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken); Task AddPackageAsync(FileInfo projectFilePath, string packageName, string packageVersion, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken); - Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, int take, int skip, string? nugetSource, DotNetCliRunnerInvocationOptions? options, CancellationToken cancellationToken); + Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, int take, int skip, string? nugetSource, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken); } internal sealed class DotNetCliRunnerInvocationOptions @@ -589,12 +589,10 @@ public async Task AddPackageAsync(FileInfo projectFilePath, string packageN return result; } - public async Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, int take, int skip, string? nugetSource, DotNetCliRunnerInvocationOptions? options, CancellationToken cancellationToken) + public async Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, int take, int skip, string? nugetSource, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken) { using var activity = _activitySource.StartActivity(); - options ??= new DotNetCliRunnerInvocationOptions(); - List cliArgs = [ "package", "search", diff --git a/tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs b/tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs index d68f3b2dfc8..b0554d76677 100644 --- a/tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs +++ b/tests/Aspire.Cli.Tests/TestServices/TestDotNetCliRunner.cs @@ -17,7 +17,7 @@ internal sealed class TestDotNetCliRunner : IDotNetCliRunner public Func? InstallTemplateAsyncCallback { get; set; } public Func? NewProjectAsyncCallback { get; set; } public Func?, TaskCompletionSource?, DotNetCliRunnerInvocationOptions, CancellationToken, Task>? RunAsyncCallback { get; set; } - public Func? SearchPackagesAsyncCallback { get; set; } + public Func? SearchPackagesAsyncCallback { get; set; } public Func? TrustHttpCertificateAsyncCallback { get; set; } public Task AddPackageAsync(FileInfo projectFilePath, string packageName, string packageVersion, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken) @@ -78,10 +78,10 @@ public Task RunAsync(FileInfo projectFile, bool watch, bool noBuild, string : throw new NotImplementedException(); } - public Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, int take, int skip, string? nugetSource, DotNetCliRunnerInvocationOptions? options, CancellationToken cancellationToken) + public Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, int take, int skip, string? nugetSource, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken) { return SearchPackagesAsyncCallback != null - ? Task.FromResult(SearchPackagesAsyncCallback(workingDirectory, query, prerelease, take, skip, nugetSource, options ?? new DotNetCliRunnerInvocationOptions(), cancellationToken)) + ? Task.FromResult(SearchPackagesAsyncCallback(workingDirectory, query, prerelease, take, skip, nugetSource, options, cancellationToken)) : throw new NotImplementedException(); } From 3df3d406d2ef73cd4a466d07c08eba4a1be102dc Mon Sep 17 00:00:00 2001 From: David Fowler Date: Wed, 21 May 2025 23:33:10 -0700 Subject: [PATCH 08/10] Update src/Aspire.Cli/DotNetCliRunner.cs --- src/Aspire.Cli/DotNetCliRunner.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Aspire.Cli/DotNetCliRunner.cs b/src/Aspire.Cli/DotNetCliRunner.cs index 5878dee2d4e..179289d0db4 100644 --- a/src/Aspire.Cli/DotNetCliRunner.cs +++ b/src/Aspire.Cli/DotNetCliRunner.cs @@ -592,7 +592,6 @@ public async Task AddPackageAsync(FileInfo projectFilePath, string packageN public async Task<(int ExitCode, NuGetPackage[]? Packages)> SearchPackagesAsync(DirectoryInfo workingDirectory, string query, bool prerelease, int take, int skip, string? nugetSource, DotNetCliRunnerInvocationOptions options, CancellationToken cancellationToken) { using var activity = _activitySource.StartActivity(); - List cliArgs = [ "package", "search", From 2cda7a48a48278711f444e232df3f66ae548185f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 22 May 2025 06:44:34 +0000 Subject: [PATCH 09/10] Use named parameters in NewCommand.GetProjectTemplatesVersionAsync call Co-authored-by: davidfowl <95136+davidfowl@users.noreply.github.com> --- src/Aspire.Cli/Commands/NewCommand.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Aspire.Cli/Commands/NewCommand.cs b/src/Aspire.Cli/Commands/NewCommand.cs index b6c32a5e035..d7bb0dc8760 100644 --- a/src/Aspire.Cli/Commands/NewCommand.cs +++ b/src/Aspire.Cli/Commands/NewCommand.cs @@ -138,7 +138,7 @@ protected override async Task ExecuteAsync(ParseResult parseResult, Cancell var name = await GetProjectNameAsync(parseResult, cancellationToken); var outputPath = await GetOutputPathAsync(parseResult, template.PathDeriver, name, cancellationToken); var source = parseResult.GetValue("--source"); - var version = await GetProjectTemplatesVersionAsync(parseResult, true, source, cancellationToken); + var version = await GetProjectTemplatesVersionAsync(parseResult, prerelease: true, source: source, cancellationToken: cancellationToken); var templateInstallCollector = new OutputCollector(); var templateInstallResult = await _interactionService.ShowStatusAsync<(int ExitCode, string? TemplateVersion)>( From 05d655b4db6149885d2a23a4ce982598d625bff8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 22 May 2025 06:56:33 +0000 Subject: [PATCH 10/10] Add named parameters to GetIntegrationPackagesAsync call Co-authored-by: mitchdenny <513398+mitchdenny@users.noreply.github.com> --- src/Aspire.Cli/Commands/AddCommand.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Aspire.Cli/Commands/AddCommand.cs b/src/Aspire.Cli/Commands/AddCommand.cs index 4cf167dec41..9fb1bac6910 100644 --- a/src/Aspire.Cli/Commands/AddCommand.cs +++ b/src/Aspire.Cli/Commands/AddCommand.cs @@ -79,7 +79,11 @@ protected override async Task ExecuteAsync(ParseResult parseResult, Cancell var packages = await _interactionService.ShowStatusAsync( "Searching for Aspire packages...", - () => _nuGetPackageCache.GetIntegrationPackagesAsync(effectiveAppHostProjectFile.Directory!, true, source, cancellationToken) + () => _nuGetPackageCache.GetIntegrationPackagesAsync( + workingDirectory: effectiveAppHostProjectFile.Directory!, + prerelease: true, + source: source, + cancellationToken: cancellationToken) ); var version = parseResult.GetValue("--version");