Skip to content

Add publisher output path contract#18875

Open
IEvangelist wants to merge 5 commits into
mainfrom
dapine/publisher-output-contract
Open

Add publisher output path contract#18875
IEvangelist wants to merge 5 commits into
mainfrom
dapine/publisher-output-contract

Conversation

@IEvangelist

Copy link
Copy Markdown
Member

Description

Custom pipeline publishers can currently write only through the primary --output-path contract. Publishers that also generate repository artifacts such as .configgen/ and .pipelines/ must discover roots themselves, and the CLI cannot safely inventory or relocate those writes for drift verification.

This change adds an experimental publisher output contract rooted at the AppHost project directory. Pipeline steps can declare named file or directory outputs, resolve the authoritative writable path at execution time, and use a separate logical target path when generated content refers to its checked-in destination.

User-facing usage

var inventoryDefinition = new PipelineOutputDefinition(
    "inventory",
    ".configgen",
    PipelineOutputKind.Directory);

var step = new PipelineStep
{
    Name = "generate-inventory",
    Outputs = [inventoryDefinition],
    SupportsOutputPathRelocation = true,
    Action = context =>
    {
        var inventory = context.Outputs.Resolve(inventoryDefinition);
        Directory.CreateDirectory(inventory.OutputPath);
        File.WriteAllText(
            Path.Combine(inventory.OutputPath, "inventory.txt"),
            inventory.LogicalTargetPath);
        return Task.CompletedTask;
    }
};

builder.Pipeline.AddStep(step);

context.Outputs.AppHostDirectory provides the authoritative AppHost root. Named targets can be overridden with Pipeline:Outputs:<step-name>:<output-name>:Path.

The runtime now freezes the selected step graph and output plan before BeforePublishEvent, exposes that plan through the versioned pipeline-outputs.v1 main-backchannel capability, and pauses relocated execution until the CLI explicitly authorizes it. Non-relocatable selected steps fail closed at authorization. Built-in manifest, Docker Compose, Kubernetes, Azure, Radius, EF Core, and JavaScript publishing steps now use or opt into this contract.

This is the output-contract prerequisite for aspire publish --verify in #18833; the CLI drift reconciliation is intentionally a follow-up.

Validation

  • Full repository build with native compilation skipped.
  • 27 focused Hosting output-plan and backchannel contract tests.
  • 26 CLI backchannel serializer and publish integration tests.
  • Targeted Docker, Kubernetes, Azure, EF Core, JavaScript, and Radius publisher tests.

Fixes #18873

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 55316bf5-3565-4b4d-bcc6-716c769618cc
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 55316bf5-3565-4b4d-bcc6-716c769618cc
Copilot AI review requested due to automatic review settings July 23, 2026 18:57
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 18875

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 18875"

@github-actions github-actions Bot added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Jul 23, 2026
@IEvangelist
IEvangelist marked this pull request as draft July 23, 2026 18:58
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a hosting-core output contract for publish/deploy pipeline steps, enabling safe output discovery and relocation.

Changes:

  • Introduces named output definitions, resolution, validation, and execution authorization.
  • Exposes output plans through the CLI backchannel.
  • Migrates built-in publishers and adds contract tests.

Reviewed changes

