File: Publishing\PublishingExtensions.cs
Web Access
Project: src\src\Aspire.Hosting\Aspire.Hosting.csproj (Aspire.Hosting)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
#pragma warning disable ASPIREPUBLISHERS001
 
using System.Diagnostics.CodeAnalysis;
 
namespace Aspire.Hosting.Publishing;
 
/// <summary>
/// Extension methods for <see cref="IPublishingStep"/> and <see cref="IPublishingTask"/> to provide direct operations.
/// </summary>
[Experimental("ASPIREPUBLISHERS001", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")]
public static class PublishingExtensions
{
    /// <summary>
    /// Completes a publishing step successfully.
    /// </summary>
    /// <param name="step">The step to complete.</param>
    /// <param name="message">Optional completion message.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns>The completed step.</returns>
    public static async Task<IPublishingStep> SucceedAsync(
        this IPublishingStep step,
        string? message = null,
        CancellationToken cancellationToken = default)
    {
        var completionText = message ?? "Completed successfully";
        await step.CompleteAsync(completionText, CompletionState.Completed, cancellationToken).ConfigureAwait(false);
        return step;
    }
 
    /// <summary>
    /// Completes a publishing step with a warning.
    /// </summary>
    /// <param name="step">The step to complete.</param>
    /// <param name="message">Optional completion message.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns>The completed step.</returns>
    public static async Task<IPublishingStep> WarnAsync(
        this IPublishingStep step,
        string? message = null,
        CancellationToken cancellationToken = default)
    {
        var completionText = message ?? "Completed with warnings";
        await step.CompleteAsync(completionText, CompletionState.CompletedWithWarning, cancellationToken).ConfigureAwait(false);
        return step;
    }
 
    /// <summary>
    /// Completes a publishing step with an error.
    /// </summary>
    /// <param name="step">The step to complete.</param>
    /// <param name="errorMessage">Optional error message.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns>The completed step.</returns>
    public static async Task<IPublishingStep> FailAsync(
        this IPublishingStep step,
        string? errorMessage = null,
        CancellationToken cancellationToken = default)
    {
        var completionText = errorMessage ?? "Failed";
        await step.CompleteAsync(completionText, CompletionState.CompletedWithError, cancellationToken).ConfigureAwait(false);
        return step;
    }
 
    /// <summary>
    /// Updates the status text of a publishing task.
    /// </summary>
    /// <param name="task">The task to update.</param>
    /// <param name="statusText">The new status text.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns>The updated task.</returns>
    public static async Task<IPublishingTask> UpdateStatusAsync(
        this IPublishingTask task,
        string statusText,
        CancellationToken cancellationToken = default)
    {
        await task.UpdateAsync(statusText, cancellationToken).ConfigureAwait(false);
        return task;
    }
 
    /// <summary>
    /// Completes a publishing task successfully.
    /// </summary>
    /// <param name="task">The task to complete.</param>
    /// <param name="message">Optional completion message.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns>The completed task.</returns>
    public static async Task<IPublishingTask> SucceedAsync(
        this IPublishingTask task,
        string? message = null,
        CancellationToken cancellationToken = default)
    {
        await task.CompleteAsync(message, CompletionState.Completed, cancellationToken).ConfigureAwait(false);
        return task;
    }
 
    /// <summary>
    /// Completes a publishing task with a warning.
    /// </summary>
    /// <param name="task">The task to complete.</param>
    /// <param name="message">Optional completion message.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns>The completed task.</returns>
    public static async Task<IPublishingTask> WarnAsync(
        this IPublishingTask task,
        string? message = null,
        CancellationToken cancellationToken = default)
    {
        await task.CompleteAsync(message, CompletionState.CompletedWithWarning, cancellationToken).ConfigureAwait(false);
        return task;
    }
 
    /// <summary>
    /// Completes a publishing task with an error.
    /// </summary>
    /// <param name="task">The task to complete.</param>
    /// <param name="errorMessage">Optional error message.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns>The completed task.</returns>
    public static async Task<IPublishingTask> FailAsync(
        this IPublishingTask task,
        string? errorMessage = null,
        CancellationToken cancellationToken = default)
    {
        await task.CompleteAsync(errorMessage, CompletionState.CompletedWithError, cancellationToken).ConfigureAwait(false);
        return task;
    }
}