diff --git a/src/Aspire.Hosting.Azure.AppContainers/AzureContainerAppEnvironmentResource.cs b/src/Aspire.Hosting.Azure.AppContainers/AzureContainerAppEnvironmentResource.cs index 3db03cdc41a..03d7a9821f0 100644 --- a/src/Aspire.Hosting.Azure.AppContainers/AzureContainerAppEnvironmentResource.cs +++ b/src/Aspire.Hosting.Azure.AppContainers/AzureContainerAppEnvironmentResource.cs @@ -35,6 +35,7 @@ public AzureContainerAppEnvironmentResource(string name, Action AzureEnvironmentResourceHelpers.LoginToRegistryAsync(this, context), Tags = ["acr-login"] }; @@ -43,6 +44,7 @@ public AzureContainerAppEnvironmentResource(string name, Action PrintDashboardUrlAsync(ctx), Tags = ["print-summary"], DependsOnSteps = [AzureEnvironmentResource.ProvisionInfrastructureStepName], diff --git a/src/Aspire.Hosting.Azure.AppContainers/AzureContainerAppResource.cs b/src/Aspire.Hosting.Azure.AppContainers/AzureContainerAppResource.cs index 9aef3bf7acb..45646fa3a0f 100644 --- a/src/Aspire.Hosting.Azure.AppContainers/AzureContainerAppResource.cs +++ b/src/Aspire.Hosting.Azure.AppContainers/AzureContainerAppResource.cs @@ -48,6 +48,7 @@ public AzureContainerAppResource(string name, Action { var containerImageBuilder = ctx.Services.GetRequiredService(); @@ -74,6 +75,7 @@ await AzureEnvironmentResourceHelpers.PushImageToRegistryAsync( var printResourceSummary = new PipelineStep { Name = $"print-{targetResource.Name}-summary", + Description = $"Prints the deployment summary and URL for {targetResource.Name}.", Action = async ctx => { var containerAppEnv = (AzureContainerAppEnvironmentResource)deploymentTargetAnnotation.ComputeEnvironment!; @@ -98,6 +100,7 @@ await AzureEnvironmentResourceHelpers.PushImageToRegistryAsync( var deployStep = new PipelineStep { Name = $"deploy-{targetResource.Name}", + Description = $"Aggregation step for deploying {targetResource.Name} to Azure Container Apps.", Action = _ => Task.CompletedTask, Tags = [WellKnownPipelineTags.DeployCompute] }; diff --git a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs index b714c293806..5750cce49ff 100644 --- a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs +++ b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs @@ -38,6 +38,7 @@ public AzureAppServiceEnvironmentResource(string name, Action AzureEnvironmentResourceHelpers.LoginToRegistryAsync(this, context), Tags = ["acr-login"] }; @@ -46,6 +47,7 @@ public AzureAppServiceEnvironmentResource(string name, Action PrintDashboardUrlAsync(ctx), Tags = ["print-summary"], DependsOnSteps = [AzureEnvironmentResource.ProvisionInfrastructureStepName], diff --git a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceWebSiteResource.cs b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceWebSiteResource.cs index b6faeadc0e3..d5fbf5bf2c2 100644 --- a/src/Aspire.Hosting.Azure.AppService/AzureAppServiceWebSiteResource.cs +++ b/src/Aspire.Hosting.Azure.AppService/AzureAppServiceWebSiteResource.cs @@ -48,6 +48,7 @@ public AzureAppServiceWebSiteResource(string name, Action { var containerImageBuilder = ctx.Services.GetRequiredService(); @@ -72,6 +73,7 @@ await AzureEnvironmentResourceHelpers.PushImageToRegistryAsync( var printResourceSummary = new PipelineStep { Name = $"print-{targetResource.Name}-summary", + Description = $"Prints the deployment summary and URL for {targetResource.Name}.", Action = async ctx => { var computerEnv = (AzureAppServiceEnvironmentResource)deploymentTargetAnnotation.ComputeEnvironment!; @@ -93,6 +95,7 @@ await AzureEnvironmentResourceHelpers.PushImageToRegistryAsync( var deployStep = new PipelineStep { Name = $"deploy-{targetResource.Name}", + Description = $"Aggregation step for deploying {targetResource.Name} to Azure App Service.", Action = _ => Task.CompletedTask, Tags = [WellKnownPipelineTags.DeployCompute] }; diff --git a/src/Aspire.Hosting.Azure/AzureBicepResource.cs b/src/Aspire.Hosting.Azure/AzureBicepResource.cs index 232da290592..079c9224576 100644 --- a/src/Aspire.Hosting.Azure/AzureBicepResource.cs +++ b/src/Aspire.Hosting.Azure/AzureBicepResource.cs @@ -49,6 +49,7 @@ public AzureBicepResource(string name, string? templateFile = null, string? temp var provisionStep = new PipelineStep { Name = $"provision-{name}", + Description = $"Provisions the Azure Bicep resource {name} using Azure infrastructure.", Action = async ctx => await ProvisionAzureBicepResourceAsync(ctx, this).ConfigureAwait(false), Tags = [WellKnownPipelineTags.ProvisionInfrastructure] }; diff --git a/src/Aspire.Hosting.Azure/AzureEnvironmentResource.cs b/src/Aspire.Hosting.Azure/AzureEnvironmentResource.cs index 84d30fb889e..34fbcd659c3 100644 --- a/src/Aspire.Hosting.Azure/AzureEnvironmentResource.cs +++ b/src/Aspire.Hosting.Azure/AzureEnvironmentResource.cs @@ -71,6 +71,7 @@ public AzureEnvironmentResource(string name, ParameterResource location, Paramet var publishStep = new PipelineStep { Name = $"publish-{Name}", + Description = $"Publishes the Azure environment configuration for {Name}.", Action = ctx => PublishAsync(ctx), RequiredBySteps = [WellKnownPipelineSteps.Publish], DependsOnSteps = [WellKnownPipelineSteps.PublishPrereq] @@ -79,6 +80,7 @@ public AzureEnvironmentResource(string name, ParameterResource location, Paramet var validateStep = new PipelineStep { Name = "validate-azure-login", + Description = "Validates Azure CLI authentication before deployment.", Action = ctx => ValidateAzureLoginAsync(ctx), RequiredBySteps = [WellKnownPipelineSteps.Deploy], DependsOnSteps = [WellKnownPipelineSteps.DeployPrereq] @@ -87,6 +89,7 @@ public AzureEnvironmentResource(string name, ParameterResource location, Paramet var createContextStep = new PipelineStep { Name = CreateProvisioningContextStepName, + Description = "Creates the Azure provisioning context for infrastructure deployment.", Action = async ctx => { var provisioningContextProvider = ctx.Services.GetRequiredService(); @@ -101,6 +104,7 @@ public AzureEnvironmentResource(string name, ParameterResource location, Paramet var provisionStep = new PipelineStep { Name = ProvisionInfrastructureStepName, + Description = "Aggregation step for all Azure infrastructure provisioning operations.", Action = _ => Task.CompletedTask, Tags = [WellKnownPipelineTags.ProvisionInfrastructure], RequiredBySteps = [WellKnownPipelineSteps.Deploy], diff --git a/src/Aspire.Hosting.Docker/DockerComposeEnvironmentResource.cs b/src/Aspire.Hosting.Docker/DockerComposeEnvironmentResource.cs index ad000716887..0c98eadf181 100644 --- a/src/Aspire.Hosting.Docker/DockerComposeEnvironmentResource.cs +++ b/src/Aspire.Hosting.Docker/DockerComposeEnvironmentResource.cs @@ -64,6 +64,7 @@ public DockerComposeEnvironmentResource(string name) : base(name) var publishStep = new PipelineStep { Name = $"publish-{Name}", + Description = $"Publishes the Docker Compose environment configuration for {Name}.", Action = ctx => PublishAsync(ctx) }; publishStep.RequiredBy(WellKnownPipelineSteps.Publish); @@ -102,6 +103,7 @@ public DockerComposeEnvironmentResource(string name) : base(name) var prepareStep = new PipelineStep { Name = $"prepare-{Name}", + Description = $"Prepares the Docker Compose environment {Name} for deployment.", Action = ctx => PrepareAsync(ctx) }; prepareStep.DependsOn(WellKnownPipelineSteps.Publish); diff --git a/src/Aspire.Hosting.Kubernetes/KubernetesEnvironmentResource.cs b/src/Aspire.Hosting.Kubernetes/KubernetesEnvironmentResource.cs index 080891a757e..36871ca8d96 100644 --- a/src/Aspire.Hosting.Kubernetes/KubernetesEnvironmentResource.cs +++ b/src/Aspire.Hosting.Kubernetes/KubernetesEnvironmentResource.cs @@ -91,6 +91,7 @@ public KubernetesEnvironmentResource(string name) : base(name) var step = new PipelineStep { Name = $"publish-{Name}", + Description = $"Publishes the Kubernetes environment configuration for {Name}.", Action = ctx => PublishAsync(ctx) }; step.RequiredBy(WellKnownPipelineSteps.Publish); diff --git a/src/Aspire.Hosting/ApplicationModel/ProjectResource.cs b/src/Aspire.Hosting/ApplicationModel/ProjectResource.cs index 096c8654c38..fd29bb105c5 100644 --- a/src/Aspire.Hosting/ApplicationModel/ProjectResource.cs +++ b/src/Aspire.Hosting/ApplicationModel/ProjectResource.cs @@ -39,6 +39,7 @@ public ProjectResource(string name) : base(name) var buildStep = new PipelineStep { Name = $"build-{name}", + Description = $"Builds the container image for the {name} project.", Action = BuildProjectImage, Tags = [WellKnownPipelineTags.BuildCompute], RequiredBySteps = [WellKnownPipelineSteps.Build], diff --git a/src/Aspire.Hosting/ContainerResourceBuilderExtensions.cs b/src/Aspire.Hosting/ContainerResourceBuilderExtensions.cs index 6eca3777765..f31ff19c1ee 100644 --- a/src/Aspire.Hosting/ContainerResourceBuilderExtensions.cs +++ b/src/Aspire.Hosting/ContainerResourceBuilderExtensions.cs @@ -39,6 +39,7 @@ internal static IResourceBuilder EnsureBuildPipelineStepAnnotation(this IR var buildStep = new PipelineStep { Name = $"build-{builder.Resource.Name}", + Description = $"Builds the container image for the {builder.Resource.Name} container.", Action = async ctx => { var containerImageBuilder = ctx.Services.GetRequiredService(); diff --git a/src/Aspire.Hosting/Pipelines/DistributedApplicationPipeline.cs b/src/Aspire.Hosting/Pipelines/DistributedApplicationPipeline.cs index 444d26ad463..e01b3951986 100644 --- a/src/Aspire.Hosting/Pipelines/DistributedApplicationPipeline.cs +++ b/src/Aspire.Hosting/Pipelines/DistributedApplicationPipeline.cs @@ -36,12 +36,14 @@ public DistributedApplicationPipeline() _steps.Add(new PipelineStep { Name = WellKnownPipelineSteps.Deploy, + Description = "Aggregation step for all deploy operations. All deploy steps should be required by this step.", Action = _ => Task.CompletedTask, }); var parameterPromptingStep = new PipelineStep { Name = WellKnownPipelineSteps.ProcessParameters, + Description = "Prompts for parameter values before build, publish, or deployment operations.", Action = async context => { // Parameter processing - ensure all parameters are initialized and resolved @@ -57,6 +59,7 @@ public DistributedApplicationPipeline() _steps.Add(new PipelineStep { Name = WellKnownPipelineSteps.DeployPrereq, + Description = "Prerequisite step that runs before any deploy operations. Initializes deployment environment and manages deployment state.", Action = async context => { // REVIEW: Break this up into smaller steps @@ -138,25 +141,29 @@ public DistributedApplicationPipeline() _steps.Add(new PipelineStep { Name = WellKnownPipelineSteps.Build, + Description = "Aggregation step for all build operations. All build steps should be required by this step.", Action = _ => Task.CompletedTask, }); _steps.Add(new PipelineStep { Name = WellKnownPipelineSteps.BuildPrereq, + Description = "Prerequisite step that runs before any build operations.", Action = context => Task.CompletedTask }); - // Add a default "Publish" meta-step that all publish steps should be required by + // Add a default "Publish" aggregation step that all publish steps should be required by _steps.Add(new PipelineStep { Name = WellKnownPipelineSteps.Publish, + Description = "Aggregation step for all publish operations. All publish steps should be required by this step.", Action = _ => Task.CompletedTask }); _steps.Add(new PipelineStep { Name = WellKnownPipelineSteps.PublishPrereq, + Description = "Prerequisite step that runs before any publish operations.", Action = _ => Task.CompletedTask, }); @@ -164,6 +171,7 @@ public DistributedApplicationPipeline() _steps.Add(new PipelineStep { Name = WellKnownPipelineSteps.Diagnostics, + Description = "Dumps dependency graph information for troubleshooting pipeline execution.", Action = async context => { // Use the resolved pipeline data from the last ExecuteAsync call @@ -805,7 +813,7 @@ private static void DumpDependencyGraphDiagnostics( // Detailed step analysis sb.AppendLine("DETAILED STEP ANALYSIS"); sb.AppendLine("======================"); - sb.AppendLine("Shows each step's dependencies, associated resources, and tags."); + sb.AppendLine("Shows each step's dependencies, associated resources, tags, and descriptions."); sb.AppendLine("✓ = dependency exists, ? = dependency missing"); sb.AppendLine(); @@ -813,6 +821,12 @@ private static void DumpDependencyGraphDiagnostics( { sb.AppendLine(CultureInfo.InvariantCulture, $"Step: {step.Name}"); + // Show description if available + if (!string.IsNullOrWhiteSpace(step.Description)) + { + sb.AppendLine(CultureInfo.InvariantCulture, $" Description: {step.Description}"); + } + // Show dependencies if (step.DependsOnSteps.Count > 0) { diff --git a/src/Aspire.Hosting/Pipelines/PipelineStep.cs b/src/Aspire.Hosting/Pipelines/PipelineStep.cs index d2011b7aed5..74f9e08f426 100644 --- a/src/Aspire.Hosting/Pipelines/PipelineStep.cs +++ b/src/Aspire.Hosting/Pipelines/PipelineStep.cs @@ -19,6 +19,15 @@ public class PipelineStep /// public required string Name { get; init; } + /// + /// Gets or initializes the description of the step. + /// + /// + /// The description provides human-readable context about what the step does, + /// helping users and tools understand the purpose of the step. + /// + public string? Description { get; init; } + /// /// Gets or initializes the action to execute for this step. /// diff --git a/src/Aspire.Hosting/Pipelines/WellKnownPipelineSteps.cs b/src/Aspire.Hosting/Pipelines/WellKnownPipelineSteps.cs index fa6796fc20d..7d15fb4d325 100644 --- a/src/Aspire.Hosting/Pipelines/WellKnownPipelineSteps.cs +++ b/src/Aspire.Hosting/Pipelines/WellKnownPipelineSteps.cs @@ -12,7 +12,7 @@ namespace Aspire.Hosting.Pipelines; public static class WellKnownPipelineSteps { /// - /// The meta-step that coordinates all publish operations. + /// Aggregation step for all publish operations. /// All publish steps should be required by this step. /// public const string Publish = "publish"; @@ -23,7 +23,7 @@ public static class WellKnownPipelineSteps public const string PublishPrereq = "publish-prereq"; /// - /// The meta-step that coordinates all deploy operations. + /// Aggregation step for all deploy operations. /// All deploy steps should be required by this step. /// public const string Deploy = "deploy"; diff --git a/src/Aspire.Hosting/Publishing/ManifestPublishingExtensions.cs b/src/Aspire.Hosting/Publishing/ManifestPublishingExtensions.cs index cd3ce593111..05df047d31a 100644 --- a/src/Aspire.Hosting/Publishing/ManifestPublishingExtensions.cs +++ b/src/Aspire.Hosting/Publishing/ManifestPublishingExtensions.cs @@ -26,6 +26,7 @@ public static IDistributedApplicationPipeline AddManifestPublishing(this IDistri var step = new PipelineStep { Name = "publish-manifest", + Description = "Publishes the Aspire application model as a JSON manifest file.", Action = async context => { var loggerFactory = context.Services.GetRequiredService(); diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithAzureResourceDependencies_DoesNotHang_step=diagnostics.verified.txt b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithAzureResourceDependencies_DoesNotHang_step=diagnostics.verified.txt index 3567c3f7f46..c3bfd6d3fa2 100644 --- a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithAzureResourceDependencies_DoesNotHang_step=diagnostics.verified.txt +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithAzureResourceDependencies_DoesNotHang_step=diagnostics.verified.txt @@ -41,105 +41,129 @@ Steps with no dependencies run first, followed by steps that depend on them. DETAILED STEP ANALYSIS ====================== -Shows each step's dependencies, associated resources, and tags. +Shows each step's dependencies, associated resources, tags, and descriptions. ✓ = dependency exists, ? = dependency missing Step: build + Description: Aggregation step for all build operations. All build steps should be required by this step. Dependencies: ✓ build-api Step: build-api + Description: Builds the container image for the api project. Dependencies: ✓ build-prereq, ✓ deploy-prereq Resource: api (ProjectResource) Tags: build-compute Step: build-prereq + Description: Prerequisite step that runs before any build operations. Dependencies: ✓ process-parameters Step: create-provisioning-context + Description: Creates the Azure provisioning context for infrastructure deployment. Dependencies: ✓ deploy-prereq, ✓ validate-azure-login Resource: azure634f9 (AzureEnvironmentResource) Step: deploy + Description: Aggregation step for all deploy operations. All deploy steps should be required by this step. Dependencies: ✓ build-api, ✓ create-provisioning-context, ✓ print-api-summary, ✓ print-dashboard-url-env, ✓ provision-azure-bicep-resources, ✓ validate-azure-login Step: deploy-api + Description: Aggregation step for deploying api to Azure App Service. Dependencies: ✓ print-api-summary Resource: api-website (AzureAppServiceWebSiteResource) Tags: deploy-compute Step: deploy-prereq + Description: Prerequisite step that runs before any deploy operations. Initializes deployment environment and manages deployment state. Dependencies: ✓ process-parameters Step: diagnostics + Description: Dumps dependency graph information for troubleshooting pipeline execution. Dependencies: none Step: login-to-acr-env + Description: Logs in to Azure Container Registry for env. Dependencies: ✓ provision-env Resource: env (AzureAppServiceEnvironmentResource) Tags: acr-login Step: print-api-summary + Description: Prints the deployment summary and URL for api. Dependencies: ✓ provision-api-website Resource: api-website (AzureAppServiceWebSiteResource) Tags: print-summary Step: print-dashboard-url-env + Description: Prints the deployment summary and dashboard URL for env. Dependencies: ✓ provision-azure-bicep-resources, ✓ provision-env Resource: env (AzureAppServiceEnvironmentResource) Tags: print-summary Step: process-parameters + Description: Prompts for parameter values before build, publish, or deployment operations. Dependencies: none Step: provision-api-identity + Description: Provisions the Azure Bicep resource api-identity using Azure infrastructure. Dependencies: ✓ create-provisioning-context Resource: api-identity (AzureUserAssignedIdentityResource) Tags: provision-infra Step: provision-api-roles-kv + Description: Provisions the Azure Bicep resource api-roles-kv using Azure infrastructure. Dependencies: ✓ create-provisioning-context, ✓ provision-api-identity, ✓ provision-kv Resource: api-roles-kv (AzureProvisioningResource) Tags: provision-infra Step: provision-api-website + Description: Provisions the Azure Bicep resource api-website using Azure infrastructure. Dependencies: ✓ create-provisioning-context, ✓ provision-api-identity, ✓ provision-env, ✓ provision-kv, ✓ push-api Resource: api-website (AzureAppServiceWebSiteResource) Tags: provision-infra Step: provision-azure-bicep-resources + Description: Aggregation step for all Azure infrastructure provisioning operations. Dependencies: ✓ create-provisioning-context, ✓ deploy-prereq, ✓ provision-api-identity, ✓ provision-api-roles-kv, ✓ provision-api-website, ✓ provision-env, ✓ provision-kv Resource: azure634f9 (AzureEnvironmentResource) Tags: provision-infra Step: provision-env + Description: Provisions the Azure Bicep resource env using Azure infrastructure. Dependencies: ✓ create-provisioning-context Resource: env (AzureAppServiceEnvironmentResource) Tags: provision-infra Step: provision-kv + Description: Provisions the Azure Bicep resource kv using Azure infrastructure. Dependencies: ✓ create-provisioning-context Resource: kv (AzureKeyVaultResource) Tags: provision-infra Step: publish + Description: Aggregation step for all publish operations. All publish steps should be required by this step. Dependencies: ✓ publish-azure634f9 Step: publish-azure634f9 + Description: Publishes the Azure environment configuration for azure634f9. Dependencies: ✓ publish-prereq Resource: azure634f9 (AzureEnvironmentResource) Step: publish-manifest + Description: Publishes the Aspire application model as a JSON manifest file. Dependencies: none Step: publish-prereq + Description: Prerequisite step that runs before any publish operations. Dependencies: ✓ process-parameters Step: push-api + Description: Pushes the container image for api to Azure Container Registry. Dependencies: ✓ build-api, ✓ login-to-acr-env, ✓ provision-env Resource: api-website (AzureAppServiceWebSiteResource) Tags: push-container-image Step: validate-azure-login + Description: Validates Azure CLI authentication before deployment. Dependencies: ✓ deploy-prereq Resource: azure634f9 (AzureEnvironmentResource) diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithMultipleComputeEnvironments_Works_step=diagnostics.verified.txt b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithMultipleComputeEnvironments_Works_step=diagnostics.verified.txt index 8a5f2872be5..d06ef1dabe6 100644 --- a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithMultipleComputeEnvironments_Works_step=diagnostics.verified.txt +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithMultipleComputeEnvironments_Works_step=diagnostics.verified.txt @@ -50,150 +50,183 @@ Steps with no dependencies run first, followed by steps that depend on them. DETAILED STEP ANALYSIS ====================== -Shows each step's dependencies, associated resources, and tags. +Shows each step's dependencies, associated resources, tags, and descriptions. ✓ = dependency exists, ? = dependency missing Step: build + Description: Aggregation step for all build operations. All build steps should be required by this step. Dependencies: ✓ build-api-service, ✓ build-python-app Step: build-api-service + Description: Builds the container image for the api-service project. Dependencies: ✓ build-prereq, ✓ deploy-prereq, ✓ deploy-prereq Resource: api-service (ProjectResource) Tags: build-compute Step: build-prereq + Description: Prerequisite step that runs before any build operations. Dependencies: ✓ process-parameters Step: build-python-app + Description: Builds the container image for the python-app container. Dependencies: ✓ build-prereq, ✓ deploy-prereq, ✓ deploy-prereq Resource: python-app (ContainerResource) Tags: build-compute Step: create-provisioning-context + Description: Creates the Azure provisioning context for infrastructure deployment. Dependencies: ✓ deploy-prereq, ✓ validate-azure-login Resource: azure634f9 (AzureEnvironmentResource) Step: deploy + Description: Aggregation step for all deploy operations. All deploy steps should be required by this step. Dependencies: ✓ build-api-service, ✓ build-python-app, ✓ create-provisioning-context, ✓ print-api-service-summary, ✓ print-cache-summary, ✓ print-dashboard-url-aas-env, ✓ print-dashboard-url-aca-env, ✓ print-python-app-summary, ✓ provision-azure-bicep-resources, ✓ validate-azure-login Step: deploy-api-service + Description: Aggregation step for deploying api-service to Azure App Service. Dependencies: ✓ print-api-service-summary Resource: api-service-website (AzureAppServiceWebSiteResource) Tags: deploy-compute Step: deploy-cache + Description: Aggregation step for deploying cache to Azure Container Apps. Dependencies: ✓ print-cache-summary Resource: cache-containerapp (AzureContainerAppResource) Tags: deploy-compute Step: deploy-prereq + Description: Prerequisite step that runs before any deploy operations. Initializes deployment environment and manages deployment state. Dependencies: ✓ process-parameters Step: deploy-python-app + Description: Aggregation step for deploying python-app to Azure Container Apps. Dependencies: ✓ print-python-app-summary Resource: python-app-containerapp (AzureContainerAppResource) Tags: deploy-compute Step: diagnostics + Description: Dumps dependency graph information for troubleshooting pipeline execution. Dependencies: none Step: login-to-acr-aas-env + Description: Logs in to Azure Container Registry for aas-env. Dependencies: ✓ provision-aas-env Resource: aas-env (AzureAppServiceEnvironmentResource) Tags: acr-login Step: login-to-acr-aca-env + Description: Logs in to Azure Container Registry for aca-env. Dependencies: ✓ provision-aca-env Resource: aca-env (AzureContainerAppEnvironmentResource) Tags: acr-login Step: print-api-service-summary + Description: Prints the deployment summary and URL for api-service. Dependencies: ✓ provision-api-service-website Resource: api-service-website (AzureAppServiceWebSiteResource) Tags: print-summary Step: print-cache-summary + Description: Prints the deployment summary and URL for cache. Dependencies: ✓ provision-cache-containerapp Resource: cache-containerapp (AzureContainerAppResource) Tags: print-summary Step: print-dashboard-url-aas-env + Description: Prints the deployment summary and dashboard URL for aas-env. Dependencies: ✓ provision-aas-env, ✓ provision-azure-bicep-resources Resource: aas-env (AzureAppServiceEnvironmentResource) Tags: print-summary Step: print-dashboard-url-aca-env + Description: Prints the deployment summary and dashboard URL for aca-env. Dependencies: ✓ provision-aca-env, ✓ provision-azure-bicep-resources Resource: aca-env (AzureContainerAppEnvironmentResource) Tags: print-summary Step: print-python-app-summary + Description: Prints the deployment summary and URL for python-app. Dependencies: ✓ provision-python-app-containerapp Resource: python-app-containerapp (AzureContainerAppResource) Tags: print-summary Step: process-parameters + Description: Prompts for parameter values before build, publish, or deployment operations. Dependencies: none Step: provision-aas-env + Description: Provisions the Azure Bicep resource aas-env using Azure infrastructure. Dependencies: ✓ create-provisioning-context Resource: aas-env (AzureAppServiceEnvironmentResource) Tags: provision-infra Step: provision-aca-env + Description: Provisions the Azure Bicep resource aca-env using Azure infrastructure. Dependencies: ✓ create-provisioning-context Resource: aca-env (AzureContainerAppEnvironmentResource) Tags: provision-infra Step: provision-api-service-website + Description: Provisions the Azure Bicep resource api-service-website using Azure infrastructure. Dependencies: ✓ create-provisioning-context, ✓ provision-aas-env, ✓ push-api-service Resource: api-service-website (AzureAppServiceWebSiteResource) Tags: provision-infra Step: provision-azure-bicep-resources + Description: Aggregation step for all Azure infrastructure provisioning operations. Dependencies: ✓ create-provisioning-context, ✓ deploy-prereq, ✓ provision-aas-env, ✓ provision-aca-env, ✓ provision-api-service-website, ✓ provision-cache-containerapp, ✓ provision-python-app-containerapp, ✓ provision-storage Resource: azure634f9 (AzureEnvironmentResource) Tags: provision-infra Step: provision-cache-containerapp + Description: Provisions the Azure Bicep resource cache-containerapp using Azure infrastructure. Dependencies: ✓ create-provisioning-context, ✓ provision-aca-env Resource: cache-containerapp (AzureContainerAppResource) Tags: provision-infra Step: provision-python-app-containerapp + Description: Provisions the Azure Bicep resource python-app-containerapp using Azure infrastructure. Dependencies: ✓ create-provisioning-context, ✓ provision-aca-env, ✓ push-python-app Resource: python-app-containerapp (AzureContainerAppResource) Tags: provision-infra Step: provision-storage + Description: Provisions the Azure Bicep resource storage using Azure infrastructure. Dependencies: ✓ create-provisioning-context Resource: storage (AzureStorageResource) Tags: provision-infra Step: publish + Description: Aggregation step for all publish operations. All publish steps should be required by this step. Dependencies: ✓ publish-azure634f9 Step: publish-azure634f9 + Description: Publishes the Azure environment configuration for azure634f9. Dependencies: ✓ publish-prereq Resource: azure634f9 (AzureEnvironmentResource) Step: publish-manifest + Description: Publishes the Aspire application model as a JSON manifest file. Dependencies: none Step: publish-prereq + Description: Prerequisite step that runs before any publish operations. Dependencies: ✓ process-parameters Step: push-api-service + Description: Pushes the container image for api-service to Azure Container Registry. Dependencies: ✓ build-api-service, ✓ login-to-acr-aas-env, ✓ provision-aas-env Resource: api-service-website (AzureAppServiceWebSiteResource) Tags: push-container-image Step: push-python-app + Description: Pushes the container image for python-app to Azure Container Registry. Dependencies: ✓ build-python-app, ✓ login-to-acr-aca-env, ✓ provision-aca-env Resource: python-app-containerapp (AzureContainerAppResource) Tags: push-container-image Step: validate-azure-login + Description: Validates Azure CLI authentication before deployment. Dependencies: ✓ deploy-prereq Resource: azure634f9 (AzureEnvironmentResource) diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithRedisAccessKeyAuthentication_CreatesCorrectDependencies.verified.txt b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithRedisAccessKeyAuthentication_CreatesCorrectDependencies.verified.txt index fcd3d83c83b..107388b54dc 100644 --- a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithRedisAccessKeyAuthentication_CreatesCorrectDependencies.verified.txt +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithRedisAccessKeyAuthentication_CreatesCorrectDependencies.verified.txt @@ -48,140 +48,171 @@ Steps with no dependencies run first, followed by steps that depend on them. DETAILED STEP ANALYSIS ====================== -Shows each step's dependencies, associated resources, and tags. +Shows each step's dependencies, associated resources, tags, and descriptions. ✓ = dependency exists, ? = dependency missing Step: build + Description: Aggregation step for all build operations. All build steps should be required by this step. Dependencies: ✓ build-api Step: build-api + Description: Builds the container image for the api project. Dependencies: ✓ build-prereq, ✓ deploy-prereq Resource: api (ProjectResource) Tags: build-compute Step: build-prereq + Description: Prerequisite step that runs before any build operations. Dependencies: ✓ process-parameters Step: create-provisioning-context + Description: Creates the Azure provisioning context for infrastructure deployment. Dependencies: ✓ deploy-prereq, ✓ validate-azure-login Resource: azure634f9 (AzureEnvironmentResource) Step: deploy + Description: Aggregation step for all deploy operations. All deploy steps should be required by this step. Dependencies: ✓ build-api, ✓ create-provisioning-context, ✓ print-api-summary, ✓ print-dashboard-url-env, ✓ provision-azure-bicep-resources, ✓ validate-azure-login Step: deploy-api + Description: Aggregation step for deploying api to Azure App Service. Dependencies: ✓ print-api-summary Resource: api-website (AzureAppServiceWebSiteResource) Tags: deploy-compute Step: deploy-prereq + Description: Prerequisite step that runs before any deploy operations. Initializes deployment environment and manages deployment state. Dependencies: ✓ process-parameters Step: diagnostics + Description: Dumps dependency graph information for troubleshooting pipeline execution. Dependencies: none Step: login-to-acr-env + Description: Logs in to Azure Container Registry for env. Dependencies: ✓ provision-env Resource: env (AzureAppServiceEnvironmentResource) Tags: acr-login Step: print-api-summary + Description: Prints the deployment summary and URL for api. Dependencies: ✓ provision-api-website Resource: api-website (AzureAppServiceWebSiteResource) Tags: print-summary Step: print-dashboard-url-env + Description: Prints the deployment summary and dashboard URL for env. Dependencies: ✓ provision-azure-bicep-resources, ✓ provision-env Resource: env (AzureAppServiceEnvironmentResource) Tags: print-summary Step: process-parameters + Description: Prompts for parameter values before build, publish, or deployment operations. Dependencies: none Step: provision-api-identity + Description: Provisions the Azure Bicep resource api-identity using Azure infrastructure. Dependencies: ✓ create-provisioning-context Resource: api-identity (AzureUserAssignedIdentityResource) Tags: provision-infra Step: provision-api-roles-cache-kv + Description: Provisions the Azure Bicep resource api-roles-cache-kv using Azure infrastructure. Dependencies: ✓ create-provisioning-context, ✓ provision-api-identity, ✓ provision-cache-kv Resource: api-roles-cache-kv (AzureProvisioningResource) Tags: provision-infra Step: provision-api-roles-cosmos-kv + Description: Provisions the Azure Bicep resource api-roles-cosmos-kv using Azure infrastructure. Dependencies: ✓ create-provisioning-context, ✓ provision-api-identity, ✓ provision-cosmos-kv Resource: api-roles-cosmos-kv (AzureProvisioningResource) Tags: provision-infra Step: provision-api-roles-pg-kv + Description: Provisions the Azure Bicep resource api-roles-pg-kv using Azure infrastructure. Dependencies: ✓ create-provisioning-context, ✓ provision-api-identity, ✓ provision-pg-kv Resource: api-roles-pg-kv (AzureProvisioningResource) Tags: provision-infra Step: provision-api-website + Description: Provisions the Azure Bicep resource api-website using Azure infrastructure. Dependencies: ✓ create-provisioning-context, ✓ provision-api-identity, ✓ provision-cache, ✓ provision-cache-kv, ✓ provision-cosmos, ✓ provision-cosmos-kv, ✓ provision-env, ✓ provision-pg, ✓ provision-pg-kv, ✓ push-api Resource: api-website (AzureAppServiceWebSiteResource) Tags: provision-infra Step: provision-azure-bicep-resources + Description: Aggregation step for all Azure infrastructure provisioning operations. Dependencies: ✓ create-provisioning-context, ✓ deploy-prereq, ✓ provision-api-identity, ✓ provision-api-roles-cache-kv, ✓ provision-api-roles-cosmos-kv, ✓ provision-api-roles-pg-kv, ✓ provision-api-website, ✓ provision-cache, ✓ provision-cache-kv, ✓ provision-cosmos, ✓ provision-cosmos-kv, ✓ provision-env, ✓ provision-pg, ✓ provision-pg-kv Resource: azure634f9 (AzureEnvironmentResource) Tags: provision-infra Step: provision-cache + Description: Provisions the Azure Bicep resource cache using Azure infrastructure. Dependencies: ✓ create-provisioning-context, ✓ provision-cache-kv Resource: cache (AzureManagedRedisResource) Tags: provision-infra Step: provision-cache-kv + Description: Provisions the Azure Bicep resource cache-kv using Azure infrastructure. Dependencies: ✓ create-provisioning-context Resource: cache-kv (AzureKeyVaultResource) Tags: provision-infra Step: provision-cosmos + Description: Provisions the Azure Bicep resource cosmos using Azure infrastructure. Dependencies: ✓ create-provisioning-context, ✓ provision-cosmos-kv Resource: cosmos (AzureCosmosDBResource) Tags: provision-infra Step: provision-cosmos-kv + Description: Provisions the Azure Bicep resource cosmos-kv using Azure infrastructure. Dependencies: ✓ create-provisioning-context Resource: cosmos-kv (AzureKeyVaultResource) Tags: provision-infra Step: provision-env + Description: Provisions the Azure Bicep resource env using Azure infrastructure. Dependencies: ✓ create-provisioning-context Resource: env (AzureAppServiceEnvironmentResource) Tags: provision-infra Step: provision-pg + Description: Provisions the Azure Bicep resource pg using Azure infrastructure. Dependencies: ✓ create-provisioning-context, ✓ provision-pg-kv Resource: pg (AzurePostgresFlexibleServerResource) Tags: provision-infra Step: provision-pg-kv + Description: Provisions the Azure Bicep resource pg-kv using Azure infrastructure. Dependencies: ✓ create-provisioning-context Resource: pg-kv (AzureKeyVaultResource) Tags: provision-infra Step: publish + Description: Aggregation step for all publish operations. All publish steps should be required by this step. Dependencies: ✓ publish-azure634f9 Step: publish-azure634f9 + Description: Publishes the Azure environment configuration for azure634f9. Dependencies: ✓ publish-prereq Resource: azure634f9 (AzureEnvironmentResource) Step: publish-manifest + Description: Publishes the Aspire application model as a JSON manifest file. Dependencies: none Step: publish-prereq + Description: Prerequisite step that runs before any publish operations. Dependencies: ✓ process-parameters Step: push-api + Description: Pushes the container image for api to Azure Container Registry. Dependencies: ✓ build-api, ✓ login-to-acr-env, ✓ provision-env Resource: api-website (AzureAppServiceWebSiteResource) Tags: push-container-image Step: validate-azure-login + Description: Validates Azure CLI authentication before deployment. Dependencies: ✓ deploy-prereq Resource: azure634f9 (AzureEnvironmentResource)