| File: Commands\PublishCommand.cs | Web Access |
| Project: src\src\Aspire.Cli\Aspire.Cli.csproj (aspire) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.CommandLine; using Aspire.Cli.Configuration; using Aspire.Cli.DotNet; using Aspire.Cli.Interaction; using Aspire.Cli.Projects; using Aspire.Cli.Resources; using Aspire.Cli.Telemetry; using Aspire.Cli.Utils; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using Spectre.Console; namespace Aspire.Cli.Commands; internal interface IPublishCommandPrompter { Task<string> PromptForPublisherAsync(IEnumerable<string> publishers, CancellationToken cancellationToken); } internal class PublishCommandPrompter(IInteractionService interactionService) : IPublishCommandPrompter { public virtual async Task<string> PromptForPublisherAsync(IEnumerable<string> publishers, CancellationToken cancellationToken) { return await interactionService.PromptForSelectionAsync( PublishCommandStrings.SelectAPublisher, publishers, p => p.EscapeMarkup(), cancellationToken ); } } internal sealed class PublishCommand : PipelineCommandBase { internal override HelpGroup HelpGroup => HelpGroup.Deployment; private readonly IPublishCommandPrompter _prompter; public PublishCommand(IDotNetCliRunner runner, IInteractionService interactionService, IProjectLocator projectLocator, IPublishCommandPrompter prompter, AspireCliTelemetry telemetry, IFeatures features, ICliUpdateNotifier updateNotifier, CliExecutionContext executionContext, ICliHostEnvironment hostEnvironment, IAppHostProjectFactory projectFactory, IConfiguration configuration, ILogger<PublishCommand> logger, IAnsiConsole ansiConsole) : base("publish", PublishCommandStrings.Description, runner, interactionService, projectLocator, telemetry, features, updateNotifier, executionContext, hostEnvironment, projectFactory, configuration, logger, ansiConsole) { _prompter = prompter; } protected override string OperationCompletedPrefix => PublishCommandStrings.OperationCompletedPrefix; protected override string OperationFailedPrefix => PublishCommandStrings.OperationFailedPrefix; protected override string GetOutputPathDescription() => PublishCommandStrings.OutputPathArgumentDescription; protected override Task<string[]> GetRunArgumentsAsync(string? fullyQualifiedOutputPath, string[] unmatchedTokens, ParseResult parseResult, CancellationToken cancellationToken) { var baseArgs = new List<string> { "--operation", "publish", "--step", "publish" }; if (fullyQualifiedOutputPath is not null) { baseArgs.AddRange(["--output-path", fullyQualifiedOutputPath]); } // Add --log-level and --envionment flags if specified var logLevel = parseResult.GetValue(s_logLevelOption); if (!string.IsNullOrEmpty(logLevel)) { baseArgs.AddRange(["--log-level", logLevel!]); } var includeExceptionDetails = parseResult.GetValue(s_includeExceptionDetailsOption); if (includeExceptionDetails) { baseArgs.AddRange(["--include-exception-details", "true"]); } var environment = parseResult.GetValue(s_environmentOption); if (!string.IsNullOrEmpty(environment)) { baseArgs.AddRange(["--environment", environment!]); } baseArgs.AddRange(unmatchedTokens); return Task.FromResult<string[]>([.. baseArgs]); } protected override string GetCanceledMessage() => InteractionServiceStrings.OperationCancelled; protected override string GetProgressMessage(ParseResult parseResult) => "Executing step publish"; }