Copilot reviewed 31 out of 31 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
tests/Aspire.Hosting.Tests/Pipelines/PipelineOutputRegistryTests.cs Tests output planning and relocation.
tests/Aspire.Hosting.Tests/Backchannel/BackchannelContractTests.cs Covers new backchannel DTOs.
tests/Aspire.Cli.Tests/TestServices/TestAppHostCliBackchannel.cs Extends the test backchannel.
tests/Aspire.Cli.Tests/Commands/PublishCommandPromptingIntegrationTests.cs Updates the publish test double.
tests/Aspire.Cli.Tests/Backchannel/BackchannelJsonSerializerContextTests.cs Tests output-plan serialization.
src/Shared/PublishingContextUtils.cs Uses the resolved primary output.
src/Aspire.Hosting/README.md Documents publisher outputs.
src/Aspire.Hosting/Publishing/PipelineExecutor.cs Freezes and authorizes execution plans.
src/Aspire.Hosting/Publishing/ManifestPublishingExtensions.cs Adds manifest relocation support.
src/Aspire.Hosting/Publishing/BeforePublishEvent.cs Documents frozen-plan semantics.
src/Aspire.Hosting/Pipelines/ResolvedPipelineOutput.cs Defines resolved outputs.
src/Aspire.Hosting/Pipelines/PipelineStepContext.cs Exposes output resolution.
src/Aspire.Hosting/Pipelines/PipelineStep.cs Adds output declarations and relocation support.
src/Aspire.Hosting/Pipelines/PipelineOutputRegistry.cs Implements output planning and authorization.
src/Aspire.Hosting/Pipelines/PipelineOutputKind.cs Defines file and directory output kinds.
src/Aspire.Hosting/Pipelines/PipelineOutputDefinition.cs Defines named output metadata.
src/Aspire.Hosting/Pipelines/IPipelineOutputResolver.cs Defines output resolution APIs.
src/Aspire.Hosting/Pipelines/DistributedApplicationPipeline.cs Separates preparation from execution.
src/Aspire.Hosting/DistributedApplicationBuilder.cs Registers output services.
src/Aspire.Hosting/Backchannel/BackchannelDataTypes.cs Adds output-plan RPC contracts.
src/Aspire.Hosting/Backchannel/AppHostRpcTarget.cs Exposes output inspection and authorization.
src/Aspire.Hosting.Radius/Publishing/RadiusBicepPublishingContext.cs Enables Radius relocation.
src/Aspire.Hosting.Kubernetes/KubernetesEnvironmentResource.cs Enables Kubernetes relocation.
src/Aspire.Hosting.JavaScript/JavaScriptHostingExtensions.cs Marks validation as relocation-safe.
src/Aspire.Hosting.EntityFrameworkCore/EFResourceBuilderExtensions.cs Routes EF artifacts through primary output.
src/Aspire.Hosting.EntityFrameworkCore/EFMigrationResourceBuilderExtensions.cs Updates output-path documentation.
src/Aspire.Hosting.Docker/DockerComposeEnvironmentResource.cs Enables Compose relocation.
src/Aspire.Hosting.Azure/AzureEnvironmentResource.cs Routes Azure artifacts through primary output.
src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs Marks validation as relocation-safe.
src/Aspire.Cli/Backchannel/BackchannelJsonSerializerContext.cs Registers new RPC DTOs.
src/Aspire.Cli/Backchannel/AppHostCliBackchannel.cs Implements output-plan RPC calls.

Comment thread src/Aspire.Hosting/Publishing/ManifestPublishingExtensions.cs Outdated
Comment thread src/Aspire.Hosting/Pipelines/PipelineOutputRegistry.cs Outdated
@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@IEvangelist

Copy link
Copy Markdown
Member Author

PR Testing Report

PR Information

  • PR Number: Add publisher output path contract #18875
  • Title: Add publisher output path contract
  • Head Commit: 098cb9e1482316ae9fc468335f2165dfe9f575f7
  • Tested At: 2026-07-23T14:51:29.1120623-05:00
  • Execution Target: Local Windows temporary workspace

Artifact Version Verification

  • Expected Commit: 098cb9e1482316ae9fc468335f2165dfe9f575f7
  • Installed Version: 13.5.0-pr.18875.g098cb9e1
  • Source Checkout: Detached worktree at the exact PR head
  • Status: PASS - the dogfood CLI and source checkout match the current PR head

Changes Analyzed

