File: src\Shared\PublishValidationExtensions.cs
Web Access
Project: src\src\Aspire.Hosting.Go\Aspire.Hosting.Go.csproj (Aspire.Hosting.Go)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Aspire.Hosting.ApplicationModel;
using Aspire.Hosting.Pipelines;
 
namespace Aspire.Hosting;
 
internal static class PublishValidationExtensions
{
    internal static PipelineStep AddPublishValidation(
        this IResourceBuilder<ContainerResource> builder,
        string stepName,
        string description,
        string[] requiredBySteps,
        Action<PipelineStepContext> validate)
    {
        var step = new PipelineStep
        {
            Name = stepName,
            Description = description,
            RequiredBySteps = [.. requiredBySteps],
            Resource = builder.Resource,
            Action = context =>
            {
                // Exclusion can be configured after registration. An unpublished resource must not fail validation.
                if (!builder.Resource.IsExcludedFromPublish())
                {
                    validate(context);
                }
 
                return Task.CompletedTask;
            }
        };
 
        // WithDockerfile replaces container step annotations, so keep validation in the application pipeline.
        builder.ApplicationBuilder.Pipeline.AddStep(step);
        builder.WithPipelineConfiguration(context =>
        {
            // Azure deploy graphs select BuildCompute directly, without the aggregate Build or Publish steps.
            context.GetSteps(builder.Resource, WellKnownPipelineTags.BuildCompute).DependsOn(stepName);
        });
 
        return step;
    }
}