Skip to content

DotnetProjectResource publishing - #19997

Merged
Karol Zadora-Przylecki (karolz-ms) merged 17 commits into
mainfrom
dev/karolz/project-v2-publish
Sep 16, 2026
Merged

Karol Zadora-Przylecki (karolz-ms) merged 17 commits into
mainfrom
dev/karolz/project-v2-publish

Conversation

@karolz-ms

Copy link
Copy Markdown
Contributor

Description

AddDotnetProject() resources currently fail when an AppHost is published, even though equivalent C# projects modeled with AddProject() are publishable. This change makes DotnetProjectResource publishable across the same SDK-container and deployment scenarios while preserving the Project V2 build, launch, and debugging model introduced by #19678.

The implementation:

  • Introduces the experimental IDotnetProgramResource cross-package contract and shared .NET SDK publishing pipeline used by both ProjectResource and DotnetProjectResource.
  • Supports project files, project directories, and file-based C# apps, including build-only environment variables, SDK-selected container working directories, Native AOT diagnostics, container-file layering, and archive output.
  • Updates Docker Compose, Kubernetes, Azure Container Apps, Azure App Service, Azure Sandboxes, Foundry, and Radius publishing paths to recognize publishable .NET program resources.
  • Enables Project V2 resources in hosted Blazor and EF Core migration scenarios. EFMigrationResource.StartupProjectResource is the new common contract; the legacy ProjectResource property remains available for legacy resources and is marked obsolete.
  • Preserves concrete fluent APIs in generated TypeScript, Python, Go, Java, and Rust SDKs.

User-facing usage

C# AppHost:

var api = builder.AddDotnetProject("api", "../Api/Api.csproj")
    .WithReplicas(2);

api.AddEFMigrations("api-migrations");

TypeScript AppHost:

const api = await builder.addDotnetProject("api", "../Api/Api.csproj");
await api.withReplicas(2);
await api.disableForwardedHeaders();

These resources now participate in aspire publish and deployment publishers without requiring conversion back to the legacy AddProject() model.

Validation

  • Managed repository build with native compilation skipped.
  • Full Aspire.Hosting.Tests: 3,525 total, 3,520 passed, 5 platform skips, with MTP hang-dump protection.
  • Full Dotnet, EF Core, Blazor, Docker, Kubernetes, Radius, Foundry, and Azure integration suites.
  • ATS capability scanning and complete TypeScript, Python, Go, and Rust code-generation suites.
  • Generated Dotnet and EF polyglot fixtures compiled for TypeScript, Python, Go, Java, and Rust using locally packed 13.6.0-dev packages.
  • Repository TypeScript API compatibility flow reported no undeclared breaks.
  • Real legacy and Project V2 file-app container archive builds, including Project V2 container-file layering.

Fixes # (issue)

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

@github-actions

github-actions Bot commented Sep 8, 2026

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 -- 19997

Or

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

@github-actions
github-actions Bot requested a balanced review from Copilot September 8, 2026 23:05
@github-actions github-actions Bot added the area-app-model Issues pertaining to the APIs in Aspire.Hosting, e.g. DistributedApplication label Sep 8, 2026
@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.

🟡 Changes recommended

Two critical and four moderate unresolved issues affect core publishing and runtime behavior.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Makes DotnetProjectResource publishable through the shared .NET SDK pipeline across supported deployment and framework integrations.

Changes:

  • Adds shared .NET program publishing contracts and container/archive handling.
  • Extends deployment, EF Core, and Blazor support to Project V2 resources.
  • Adds publishing and polyglot SDK coverage.

Review findings:

  • Critical (2 votes): DotnetProgramPublishing.cs:55 unnecessarily requires a container runtime for archive-only publishing.
  • Critical (1 vote): DotnetProgramResourceBuilderExtensions.cs:28 exposes replicas, but only one process is rendered.
  • Moderate (1 vote): EFMigrationResourceBuilderExtensions.cs:284 permits unsupported file-based migration projects.
  • Moderate (1 vote): DotnetProgramPublishing.cs:280 misclassifies dotted output directories as archive files.
  • Moderate (1 vote): ResourceContainerImageManager.cs:728 queries the container working directory without Configuration=Release.
  • Moderate (1 vote): ResourceContainerImageManager.cs:579 can incorrectly attribute unrelated publishing failures to Native AOT.