Files Changed

  • src/Aspire.Hosting/Pipelines/* - new output definitions, resolver, registry, resolved output, step metadata, and frozen execution plan
  • src/Aspire.Hosting/Backchannel/* - versioned output-plan inspection and execution authorization RPCs
  • src/Aspire.Cli/Backchannel/* - CLI RPC client and JSON source-generation support
  • src/Aspire.Hosting/Publishing/* - pipeline preparation ordering and manifest primary-output handling
  • src/Aspire.Hosting/DistributedApplicationBuilder.cs - output registry registration and concrete pipeline registration
  • src/Aspire.Hosting.Azure*/**, src/Aspire.Hosting.Docker/**, src/Aspire.Hosting.Kubernetes/**, src/Aspire.Hosting.EntityFrameworkCore/**, src/Aspire.Hosting.JavaScript/**, and src/Aspire.Hosting.Radius/** - built-in publisher relocation adoption
  • src/Shared/PublishingContextUtils.cs - primary output resolver usage
  • src/Aspire.Hosting/README.md - custom publisher output contract documentation
  • tests/Aspire.Hosting.Tests/** and tests/Aspire.Cli.Tests/** - output-plan, authorization, backchannel, and serializer coverage

Change Categories

  • CLI changes
  • Hosting changes
  • Hosting integration changes
  • Test changes
  • Dashboard changes
  • Template changes
  • Client/component changes
  • VS Code extension changes
  • CI infrastructure changes

Test Scenarios Executed

Scenario 1: Exact-head artifact and focused source validation

Objective: Verify the tested dogfood artifact matches the PR and exercise the output plan, relocation authorization, backchannel contract, and CLI serialization directly from the same commit.

Coverage Type: Artifact identity, unit, and integration

Status: PASS

Steps:

  1. Installed PR Add publisher output path contract #18875 through the official dogfood PowerShell installer into an isolated path.
  2. Verified the installed binary reported 13.5.0-pr.18875.g098cb9e1.
  3. Restored the exact-head source checkout.
  4. Ran PipelineOutputRegistryTests and BackchannelContractTests.
  5. Ran PipelineOutputPlan_RoundTripsThroughSerializer.

Results:

  • Hosting tests: 27 passed, 0 failed, 0 skipped.
  • CLI serializer test: 1 passed, 0 failed, 0 skipped.
  • The authorization tests confirmed relocated execution pauses before BeforePublishEvent and pipeline actions, then resumes only after authorization.

Evidence:

  • install-and-version.log
  • hosting-focused-tests.log
  • cli-focused-tests.log

Scenario 2: Custom directory and file outputs

Objective: Verify a custom publisher can declare both output kinds and write through the resolved paths rooted at the AppHost directory.

Coverage Type: Happy path

Status: PASS

Steps:

  1. Created a fresh aspire-empty project from the PR hive.
  2. Added a generate-repository-artifacts step required by publish.
  3. Declared .configgen as a directory output and .pipelines/pipeline.json as a file output.
  4. Published with the PR CLI.
  5. Verified both artifacts existed and contained their fully resolved logical target paths.

Results:

  • .configgen/inventory.txt was written through the resolved directory output.
  • .pipelines/pipeline.json was written through the resolved file output.
  • Both logical target values matched their AppHost-rooted paths.

Evidence:

  • custom-outputs-publish.log
  • custom-outputs-evidence.log
  • Generated inventory.txt and pipeline.json

Scenario 3: Configured named-output override

Objective: Verify Pipeline:Outputs:<step>:<output>:Path overrides the default target without writing to the default path.

Coverage Type: Boundary/configuration

Status: PASS

Steps:

  1. Created a fresh aspire-empty project from the PR hive.
  2. Declared a default .configgen directory output.
  3. Set Pipeline__Outputs__generate-override-artifact__inventory__Path=overrides\inventory.
  4. Published with the PR CLI.
  5. Verified the artifact was written under overrides\inventory, its logical target matched the override, and .configgen remained absent.

Evidence:

  • override-output-publish.log
  • override-output-evidence.log
  • Generated override inventory.txt

Scenario 4: Built-in manifest and Docker Compose publishers

Objective: Verify built-in publishers use the new primary output resolver without regressing file-vs-directory output behavior.

Coverage Type: Happy path and boundary

Status: PASS

Steps:

  1. Created separate fresh apps for directory-form and JSON-file-form manifest output.
  2. Ran aspire do publish-manifest with a directory output and verified aspire-manifest.json was created beneath it.
  3. Ran aspire do publish-manifest with an explicit .json output and verified that exact file was created.
  4. Created another fresh app, added Aspire.Hosting.Docker version 13.5.0-pr.18875.g098cb9e1, a Redis container, and a Docker Compose environment.
  5. Published and verified docker-compose.yaml contained the expected cache service and redis:7.4-alpine image.

Results:

  • Both manifest shapes produced valid JSON at the expected location.
  • Docker Compose publishing completed successfully and wrote through the configured primary output directory.

Evidence:

  • manifest-directory-publish.log
  • manifest-directory-evidence.log
  • manifest-file-publish.log
  • manifest-file-evidence.log
  • docker-publisher-publish.log
  • docker-publisher-evidence.log
  • Generated manifests and docker-compose.yaml

Scenario 5: Fail-closed output validation

Objective: Verify invalid output plans fail during preparation before publisher actions write artifacts.

Coverage Type: Unhappy path

Status: PASS

Cases:

  1. Overlapping targets: Declared .configgen and .configgen/nested. Publish exited with code 6, reported overlapping target paths, and did not create the action marker.
  2. Wrong target kind: Declared .configgen as a file after creating it as a directory. Publish exited with code 6, reported the file/directory mismatch, and did not create the action marker.

Expected Unhappy-Path Outcome: A non-zero exit, a specific validation error, and no pipeline-action writes.

Evidence:

  • overlap-outputs-publish.log
  • overlap-outputs-evidence.log
  • wrong-kind-publish.log
  • wrong-kind-evidence.log

Summary

Scenario Status Notes
Exact-head artifact and focused tests PASS 28 tests passed
Custom directory and file outputs PASS Both output kinds resolved and wrote correctly
Configured named-output override PASS Override won; default target untouched
Manifest and Docker Compose publishers PASS Directory/file manifest semantics and Compose output verified
Fail-closed validation PASS Both invalid plans failed before action writes

Overall Result

PASS - PR VERIFIED IN THE APPROVED TEST SCOPE

No product defects were found. The relocation-only backchannel flow is not yet exposed as a CLI verification command in this PR, so its pause, inspection, authorization, and relocated-write behavior was validated through the exact-head Hosting integration tests.

Artifacts

  • Persistent evidence directory: C:\Users\dapine\.copilot\session-state\293e2d49-ed8d-457d-9d8d-72f2b166ab1b\files\pr-18875-testing
  • Screenshots: Not applicable; the PR has no Dashboard or other UI changes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 55316bf5-3565-4b4d-bcc6-716c769618cc
Copilot AI review requested due to automatic review settings July 23, 2026 20:59
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 33 out of 33 changed files in this pull request and generated 2 comments.

Comment thread src/Aspire.Hosting/Publishing/ManifestPublishingExtensions.cs Outdated
Comment thread src/Aspire.Hosting/Pipelines/PipelineOutputRegistry.cs Outdated
@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 55316bf5-3565-4b4d-bcc6-716c769618cc
Copilot AI review requested due to automatic review settings July 24, 2026 02:14
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 34 out of 34 changed files in this pull request and generated 1 comment.

Comment thread src/Aspire.Hosting/Pipelines/DistributedApplicationPipeline.cs
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 55316bf5-3565-4b4d-bcc6-716c769618cc
Copilot AI review requested due to automatic review settings July 24, 2026 02:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 34 out of 34 changed files in this pull request and generated no new comments.

@github-actions

Copy link
Copy Markdown
Contributor

Tests selector (audit mode)

The full test matrix and all jobs still run in audit mode. The tests and jobs below are what selective CI would run under enforcement.

50 / 100 test projects · 5 jobs, from 33 changed files.

Selected test projects (50 / 100)

Aspire.Cli.EndToEnd.Tests, Aspire.Cli.Tests, Aspire.EndToEnd.Tests, Aspire.Hosting.Analyzers.Tests, Aspire.Hosting.Azure.Kubernetes.Tests, Aspire.Hosting.Azure.Kusto.Tests, Aspire.Hosting.Azure.Tests, Aspire.Hosting.Blazor.Tests, Aspire.Hosting.Browsers.Tests, Aspire.Hosting.CodeGeneration.Go.Tests, Aspire.Hosting.CodeGeneration.Java.Tests, Aspire.Hosting.CodeGeneration.Python.Tests, Aspire.Hosting.CodeGeneration.Rust.Tests, Aspire.Hosting.CodeGeneration.TypeScript.Tests, Aspire.Hosting.Containers.Tests, Aspire.Hosting.DevTunnels.Tests, Aspire.Hosting.Docker.Tests, Aspire.Hosting.Dotnet.Tests, Aspire.Hosting.DotnetTool.Tests, Aspire.Hosting.EntityFrameworkCore.Tests, Aspire.Hosting.Foundry.Tests, Aspire.Hosting.Garnet.Tests, Aspire.Hosting.GitHub.Models.Tests, Aspire.Hosting.Go.Tests, Aspire.Hosting.JavaScript.Tests, Aspire.Hosting.Kafka.Tests, Aspire.Hosting.Keycloak.Tests, Aspire.Hosting.Kubernetes.Tests, Aspire.Hosting.Maui.Tests, Aspire.Hosting.Milvus.Tests, Aspire.Hosting.MongoDB.Tests, Aspire.Hosting.MySql.Tests, Aspire.Hosting.Nats.Tests, Aspire.Hosting.OpenAI.Tests, Aspire.Hosting.Oracle.Tests, Aspire.Hosting.Orleans.Tests, Aspire.Hosting.PostgreSQL.Tests, Aspire.Hosting.Python.Tests, Aspire.Hosting.Qdrant.Tests, Aspire.Hosting.RabbitMQ.Tests, Aspire.Hosting.Radius.Tests, Aspire.Hosting.Redis.Tests, Aspire.Hosting.RemoteHost.Tests, Aspire.Hosting.Seq.Tests, Aspire.Hosting.SqlServer.Tests, Aspire.Hosting.Testing.Tests, Aspire.Hosting.Tests, Aspire.Hosting.Valkey.Tests, Aspire.Hosting.Yarp.Tests, Aspire.Playground.Tests

Selected jobs (5)

cli-starter, deployment-e2e, extension-e2e, polyglot, typescript-api-compat


How these were chosen — grouped by what changed

⚠️ 32 of the 50 selected test projects come from a single change — src/Aspire.Hosting/Backchannel/AppHostRpcTarget.cs.

🔧 src/Aspire.Hosting/Backchannel/AppHostRpcTarget.cs (changed source)
32 via the project graph

show 32

Aspire.Hosting.Analyzers.Tests (2 hops), Aspire.Hosting.Browsers.Tests (2 hops), Aspire.Hosting.CodeGeneration.Go.Tests, Aspire.Hosting.CodeGeneration.Java.Tests, Aspire.Hosting.CodeGeneration.Python.Tests, Aspire.Hosting.CodeGeneration.Rust.Tests, Aspire.Hosting.Containers.Tests (2 hops), Aspire.Hosting.DevTunnels.Tests (2 hops), Aspire.Hosting.DotnetTool.Tests (2 hops), Aspire.Hosting.Garnet.Tests (2 hops), Aspire.Hosting.GitHub.Models.Tests (2 hops), Aspire.Hosting.Go.Tests (2 hops), Aspire.Hosting.Kafka.Tests (2 hops), Aspire.Hosting.Keycloak.Tests (2 hops), Aspire.Hosting.Maui.Tests, Aspire.Hosting.Milvus.Tests (2 hops), Aspire.Hosting.MongoDB.Tests (2 hops), Aspire.Hosting.MySql.Tests (2 hops), Aspire.Hosting.Nats.Tests (2 hops), Aspire.Hosting.OpenAI.Tests (2 hops), Aspire.Hosting.Oracle.Tests (2 hops), Aspire.Hosting.Orleans.Tests (2 hops), Aspire.Hosting.PostgreSQL.Tests (2 hops), Aspire.Hosting.Python.Tests (2 hops), Aspire.Hosting.Qdrant.Tests (2 hops), Aspire.Hosting.RabbitMQ.Tests (2 hops), Aspire.Hosting.Redis.Tests (2 hops), Aspire.Hosting.RemoteHost.Tests, Aspire.Hosting.Seq.Tests (2 hops), Aspire.Hosting.SqlServer.Tests (2 hops), Aspire.Hosting.Testing.Tests (2 hops), Aspire.Hosting.Valkey.Tests (2 hops)

🔧 src/Aspire.Hosting.Azure/AzureEnvironmentResource.cs (changed source)
1 directly: Aspire.Hosting.Azure.Tests
2 via the project graph: Aspire.Hosting.Azure.Kusto.Tests (2 hops), Aspire.Hosting.Foundry.Tests (2 hops)

🔧 src/Aspire.Hosting.Docker/DockerComposeEnvironmentResource.cs (changed source)
1 directly: Aspire.Hosting.Docker.Tests
2 via the project graph: Aspire.Hosting.Kubernetes.Tests, Aspire.Hosting.Yarp.Tests

🧪 tests/Aspire.Hosting.Tests/Backchannel/BackchannelContractTests.cs (changed test)
1 directly: Aspire.Hosting.Tests
2 via the project graph: Aspire.Hosting.Blazor.Tests, Aspire.Hosting.Dotnet.Tests

🔧 src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs (changed source)
1 directly: Aspire.Hosting.Azure.Tests
1 via the project graph: Aspire.Hosting.Azure.Kubernetes.Tests (2 hops)

🔧 src/Aspire.Hosting.JavaScript/JavaScriptHostingExtensions.cs (changed source)
1 directly: Aspire.Hosting.JavaScript.Tests
1 via the project graph: Aspire.Playground.Tests

📦 affected project Aspire.Cli
1 test: Aspire.Cli.EndToEnd.Tests

📦 affected project Aspire.Hosting
1 test: Aspire.EndToEnd.Tests

🔧 src/Aspire.Hosting.EntityFrameworkCore/EFMigrationResourceBuilderExtensions.cs (changed source)
1 directly: Aspire.Hosting.EntityFrameworkCore.Tests

🔧 src/Aspire.Hosting.EntityFrameworkCore/EFResourceBuilderExtensions.cs (changed source)
1 directly: Aspire.Hosting.EntityFrameworkCore.Tests

🔧 src/Aspire.Hosting.Kubernetes/KubernetesEnvironmentResource.cs (changed source)
1 directly: Aspire.Hosting.Kubernetes.Tests

🔧 src/Aspire.Hosting.Radius/Publishing/RadiusBicepPublishingContext.cs (changed source)
1 directly: Aspire.Hosting.Radius.Tests

🧪 tests/Aspire.Cli.Tests/Backchannel/BackchannelJsonSerializerContextTests.cs (changed test)
1 directly: Aspire.Cli.Tests

🧪 tests/Aspire.Cli.Tests/Commands/PublishCommandPromptingIntegrationTests.cs (changed test)
1 directly: Aspire.Cli.Tests

🧪 tests/Aspire.Cli.Tests/TestServices/TestAppHostCliBackchannel.cs (changed test)
1 directly: Aspire.Cli.Tests

🧪 tests/Aspire.Hosting.CodeGeneration.TypeScript.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.ts (changed test)
1 directly: Aspire.Hosting.CodeGeneration.TypeScript.Tests

🧪 tests/Aspire.Hosting.Tests/Pipelines/PipelineOutputRegistryTests.cs (changed test)
1 directly: Aspire.Hosting.Tests

Job reasons

Job Triggered by
cli-starter • affected project Aspire.Cli
• selected test Aspire.Cli.Tests
deployment-e2e affected project Aspire.Cli
extension-e2e src/Aspire.Cli/Backchannel/AppHostCliBackchannel.cs, src/Aspire.Cli/Backchannel/BackchannelJsonSerializerContext.cs, src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs, src/Aspire.Hosting.Azure/AzureEnvironmentResource.cs, src/Aspire.Hosting.Docker/DockerComposeEnvironmentResource.cs, src/Aspire.Hosting.EntityFrameworkCore/EFMigrationResourceBuilderExtensions.cs, src/Aspire.Hosting.EntityFrameworkCore/EFResourceBuilderExtensions.cs, src/Aspire.Hosting.JavaScript/JavaScriptHostingExtensions.cs, src/Aspire.Hosting.Kubernetes/KubernetesEnvironmentResource.cs, src/Aspire.Hosting.Radius/Publishing/RadiusBicepPublishingContext.cs, src/Aspire.Hosting/Backchannel/AppHostRpcTarget.cs, src/Aspire.Hosting/Backchannel/BackchannelDataTypes.cs, src/Aspire.Hosting/DistributedApplicationBuilder.cs, src/Aspire.Hosting/Pipelines/DistributedApplicationPipeline.cs, src/Aspire.Hosting/Pipelines/IPipelineOutputResolver.cs, src/Aspire.Hosting/Pipelines/PipelineOutputDefinition.cs, src/Aspire.Hosting/Pipelines/PipelineOutputKind.cs, src/Aspire.Hosting/Pipelines/PipelineOutputRegistry.cs, src/Aspire.Hosting/Pipelines/PipelineStep.cs, src/Aspire.Hosting/Pipelines/PipelineStepContext.cs, src/Aspire.Hosting/Pipelines/ResolvedPipelineOutput.cs, src/Aspire.Hosting/Pipelines/WellKnownPipelineSteps.cs, src/Aspire.Hosting/Publishing/BeforePublishEvent.cs, src/Aspire.Hosting/Publishing/ManifestPublishingContext.cs, src/Aspire.Hosting/Publishing/ManifestPublishingExtensions.cs, src/Aspire.Hosting/Publishing/PipelineExecutor.cs, tests/Aspire.Cli.Tests/Backchannel/BackchannelJsonSerializerContextTests.cs, tests/Aspire.Cli.Tests/Commands/PublishCommandPromptingIntegrationTests.cs, tests/Aspire.Cli.Tests/TestServices/TestAppHostCliBackchannel.cs
• affected project Aspire.Cli
polyglot affected project Aspire.Cli
typescript-api-compat affected project Aspire.Cli

Selection computed for commit cfd5d17.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@IEvangelist
IEvangelist marked this pull request as ready for review July 24, 2026 12:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Define a public contract for publisher output path

2 participants