File summaries
File Description
tests/PolyglotAppHosts/Aspire.Hosting.EntityFrameworkCore/TypeScript/aspire.config.json Adds the Dotnet package.
tests/PolyglotAppHosts/Aspire.Hosting.EntityFrameworkCore/TypeScript/apphost.mts Exercises Project V2 migrations.
tests/PolyglotAppHosts/Aspire.Hosting.EntityFrameworkCore/Python/aspire.config.json Adds the Dotnet package.
tests/PolyglotAppHosts/Aspire.Hosting.EntityFrameworkCore/Python/apphost.py Exercises Project V2 migrations.
tests/PolyglotAppHosts/Aspire.Hosting.EntityFrameworkCore/Java/aspire.config.json Adds the Dotnet package.
tests/PolyglotAppHosts/Aspire.Hosting.EntityFrameworkCore/Java/AppHost.java Exercises Project V2 migrations.
tests/PolyglotAppHosts/Aspire.Hosting.Dotnet/TypeScript/apphost.mts Exercises new fluent APIs.
tests/PolyglotAppHosts/Aspire.Hosting.Dotnet/Python/apphost.py Exercises new fluent APIs.
tests/PolyglotAppHosts/Aspire.Hosting.Dotnet/Java/AppHost.java Exercises new fluent APIs.
tests/PolyglotAppHosts/Aspire.Hosting.Dotnet/Go/apphost.go Exercises new fluent APIs.
tests/Aspire.Hosting.Tests/Publishing/ResourceContainerImageManagerTests.cs Tests archive publishing, layering, and diagnostics.
tests/Aspire.Hosting.Tests/ProjectResourceTests.cs Updates shared publishing tests.
tests/Aspire.Hosting.Tests/DotnetProgramPublishingTests.cs Tests shared publishing contracts.
tests/Aspire.Hosting.Radius.Tests/RadiusExtensionsTests.cs Tests Project V2 image association.
tests/Aspire.Hosting.Radius.Tests/Publishing/BicepGenerationSimpleTests.cs Tests Radius validation.
tests/Aspire.Hosting.Radius.Tests/Aspire.Hosting.Radius.Tests.csproj References Dotnet integration.
tests/Aspire.Hosting.Kubernetes.Tests/KubernetesPublisherTests.cs Tests Project V2 Kubernetes publishing.
tests/Aspire.Hosting.Kubernetes.Tests/Aspire.Hosting.Kubernetes.Tests.csproj References Dotnet integration.
tests/Aspire.Hosting.Foundry.Tests/HostedAgentExtensionTests.cs Tests hosted-agent publishing.
tests/Aspire.Hosting.Foundry.Tests/Aspire.Hosting.Foundry.Tests.csproj References Dotnet integration.
tests/Aspire.Hosting.EntityFrameworkCore.Tests/Aspire.Hosting.EntityFrameworkCore.Tests.csproj References Dotnet integration.
tests/Aspire.Hosting.EntityFrameworkCore.Tests/AddEFMigrationsTests.cs Tests generalized migration resources.
tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectResourceTests.cs Tests manifests and archive builds.
tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectPublicApiTests.cs Verifies publishing interfaces.
tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectBuildEnvironmentTests.cs Verifies build-environment providers.
tests/Aspire.Hosting.Docker.Tests/DockerComposePublisherTests.cs Tests Compose Project V2 output.
tests/Aspire.Hosting.Docker.Tests/Aspire.Hosting.Docker.Tests.csproj References Dotnet integration.
tests/Aspire.Hosting.CodeGeneration.TypeScript.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.ts Updates the generated TypeScript snapshot.
tests/Aspire.Hosting.CodeGeneration.Rust.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.rs Updates the generated Rust snapshot.
tests/Aspire.Hosting.CodeGeneration.Python.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.py Updates the generated Python snapshot.
tests/Aspire.Hosting.CodeGeneration.Java.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.java Updates the generated Java snapshot.
tests/Aspire.Hosting.CodeGeneration.Go.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.go Updates the generated Go snapshot.
tests/Aspire.Hosting.Blazor.Tests/BlazorHostedExtensionsTests.cs Tests Project V2 proxying.
tests/Aspire.Hosting.Blazor.Tests/AddDotnetProjectBlazorGatewayTests.cs Tests gateway publishing support.
tests/Aspire.Hosting.Azure.Tests/AzureSandboxesTests.cs Tests sandbox endpoint handling.
tests/Aspire.Hosting.Azure.Tests/AzureContainerAppsTests.cs Tests Container Apps targeting.
tests/Aspire.Hosting.Azure.Tests/AzureAppServiceTests.cs Tests App Service targeting.
tests/Aspire.Hosting.Azure.Tests/Aspire.Hosting.Azure.Tests.csproj References Dotnet integration.
src/Shared/MsBuildResponseFile.cs Extracts shared response-file support.
src/Aspire.Hosting/Publishing/ResourceContainerImageManager.cs Generalizes SDK image building.
src/Aspire.Hosting/Publishing/ManifestPublishingContext.cs Emits generalized project manifests.
src/Aspire.Hosting/ExecutableResourceBuilderExtensions.cs Adjusts Dockerfile project defaults.
src/Aspire.Hosting/DotnetProgramResourceBuilderExtensions.cs Adds common fluent APIs.
src/Aspire.Hosting/Dcp/DcpNameGenerator.cs Adds .NET program replica names.
src/Aspire.Hosting/Ats/CoreExports.cs Enables the experimental contract.
src/Aspire.Hosting/Ats/AtsTypeMappings.cs Exports the shared ATS contract.
src/Aspire.Hosting/Aspire.Hosting.csproj Includes shared response-file code.
src/Aspire.Hosting/ApplicationModel/ResourceExtensions.cs Generalizes endpoint and build checks.
src/Aspire.Hosting/ApplicationModel/ProjectResourceExtensions.cs Adds shared metadata helpers.
src/Aspire.Hosting/ApplicationModel/ProjectResource.cs Adopts shared publishing support.
src/Aspire.Hosting/ApplicationModel/IDotnetProgramResource.cs Defines the common .NET resource contract.
src/Aspire.Hosting/ApplicationModel/IDotnetProgramBuildEnvironmentProvider.cs Defines build-environment providers.
src/Aspire.Hosting/ApplicationModel/DotnetProgramPublishingAnnotation.cs Marks configured publishers.
src/Aspire.Hosting/ApplicationModel/DotnetProgramPublishing.cs Implements the shared publishing pipeline.
src/Aspire.Hosting/ApplicationModel/DistributedApplicationModelExtensions.cs Generalizes compute selection.
src/Aspire.Hosting/ApplicationModel/ContainerImageReference.cs Supports explicit archive paths.
src/Aspire.Hosting/ApplicationModel/ArgumentsExecutionConfigurationGatherer.cs Omits launch-tool arguments during publishing.
src/Aspire.Hosting.Radius/ResourceMapping/ResourceTypeMapper.cs Maps .NET programs as projects.
src/Aspire.Hosting.Radius/RadiusExtensions.cs Generalizes image association.
src/Aspire.Hosting.Radius/Publishing/RadiusInfrastructureBuilder.cs Handles .NET program resources.
src/Aspire.Hosting.Kubernetes/KubernetesResource.cs Uses generalized build detection.
src/Aspire.Hosting.Foundry/HostedAgent/HostedAgentBuilderExtension.cs Preserves SDK publishing targets.
src/Aspire.Hosting.EntityFrameworkCore/README.md Documents Project V2 migrations.
src/Aspire.Hosting.EntityFrameworkCore/EFResourceBuilderExtensions.cs Generalizes migration startup resources.
src/Aspire.Hosting.EntityFrameworkCore/EFMigrationResourceBuilderExtensions.cs Generalizes migration-project dispatch.
src/Aspire.Hosting.EntityFrameworkCore/EFMigrationResource.cs Adds the common startup-project property.
src/Aspire.Hosting.EntityFrameworkCore/EFCoreOperationExecutor.cs Accepts common .NET programs.
src/Aspire.Hosting.Dotnet/README.md Documents publishing behavior.
src/Aspire.Hosting.Dotnet/DotnetProjectResource.cs Implements publishing contracts.
src/Aspire.Hosting.Dotnet/DotnetProjectHostingExtensions.cs Configures publishing and polyglot APIs.
src/Aspire.Hosting.Dotnet/DotnetProjectBuildEnvironmentCallbackAnnotation.cs Adopts the shared environment provider.
src/Aspire.Hosting.Dotnet/DotnetProjectBuildCoordinator.cs Enables the shared experimental contract.
src/Aspire.Hosting.Dotnet/Aspire.Hosting.Dotnet.csproj Includes shared response-file code.
src/Aspire.Hosting.Docker/DockerComposeServiceResource.cs Recognizes publishable .NET programs.
src/Aspire.Hosting.Blazor/BlazorHostedExtensions.cs Generalizes hosted Blazor APIs.
src/Aspire.Hosting.Blazor/BlazorGatewayExtensions.cs Enables Project V2 gateway publishing.
src/Aspire.Hosting.Azure.Sandboxes/AzureSandboxContainerDeployment.cs Generalizes .NET endpoint handling.
src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs Targets publishable .NET programs.
src/Aspire.Hosting.Azure.AppContainers/ContainerAppContext.cs Applies .NET deployment defaults.
docs/plans/project-v2-csharpprogram-watch.md Updates the Project V2 plan.
Review details
  • Files reviewed: 80/80 changed files
  • Comments generated: 6
  • Review effort level: Balanced

@github-actions

github-actions Bot commented Sep 8, 2026

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

github-actions Bot commented Sep 8, 2026

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

github-actions Bot commented Sep 8, 2026

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

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.

🟡 Changes recommended

Explicit non-gzip archive output can fail when staging and destination paths reside on different filesystems.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details
  • Files reviewed: 93/93 changed files
  • Comments generated: 1
  • Review effort level: Balanced

@github-actions

github-actions Bot commented Sep 9, 2026

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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Review of the shared .NET SDK publishing pipeline and the DotnetProjectResource publish enablement.

Issues found: 1 correctness regression, 2 test-coverage gaps, 2 test-convention problems.

# Severity Location Problem
1 Blocking ResourceContainerImageManager.cs:768 Multi-RID RuntimeIdentifiers broken by the Arguments -> ArgumentList refactor (MSB1006)
2 Coverage ResourceContainerImageManagerTests.cs:1072 No multi-platform regression test, so #1 passes CI
3 Coverage DistributedApplicationModelExtensions.cs:29 New deployment routing has no deployment E2E coverage
4 Convention DockerComposePublisherTests.cs:166 Generated YAML asserted with Assert.Contains instead of Verify; assertion is near-vacuous
5 Convention KubernetesPublisherTests.cs:761 Generated Helm output asserted with Assert.Contains instead of Verify

Item 1 was reproduced locally against SDK 10.0.303; details are in the inline comment. The previously reported File.Move cross-device issue in DotnetProgramPublishing.MoveArchiveAsync still appears unaddressed, but I have not duplicated it here.

@github-actions

github-actions Bot commented Sep 9, 2026

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

github-actions Bot commented Sep 9, 2026

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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Two correctness issues in the Project V2 EF Core integration: startup migrations can bypass the coordinated build, and EF commands do not receive the startup project's build-only properties.

@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.

🟡 Changes recommended

Radius prebuilt-image resources still execute the shared SDK build and push pipeline, contradicting the API contract and potentially failing deployments.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details
  • Files reviewed: 121/121 changed files
  • Comments generated: 1
  • Review effort level: Balanced

@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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Review of the shared .NET SDK publishing pipeline at 45970e9, focused on what the earlier rounds left open.

Issues found: 2 (1 correctness gap in MSBuild argument construction, 1 latent cancellation defect).

# Severity Location Problem
1 Moderate ResourceContainerImageManager.cs:489 /p: switches other than RuntimeIdentifiers are still raw interpolations, so ; or % in a user-supplied ContainerArchiveOutputPath is re-split/unescaped by MSBuild
2 Low ContainerRuntimeReadiness.cs:28 The cached readiness check captures the first caller's token, so that caller's cancellation propagates to every other waiter

Verified as not problems while reviewing, recording them so they don't get re-raised:

  • AddDotnetProject(...).PublishAsDockerFile() does not double-build. PublishAsDockerFile removes the resource from the model, and because ExecutableContainerResource shares the original annotation collection, EnsureBuildAndPushPipelineAnnotations uses ResourceAnnotationMutationBehavior.Replace and displaces the SDK-publishing PipelineStepAnnotation.
  • Staged archive filenames agree between LayerContainerFilesAsync and both container runtimes: the runtimes receive name:tag, which FlattenContainerImageName collapses to the same name-tag.tar the staging path computes. No double gzip either, since GetContainerImageArchivePath always yields .tar.
  • The newly publishable AddDotnetProjectBlazorGateway will not hit cross-OS Native AOT: Scripts/Gateway.cs.in already declares #:property PublishAot=false.
  • ResourceTypeMapper's new IDotnetProgramResource fallback is reachable, because ExecutableResource is absent from s_typeMappings and the hierarchy walk falls through.

Copilot's Radius finding (WithContainerImage leaving DotnetProgramPublishingAnnotation in place, so RequiresImageBuild() still dispatches prebuilt-image resources into the SDK build/push pipeline) still appears unaddressed.

@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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

One correctness issue: publish-time EF migration-script generation can use missing or stale assemblies for path-based .NET projects.

Preserve the Verify snapshot ending while resolving the stack rebase conflict.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@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.

🟡 Changes recommended

OCI local-image publishing can skip required container-runtime readiness when no archive output path is configured.

Get a fresh assessment by requesting another Copilot review.

Review details
  • Files reviewed: 146/146 changed files
  • Comments generated: 1
  • Review effort level: Balanced

@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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Reviewed the full change set at 098487ae against main (merge-base 9f2d9f7f), with the PR branch checked out locally.

Four findings, all in new code paths — no blocking correctness or security issues found in the core publishing pipeline, archive rewriter, or app-model changes:

  • Compatibility (2): docker image save --platform raises the effective Docker Engine floor to 28+; multi-platform targets combined with container-file layering lose the actionable error that the OCI case gets.
  • Documentation accuracy (1): both READMEs still say only bundle generation drops --no-build, but publish-time script generation now builds too.
  • Cleanup consistency (1): the temporary Dockerfile is deleted on failed archive builds, making the "left for debugging" branch unreachable.

I also replied on the one open Copilot thread (ResourceContainerImageManager.cs:913) — that one reads like a false positive; options.OutputPath is null makes the method return true for OCI without an output path.

Separately verified and found no problems with: the OCI/Docker/legacy archive naming rewriter and its alias handling, MSBuild response-file escaping, DCP replica instance naming for IDotnetProgramResource, the RequiresImageBuild/HasPrebuiltContainerImage refactor across Compose/Kubernetes/ACA/App Service/Radius/Foundry, the EF BeforeStartEvent path (fire-and-forget, so the new build barrier can't deadlock), and the test-trigger-map.yml routing for the new runtime package consumers.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@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.

🟡 Changes recommended

Prebuilt .NET images combined with container-file publishing silently omit the requested files.

Get a fresh assessment by requesting another Copilot review.

Review details
  • Files reviewed: 146/146 changed files
  • Comments generated: 1
  • Review effort level: Balanced

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@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.

🔵 Needs a closer look

The generated EF polyglot contract still excludes DotnetProjectResource from the migrations-project parameter.

Review details

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

src/Aspire.Hosting.EntityFrameworkCore/EFMigrationResourceBuilderExtensions.cs:278

  • The exported union still does not admit Project V2 resources. The generated ATS snapshot at src/Aspire.Hosting.EntityFrameworkCore/api/Aspire.Hosting.EntityFrameworkCore.ats.txt:34 resolves this parameter to string|ProjectResource, so generated TypeScript/Python/Java/etc. callers cannot pass a DotnetProjectResource here despite the CLR switch accepting IDotnetProgramResource. Please expose an ATS-compatible cross-package capability/adapter and add a fixture that passes dotnetApi as the migrations project.
  • Files reviewed: 147/147 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@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>
@karolz-ms

Copy link
Copy Markdown
Contributor Author

Regarding the finding in #19997 (review):

This finding is invalid, so no production change was made for it. The cited src/Aspire.Hosting.EntityFrameworkCore/api/Aspire.Hosting.EntityFrameworkCore.ats.txt entry is the checked-in release compatibility baseline; it intentionally is not regenerated in individual feature PRs and still reflects the pre-PR ProjectResource signature.

The live PR source exports IDotnetProgramResource, DotnetProjectResource implements that interface, and WithMigrationsProjectForPolyglot accepts IResourceBuilder<IDotnetProgramResource>. Polyglot code generation scans the loaded integration assemblies together, so Aspire.Hosting.Dotnet implementations participate in the generated TypeScript/Python/Java/etc. surface. The generators already support interface handles in union parameters through their existing expansion/bridge mechanisms.

Commit 9a45d17 fixes the separate PR-caused CI test-state leak; it does not alter the EF/ATS implementation because that implementation is already correct.

@github-actions

Copy link
Copy Markdown
Contributor

Tests selector

57 / 99 PR test projects · 4 PR jobs, from 143 changed files.

Selected PR test projects (57 / 99)

Aspire.Cli.EndToEnd.Tests, Aspire.Cli.Tests, Aspire.Dashboard.Components.Tests, Aspire.Dashboard.Tests, Aspire.Hosting.Analyzers.Tests, Aspire.Hosting.Azure.Kubernetes.Tests, Aspire.Hosting.Azure.Kusto.Tests, Aspire.Hosting.Azure.Provisioning.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.Go.Tests, Aspire.Hosting.Java.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.Rust.Tests, Aspire.Hosting.Sdk.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.Managed.Tests, Aspire.Playground.Tests, Aspire.TerminalHost.Tests, Infrastructure.Tests

Selected PR jobs (4)

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


How these were chosen — grouped by what changed

⚠️ 27 of the 57 selected test projects come from a single change — tests/Aspire.Hosting.TestUtilities/Publishing/FakeContainerRuntime.cs.

🧪 tests/Aspire.Hosting.TestUtilities/Publishing/FakeContainerRuntime.cs (changed test)
→ 27 via the project graph

show 27

Aspire.Hosting.Azure.Kusto.Tests, Aspire.Hosting.Browsers.Tests, Aspire.Hosting.Containers.Tests, Aspire.Hosting.DevTunnels.Tests, Aspire.Hosting.DotnetTool.Tests, Aspire.Hosting.Garnet.Tests, Aspire.Hosting.Go.Tests, Aspire.Hosting.Java.Tests, Aspire.Hosting.JavaScript.Tests, Aspire.Hosting.Kafka.Tests, Aspire.Hosting.Keycloak.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.Redis.Tests, Aspire.Hosting.Rust.Tests, Aspire.Hosting.Seq.Tests, Aspire.Hosting.SqlServer.Tests, Aspire.Hosting.Valkey.Tests

🧪 tests/Shared/TemporaryWorkspace.cs (changed test)
→ 6 via the project graph: Aspire.Dashboard.Components.Tests, Aspire.Dashboard.Tests, Aspire.Hosting.RemoteHost.Tests, Aspire.Hosting.Sdk.Tests, Aspire.Managed.Tests, Aspire.TerminalHost.Tests

🔧 src/Aspire.Hosting.Blazor/BlazorGatewayExtensions.cs (changed source)
→ 3 directly: Aspire.Cli.EndToEnd.Tests, Aspire.Hosting.Blazor.Tests, Aspire.Hosting.Tests
→ 1 via the project graph: Aspire.Playground.Tests

🔧 src/Aspire.Hosting/ApplicationModel/ArgumentsExecutionConfigurationGatherer.cs (changed source)
→ 4 via the project graph: Aspire.Hosting.Analyzers.Tests (2 hops), Aspire.Hosting.Azure.Provisioning.Tests (3 hops), Aspire.Hosting.Maui.Tests, Aspire.Hosting.Testing.Tests (2 hops)

🔧 src/Aspire.Hosting.Docker/DockerComposeServiceResource.cs (changed source)
→ 1 directly: Aspire.Hosting.Docker.Tests
→ 1 via the project graph: Aspire.Hosting.Yarp.Tests

🧪 tests/Aspire.Hosting.Azure.Tests/Aspire.Hosting.Azure.Tests.csproj (changed test)
→ 1 directly: Aspire.Hosting.Azure.Tests
→ 1 via the project graph: Aspire.Hosting.Azure.Kubernetes.Tests

📦 affected project Aspire.Hosting.Blazor
→ 1 test: Aspire.Cli.EndToEnd.Tests

📄 eng/github-ci/test-trigger-map.yml (changed)
→ 1 directly: Infrastructure.Tests

🔧 src/Aspire.Hosting.Azure.AppContainers/ContainerAppContext.cs (changed source)
→ 1 directly: Aspire.Hosting.Azure.Tests

🔧 src/Aspire.Hosting.Azure.AppService/AzureAppServiceEnvironmentResource.cs (changed source)
→ 1 directly: Aspire.Hosting.Azure.Tests

🔧 src/Aspire.Hosting.Azure.Sandboxes/AzureSandboxContainerDeployment.cs (changed source)
→ 1 directly: Aspire.Hosting.Azure.Tests

🔧 src/Aspire.Hosting.Blazor/BlazorHostedExtensions.cs (changed source)
→ 1 directly: Aspire.Hosting.Blazor.Tests

🔧 src/Aspire.Hosting.Dotnet/Aspire.Hosting.Dotnet.csproj (changed source)
→ 1 directly: Aspire.Hosting.Dotnet.Tests

🔧 src/Aspire.Hosting.Dotnet/DotnetProjectBuildCoordinator.cs (changed source)
→ 1 directly: Aspire.Hosting.Dotnet.Tests

🔧 src/Aspire.Hosting.Dotnet/DotnetProjectBuildEnvironment.cs (changed source)
→ 1 directly: Aspire.Hosting.Dotnet.Tests

🔧 src/Aspire.Hosting.Dotnet/DotnetProjectBuildEnvironmentCallbackAnnotation.cs (changed source)
→ 1 directly: Aspire.Hosting.Dotnet.Tests

🔧 src/Aspire.Hosting.Dotnet/DotnetProjectHostingExtensions.cs (changed source)
→ 1 directly: Aspire.Hosting.Dotnet.Tests

🔧 src/Aspire.Hosting.Dotnet/DotnetProjectResource.cs (changed source)
→ 1 directly: Aspire.Hosting.Dotnet.Tests

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

🔧 src/Aspire.Hosting.EntityFrameworkCore/EFMigrationResource.cs (changed source)
→ 1 directly: Aspire.Hosting.EntityFrameworkCore.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.Foundry/HostedAgent/HostedAgentBuilderExtension.cs (changed source)
→ 1 directly: Aspire.Hosting.Foundry.Tests

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

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

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

🔧 src/Aspire.Hosting.Radius/ResourceMapping/ResourceTypeMapper.cs (changed source)
→ 1 directly: Aspire.Hosting.Radius.Tests

🧪 tests/Aspire.Cli.EndToEnd.Tests/DockerComposeDeployWithVolumeTests.cs (changed test)
→ 1 directly: Aspire.Cli.EndToEnd.Tests

🧪 tests/Aspire.Cli.EndToEnd.Tests/Helpers/CaptureWorkspaceOnFailureAttribute.cs (changed test)
→ 1 directly: Aspire.Cli.EndToEnd.Tests

🧪 tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2EAutomatorHelpers.cs (changed test)
→ 1 directly: Aspire.Cli.EndToEnd.Tests

🧪 tests/Aspire.Cli.EndToEnd.Tests/Helpers/KubernetesDeployTestHelpers.cs (changed test)
→ 1 directly: Aspire.Cli.EndToEnd.Tests

🧪 tests/Aspire.Cli.EndToEnd.Tests/Helpers/LocalDeploymentTestHelpers.cs (changed test)
→ 1 directly: Aspire.Cli.EndToEnd.Tests

🧪 tests/Aspire.Cli.EndToEnd.Tests/Helpers/LocalDeploymentTestHelpersTests.cs (changed test)
→ 1 directly: Aspire.Cli.EndToEnd.Tests

🧪 tests/Aspire.Cli.EndToEnd.Tests/KubernetesDeployBasicApiServiceTests.cs (changed test)
→ 1 directly: Aspire.Cli.EndToEnd.Tests

🧪 tests/Aspire.Cli.EndToEnd.Tests/RadiusDotnetProjectDeployTests.cs (changed test)
→ 1 directly: Aspire.Cli.EndToEnd.Tests

🧪 tests/Aspire.Cli.Tests/Utils/TemporaryWorkspaceTests.cs (changed test)
→ 1 directly: Aspire.Cli.Tests

🧪 tests/Aspire.Hosting.Azure.Tests/AzureAppServiceTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Azure.Tests

🧪 tests/Aspire.Hosting.Azure.Tests/AzureContainerAppsTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Azure.Tests

🧪 tests/Aspire.Hosting.Azure.Tests/AzureSandboxesTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Azure.Tests

🧪 tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithAzureResourceDependencies_DoesNotHang_step=diagnostics.verified.txt (changed test)
→ 1 directly: Aspire.Hosting.Azure.Tests

🧪 tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithFoundryAndAzureContainerApps_CreatesCorrectDependencies.verified.txt (changed test)
→ 1 directly: Aspire.Hosting.Azure.Tests

🧪 tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithMultipleComputeEnvironments_Works_step=diagnostics.verified.txt (changed test)
→ 1 directly: Aspire.Hosting.Azure.Tests

🧪 tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithPrivateEndpoints_CreatesCorrectDependencies.verified.txt (changed test)
→ 1 directly: Aspire.Hosting.Azure.Tests

🧪 tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.DeployAsync_WithRedisAccessKeyAuthentication_CreatesCorrectDependencies.verified.txt (changed test)
→ 1 directly: Aspire.Hosting.Azure.Tests

🧪 tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureDeployerTests.Diagnostics_CrossScopeAcrPullRoleModulesPrecedeTargetedWorkloadProvisioning.verified.txt (changed test)
→ 1 directly: Aspire.Hosting.Azure.Tests

🧪 tests/Aspire.Hosting.Blazor.Tests/AddDotnetProjectBlazorGatewayTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Blazor.Tests

🧪 tests/Aspire.Hosting.Blazor.Tests/BlazorHostedExtensionsTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Blazor.Tests

🧪 tests/Aspire.Hosting.CodeGeneration.Go.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.go (changed test)
→ 1 directly: Aspire.Hosting.CodeGeneration.Go.Tests

🧪 tests/Aspire.Hosting.CodeGeneration.Java.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.java (changed test)
→ 1 directly: Aspire.Hosting.CodeGeneration.Java.Tests

🧪 tests/Aspire.Hosting.CodeGeneration.Python.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.py (changed test)
→ 1 directly: Aspire.Hosting.CodeGeneration.Python.Tests

🧪 tests/Aspire.Hosting.CodeGeneration.Rust.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.rs (changed test)
→ 1 directly: Aspire.Hosting.CodeGeneration.Rust.Tests

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

🧪 tests/Aspire.Hosting.Docker.Tests/Aspire.Hosting.Docker.Tests.csproj (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/DockerComposePublisherTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.DockerComposeWithDotnetProjectUsesImagePlaceholderAndWaitDependency.verified.env (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Docker.Tests/Snapshots/DockerComposePublisherTests.DockerComposeWithDotnetProjectUsesImagePlaceholderAndWaitDependency.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Docker.Tests

🧪 tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectBuildCoordinatorTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Dotnet.Tests

🧪 tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectBuildEnvironmentTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Dotnet.Tests

🧪 tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectPublicApiTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Dotnet.Tests

🧪 tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectResourceTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Dotnet.Tests

🧪 tests/Aspire.Hosting.EntityFrameworkCore.Tests/AddEFMigrationsTests.cs (changed test)
→ 1 directly: Aspire.Hosting.EntityFrameworkCore.Tests

🧪 tests/Aspire.Hosting.EntityFrameworkCore.Tests/Aspire.Hosting.EntityFrameworkCore.Tests.csproj (changed test)
→ 1 directly: Aspire.Hosting.EntityFrameworkCore.Tests

🧪 tests/Aspire.Hosting.EntityFrameworkCore.Tests/EFBuildCustomizationWarningTests.cs (changed test)
→ 1 directly: Aspire.Hosting.EntityFrameworkCore.Tests

🧪 tests/Aspire.Hosting.EntityFrameworkCore.Tests/EFBuildReadinessTests.cs (changed test)
→ 1 directly: Aspire.Hosting.EntityFrameworkCore.Tests

🧪 tests/Aspire.Hosting.EntityFrameworkCore.Tests/EFCoreOperationExecutorTests.cs (changed test)
→ 1 directly: Aspire.Hosting.EntityFrameworkCore.Tests

🧪 tests/Aspire.Hosting.EntityFrameworkCore.Tests/EFMigrationConfigurationTests.cs (changed test)
→ 1 directly: Aspire.Hosting.EntityFrameworkCore.Tests

🧪 tests/Aspire.Hosting.EntityFrameworkCore.Tests/EFMigrationPipelineTests.cs (changed test)
→ 1 directly: Aspire.Hosting.EntityFrameworkCore.Tests

🧪 tests/Aspire.Hosting.EntityFrameworkCore.Tests/TestServices/CustomBuildProjectMetadata.cs (changed test)
→ 1 directly: Aspire.Hosting.EntityFrameworkCore.Tests

🧪 tests/Aspire.Hosting.EntityFrameworkCore.Tests/TestServices/TestEfTool.cs (changed test)
→ 1 directly: Aspire.Hosting.EntityFrameworkCore.Tests

🧪 tests/Aspire.Hosting.Foundry.Tests/Aspire.Hosting.Foundry.Tests.csproj (changed test)
→ 1 directly: Aspire.Hosting.Foundry.Tests

🧪 tests/Aspire.Hosting.Foundry.Tests/HostedAgentExtensionTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Foundry.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Aspire.Hosting.Kubernetes.Tests.csproj (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/KubernetesPublisherTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.KubernetesWithDotnetProjectUsesImageParameterAndProjectEndpoint#00.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.KubernetesWithDotnetProjectUsesImageParameterAndProjectEndpoint#01.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.KubernetesWithDotnetProjectUsesImageParameterAndProjectEndpoint#02.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.KubernetesWithDotnetProjectUsesImageParameterAndProjectEndpoint#03.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Kubernetes.Tests/Snapshots/KubernetesPublisherTests.KubernetesWithDotnetProjectUsesImageParameterAndProjectEndpoint#04.verified.yaml (changed test)
→ 1 directly: Aspire.Hosting.Kubernetes.Tests

🧪 tests/Aspire.Hosting.Radius.Tests/Aspire.Hosting.Radius.Tests.csproj (changed test)
→ 1 directly: Aspire.Hosting.Radius.Tests

🧪 tests/Aspire.Hosting.Radius.Tests/Publishing/BicepGenerationSimpleTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Radius.Tests

🧪 tests/Aspire.Hosting.Radius.Tests/RadiusExtensionsTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Radius.Tests

🧪 tests/Aspire.Hosting.Tests/Dcp/DcpExecutorTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Aspire.Hosting.Tests/DotnetProgramPublishingTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Aspire.Hosting.Tests/ProjectResourceTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Aspire.Hosting.Tests/Publishing/ContainerImageArchiveRewriterTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Aspire.Hosting.Tests/Publishing/ContainerRuntimeReadinessTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Aspire.Hosting.Tests/Publishing/DockerContainerRuntimeTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Aspire.Hosting.Tests/Publishing/DotnetProgramArchiveTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Aspire.Hosting.Tests/Publishing/ResourceContainerImageManagerTests.cs (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Aspire.Hosting.Tests/Snapshots/ContainerImageArchiveRewriterTests.RewriteDockerMetadataPreservesPayloadAndUnrelatedReferences.verified.json (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Aspire.Hosting.Tests/Snapshots/ContainerImageArchiveRewriterTests.RewriteHybridArchiveUpdatesEveryNamingFormat.verified.json (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Aspire.Hosting.Tests/Snapshots/ContainerImageArchiveRewriterTests.RewriteOciContainerdAnnotationsPreservesTagOnlyRepresentation.verified.json (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Aspire.Hosting.Tests/Snapshots/ContainerImageArchiveRewriterTests.RewriteOciPodmanAnnotationsPreservesLocalhostQualification.verified.json (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Aspire.Hosting.Tests/Snapshots/ResourceContainerImageBuilderTests.BuildImageAsync_ContainerFilesUseReleaseWorkingDirectory_fileBased=False.verified.txt (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Aspire.Hosting.Tests/Snapshots/ResourceContainerImageBuilderTests.BuildImageAsync_ContainerFilesUseReleaseWorkingDirectory_fileBased=True.verified.txt (changed test)
→ 1 directly: Aspire.Hosting.Tests

🧪 tests/Infrastructure.Tests/TestTriggerMap/TestTriggerMapTests.cs (changed test)
→ 1 directly: Infrastructure.Tests

Job reasons

Job Triggered by
cli-starter-validation affected project Aspire.Hosting.AppHost
extension-e2e • src/Aspire.Hosting.Blazor/BlazorGatewayExtensions.cs, src/Aspire.Hosting.Blazor/BlazorHostedExtensions.cs, src/Aspire.Hosting.Docker/DockerComposeServiceResource.cs, src/Aspire.Hosting/ApplicationModel/ArgumentsExecutionConfigurationGatherer.cs, src/Aspire.Hosting/ApplicationModel/ContainerBuildOptionsCallbackAnnotation.cs, src/Aspire.Hosting/ApplicationModel/ContainerImageReference.cs, src/Aspire.Hosting/ApplicationModel/DistributedApplicationModelExtensions.cs, src/Aspire.Hosting/ApplicationModel/DotnetProgramBuildCompletionAnnotation.cs, src/Aspire.Hosting/ApplicationModel/DotnetProgramBuildEnvironmentCallbackAnnotation.cs, src/Aspire.Hosting/ApplicationModel/DotnetProgramPublishing.cs, src/Aspire.Hosting/ApplicationModel/DotnetProgramPublishingAnnotation.cs, src/Aspire.Hosting/ApplicationModel/IDotnetProgramResource.cs, src/Aspire.Hosting/ApplicationModel/ProjectResource.cs, src/Aspire.Hosting/ApplicationModel/ProjectResourceExtensions.cs, src/Aspire.Hosting/ApplicationModel/ResourceExtensions.cs, src/Aspire.Hosting/Aspire.Hosting.csproj, src/Aspire.Hosting/Ats/AtsTypeMappings.cs, src/Aspire.Hosting/Ats/CoreExports.cs, src/Aspire.Hosting/Dcp/DcpNameGenerator.cs, src/Aspire.Hosting/Dcp/ExecutableCreator.cs, src/Aspire.Hosting/DistributedApplicationBuilder.cs, src/Aspire.Hosting/DotnetProgramResourceBuilderExtensions.cs, src/Aspire.Hosting/ExecutableResourceBuilderExtensions.cs, src/Aspire.Hosting/Pipelines/DistributedApplicationPipeline.cs, src/Aspire.Hosting/Publishing/ContainerImageArchiveRewriter.cs, src/Aspire.Hosting/Publishing/ContainerRuntimeReadiness.cs, src/Aspire.Hosting/Publishing/DockerContainerRuntime.cs, src/Aspire.Hosting/Publishing/ManifestPublishingContext.cs, src/Aspire.Hosting/Publishing/ResourceContainerImageManager.cs, src/Aspire.Hosting/Publishing/TemporaryContainerImage.cs
• affected project Aspire.Hosting.Blazor
polyglot • src/Aspire.Hosting.Blazor/BlazorGatewayExtensions.cs, tests/PolyglotAppHosts/Aspire.Hosting.Dotnet/Go/apphost.go, tests/PolyglotAppHosts/Aspire.Hosting.Dotnet/Java/AppHost.java, tests/PolyglotAppHosts/Aspire.Hosting.Dotnet/Python/apphost.py, tests/PolyglotAppHosts/Aspire.Hosting.Dotnet/TypeScript/apphost.mts, tests/PolyglotAppHosts/Aspire.Hosting.EntityFrameworkCore/Java/AppHost.java, tests/PolyglotAppHosts/Aspire.Hosting.EntityFrameworkCore/Java/aspire.config.json, tests/PolyglotAppHosts/Aspire.Hosting.EntityFrameworkCore/Python/apphost.py, tests/PolyglotAppHosts/Aspire.Hosting.EntityFrameworkCore/Python/aspire.config.json, tests/PolyglotAppHosts/Aspire.Hosting.EntityFrameworkCore/TypeScript/apphost.mts, tests/PolyglotAppHosts/Aspire.Hosting.EntityFrameworkCore/TypeScript/aspire.config.json
• affected project Aspire.Hosting.Azure.AppContainers
• affected project Aspire.Hosting.Azure.Provisioning.KeyVault
typescript-api-compat affected project Aspire.Hosting.Azure.AppContainers

Selection computed for commit 9a45d17.

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.

🔵 Needs a closer look

The cross-cutting publishing and deployment changes span 147 files and multiple production backends, warranting final human sign-off despite extensive coverage.

Review details
  • Files reviewed: 147/147 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@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.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-app-model Issues pertaining to the APIs in Aspire.Hosting, e.g. DistributedApplication

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants