Skip to content

Expose IServiceProvider and callback contexts to ATS polyglot hosts#18059

Open
sebastienros wants to merge 7 commits into
mainfrom
sebastienros/expose-serviceprovider-ats
Open

Expose IServiceProvider and callback contexts to ATS polyglot hosts#18059
sebastienros wants to merge 7 commits into
mainfrom
sebastienros/expose-serviceprovider-ats

Conversation

@sebastienros

Copy link
Copy Markdown
Contributor

Description

Several callback contexts carried [AspireExportIgnore] on their IServiceProvider members, which forced the entire context (and its builder overloads) to be hidden from polyglot app hosts because IServiceProvider could not be consumed from ATS. Now that IServiceProvider is an exported ATS handle, those members can be exposed, and the contexts that wrap them become usable from TypeScript/Go/Java/Python.

This PR removes the now-unnecessary ignores, exposes the service provider consistently as services, and closes the WithContainerFiles callback gap so polyglot hosts can build container file-system entries (including inline contents and OpenSSL certificate files) through factory methods rather than the host-only polymorphic hierarchy.

What changed

  • Expose services: ServiceProvider/Services members on the command (ExecuteCommandContext, UpdateCommandStateContext), HTTPS endpoint update, container build options, required-command validation, and container-file callback contexts are now exported, named services on the newly exposed members. Properties already named Services map to services automatically; ServiceProvider properties use MethodName = "services". Remaining ignores are only on Func<IServiceProvider, ...> parameters (lifecycle hooks, Kusto health check) and carry accurate reasons pointing to ATS-friendly alternatives.
  • Export builder overloads: the async WithContainerBuildOptions, WithHttpsCertificateConfiguration, SubscribeHttpsEndpointsUpdate, and the validation-callback WithRequiredCommand overloads are now exported. The three ContainerImage* enums they depend on are exported too.
  • Close the container-files callback gap: added internal static factory shims (CreateFile / CreateCertificateFile / CreateDirectory) on ContainerFileSystemCallbackContext, plus a WithContainerFilesCallbackExport shim that accepts integer file-mode options (ContainerFilesOptions) and forwards to the real WithContainerFiles. This lets polyglot callbacks construct the IEnumerable<ContainerFileSystemItem> result that was previously .NET-only.
  • Helpers: added Success() / Failure(string) on RequiredCommandValidationContext so polyglot callbacks can return a result without a static factory reference.
  • Tests + app hosts: wired all four polyglot app hosts (Go/Java/Python/TypeScript) to use real extension-method chains on services (e.g. services().getLoggerFactory()), regenerated the five codegen snapshots, and added unit tests for the new factories (ConvertMode range/validation, recursive entries) and the validation helpers.

Notes for reviewers

  • Per repo convention, ATS export-coverage changes are validated via the tests/PolyglotAppHosts apps and codegen snapshots rather than unit tests asserting generated shape.
  • The factory methods are deliberately internal static extension methods (the established polyglot-only shim pattern) so they do not expand the public C# surface.
  • api/*.cs baseline files are intentionally not regenerated here; that happens at release time.

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

Several callback contexts that previously carried [AspireExportIgnore] on
their IServiceProvider members were ignored entirely because polyglot hosts
could not consume IServiceProvider. Now that IServiceProvider is an exported
ATS handle, expose those members (named "services") and the contexts that
wrap them, and close the WithContainerFiles callback gap so polyglot hosts
can build file-system entries through factory methods.

- Expose ServiceProvider/Services members as "services" on the command,
  https endpoint, container build, required-command, and container-file
  callback contexts; keep only accurate, documented ignores.
- Export the WithContainerBuildOptions (async), WithHttpsCertificateConfiguration,
  SubscribeHttpsEndpointsUpdate, and WithRequiredCommand validation overloads.
- Add internal static factory shims (CreateFile/CreateCertificateFile/
  CreateDirectory) on ContainerFileSystemCallbackContext plus a
  WithContainerFilesCallbackExport shim that accepts integer file-mode options.
- Add Success()/Failure() helpers on RequiredCommandValidationContext.
- Wire all four polyglot app hosts (Go/Java/Python/TypeScript) with real
  extension-method usage on services, regenerate the five codegen snapshots,
  and add unit tests for the new factories and validation helpers.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@sebastienros sebastienros requested a review from mitchdenny as a code owner June 9, 2026 17:53
Copilot AI review requested due to automatic review settings June 9, 2026 17:53
@github-actions

github-actions Bot commented Jun 9, 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 -- 18059

Or

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

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

This PR expands the Aspire Hosting ATS/polyglot surface by exporting IServiceProvider on multiple callback contexts (as services), exporting additional builder overloads used by polyglot app hosts, and adding ATS-friendly factory shims so polyglot callbacks can construct container file-system entries.

Changes:

  • Exported callback contexts and builder overloads so polyglot app hosts can access services and use async callback-based configuration APIs (HTTPS certificate config, HTTPS endpoint update subscription, container build options, required-command validation).
  • Added ATS-friendly container-files callback support by exporting ContainerFileSystemItem as an opaque handle and providing context factory shims to create file/directory/certificate entries.
  • Updated polyglot app hosts and regenerated codegen snapshots; added unit tests covering new container-files factories and required-command validation helpers.

Reviewed changes

Copilot reviewed 21 out of 24 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
tests/PolyglotAppHosts/Aspire.Hosting/TypeScript/apphost.mts Exercises newly exported callbacks and services() usage from TypeScript.
tests/PolyglotAppHosts/Aspire.Hosting/Python/apphost.py Exercises newly exported callbacks and services usage from Python.
tests/PolyglotAppHosts/Aspire.Hosting/Java/AppHost.java Exercises newly exported callbacks and services() usage from Java.
tests/PolyglotAppHosts/Aspire.Hosting/Go/apphost.go Exercises newly exported callbacks and Services() usage from Go.
tests/Aspire.Hosting.Tests/RequiredCommandAnnotationTests.cs Adds unit tests for RequiredCommandValidationContext.Success/Failure.
tests/Aspire.Hosting.Containers.Tests/ContainerFileSystemCallbackContextTests.cs Adds unit tests for the new container-files context factories and mode validation.
tests/Aspire.Hosting.CodeGeneration.Rust.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.rs Updated Rust SDK snapshot for newly exported types/methods.
tests/Aspire.Hosting.CodeGeneration.Python.Tests/Snapshots/TwoPassScanningGeneratedAspire.verified.py Updated Python SDK snapshot for newly exported types/methods.
src/Aspire.Hosting/ResourceBuilderExtensions.cs Exports HTTPS certificate configuration + HTTPS endpoints update subscription for ATS.
src/Aspire.Hosting/RequiredCommandResourceExtensions.cs Exports required-command validation overload for ATS.
src/Aspire.Hosting/IInteractionService.cs Exposes InputsDialogValidationContext.Services to ATS.
src/Aspire.Hosting/Dcp/Model/Container.cs Adds ATS ignore annotation on internal DCP conversion extension.
src/Aspire.Hosting/ContainerResourceBuilderExtensions.cs Adds ATS-exported withContainerFilesCallback shim and updates ATS-related remarks/ignore reasons.
src/Aspire.Hosting/ApplicationModel/ResourceExtensions.cs Exports async WithContainerBuildOptions overload for ATS.
src/Aspire.Hosting/ApplicationModel/ResourceCommandAnnotation.cs Exports command callback ServiceProvider as services.
src/Aspire.Hosting/ApplicationModel/RequiredCommandValidationResult.cs Exports validation result properties for ATS.
src/Aspire.Hosting/ApplicationModel/RequiredCommandValidationContext.cs Exports validation context properties + helper methods for ATS.
src/Aspire.Hosting/ApplicationModel/HttpsEndpointUpdateCallbackContext.cs Exports HTTPS endpoint update context properties for ATS.
src/Aspire.Hosting/ApplicationModel/HttpsCertificateConfigurationCallbackAnnotaion.cs Exports HTTPS certificate callback context and ATS-friendly argument/env editors.
src/Aspire.Hosting/ApplicationModel/ContainerFileSystemCallbackAnnotation.cs Exports container file-system callback context + adds ATS factory shims for entries.
src/Aspire.Hosting/ApplicationModel/ContainerBuildOptionsCallbackAnnotation.cs Exports container build options callback context properties for ATS.

@sebastienros

Copy link
Copy Markdown
Contributor Author

PR Testing Report

PR Information

CLI Version Verification

  • Expected Commit (PR head): ed6aef3
  • Installed Version: 13.5.0-pr.18059.ged6aef36
  • Status: ✅ Verified (version contains PR head short SHA)

Changes Analyzed

This PR removes stale [AspireExportIgnore] attributes and exposes several callback
contexts + IServiceProvider (services()) to ATS, plus container-file factory methods.

Change Categories

  • Hosting changes (src/Aspire.Hosting/**) — ATS export surface
  • CLI changes
  • Dashboard changes
  • Template changes
  • Client/Component changes

Test Approach

Installed the PR dogfood CLI, scaffolded a fresh TypeScript app host
(aspire new aspire-ts-empty) from the PR hive, generated the TS SDK via aspire restore
(real codegen path → .aspire/modules/aspire.mts, 2.17 MB), wrote a custom apphost.mts
exercising every newly-exported API, type-checked it (tsc --noEmit, strict), then ran
it under Docker to confirm the RPC handshake and that each callback actually fires.

Test Scenarios Executed

Scenario 1: Type-check custom TS app host against generated SDK

Objective: All new API signatures compile in a real TS app host.
Coverage Type: Happy path
Status: ✅ Passed — tsc --noEmit -p tsconfig.apphost.json → EXIT 0.

Scenario 2: Runtime execution under Docker (callbacks fire over RPC)

Objective: Confirm RPC handshake + each callback executes and the new services()
handle / factory methods marshal correctly.
Coverage Type: Happy path
Status: ✅ Passed — app host started, all callbacks fired. App host logs:

[AppHost/HttpsEndpointsUpdate]     HttpsEndpointsUpdate services resolved
[AppHost/RequiredCommandValidation] RequiredCommandValidation resolvedPath=/usr/local/bin/docker
[AppHost/ContainerFilesCallback]    ContainerFilesCallback services resolved

Scenario 3 (boundary): malformed certificate via createCertificateFile

Objective: Negative case — feed createCertificateFile an invalid PEM.
Coverage Type: Unhappy path
Status: ✅ Passed (expected safe failure). Container reported:
could not parse certificate /etc/app/nested/ca.pem: x509: malformed certificate.
This proves the factory output was marshalled back over RPC and processed by the real
DCP container-file + OpenSSL path. Re-running with a valid self-signed PEM removed the
error and the cert/config files copied into the container successfully.
Expected Unhappy-Path Outcome: Clear cert-parse error, container fails to start safely (achieved).

Per-API Verification

New API Surface verified Runtime evidence
withContainerFilesCallback(dest, cb, options?) ✅ tsc ✅ callback fired
ctx.createFile(name, {contents, mode...}) ✅ tsc ✅ config file copied into container
ctx.createCertificateFile(name, {contents...}) ✅ tsc ✅ valid PEM copied; invalid PEM rejected (OpenSSL path ran)
ctx.createDirectory(name, entries, {...}) ✅ tsc ✅ nested dir /etc/app/nested/* materialized
ContainerFileSystemCallbackContext.services() ✅ tsc services resolved
ContainerFileSystemCallbackContext.model() ✅ tsc ✅ (resolved, no error)
withRequiredCommandValidation(cmd, cb, options?) ✅ tsc ✅ callback fired
RequiredCommandValidationContext.resolvedPath() ✅ tsc resolvedPath=/usr/local/bin/docker
RequiredCommandValidationContext.services() ✅ tsc ✅ resolved
ctx.success() / ctx.failure(msg) ✅ tsc ✅ returned success (validation passed)
withContainerBuildOptions(async cb) + setters ✅ tsc registered (fires on publish, not run)
withHttpsCertificateConfiguration(cb) ✅ tsc arguments() editor applied — args reached container exec line (--certificate)
HttpsCertificateConfigurationCallbackContext.{certificatePath,keyPath,arguments,environment} ✅ tsc ✅ args/env editors marshalled
subscribeHttpsEndpointsUpdate(cb) ✅ tsc ✅ callback fired
HttpsEndpointUpdateCallbackContext.{services,resource,model}() ✅ tsc services resolved
Logger chain services().getLoggerFactory().createLogger(...).logInformation(...) ✅ tsc ✅ all log lines emitted via this chain

Summary

Scenario Status Notes
1. TS type-check ✅ Passed EXIT 0, strict mode
2. Runtime callbacks fire ✅ Passed All 3 run-time callbacks logged services resolved / resolvedPath
3. Malformed cert (negative) ✅ Passed Safe cert-parse failure; valid PEM then copied OK

Overall Result

✅ PR VERIFIED — Every newly-exported API is present in the generated TypeScript SDK,
type-checks under strict mode in a custom app host, and (for the run-time callbacks) fires
correctly over RPC with the new services() handle and container-file factory methods
working end-to-end against real DCP/Docker.

Notes

  • The container ultimately Exited only because the test app host intentionally injects
    HTTPS cert CLI args (--certificate/--key) via the arguments() editor into an nginx
    image that doesn't understand them (exec: --certificate: not found). That is expected and
    itself confirms the arguments() editor applied args to the real container command line —
    not an API defect.
  • withContainerBuildOptions fires on publish/build rather than run; its surface is
    type-verified but not exercised at run time.

sebastienros and others added 5 commits June 9, 2026 11:59
…ed_command codegen

Resolves copilot-pull-request-reviewer feedback on the ATS export PR:

- CreateFile/CreateCertificateFile now throw ArgumentException up front when both
  `contents` and `sourcePath` are provided, since they are mutually exclusive.
  Added unit tests covering both factories.
- Python generator: stop merging callback-differentiated overloads in
  MergeCapabilitiesBySourceLocation (added IsCallback to the merge guard). This
  restores `required_command: str | tuple[str, str]` (no breaking change to the
  published tuple shorthand) and emits a separate `with_required_command_validation`
  method/`required_command_validation` option instead of forcing a TypedDict and a
  buggy conditional dispatch that always registered a null validationCallback.
- Regenerated the Python snapshot and updated the Python polyglot apphost to call
  the new `with_required_command_validation` method.

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

# Conflicts:
#	src/Aspire.Hosting/ApplicationModel/ContainerFileSystemCallbackAnnotation.cs
#	src/Aspire.Hosting/ApplicationModel/ResourceCommandAnnotation.cs
After merging origin/main (#18034 obsoleted ServiceProvider in favor of a
Services property), the two command callback contexts were left ignored,
which broke the polyglot apphosts that call services() on them and the
Containers test helper that still set the obsolete ServiceProvider.

- ResourceCommandAnnotation.cs: ExecuteCommandContext and
  UpdateCommandStateContext now export 'services' via the Services property
  (ExposeProperties = true); the obsolete ServiceProvider alias keeps
  [AspireExportIgnore] to avoid a duplicate 'serviceProvider' export.
- ContainerFileSystemCallbackContextTests.cs: use Services instead of the
  obsolete ServiceProvider in the test helper (fixes CS0618/CS9035).
- Regenerated all 5 language codegen snapshots to include
  ExecuteCommandContext.services and UpdateCommandStateContext.services.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Exposing the container-files callback overload (and other CancellationToken
callbacks) made the generated Java SDK call CancellationToken.fromValue(args[N])
to materialize the token the AppHost passes when invoking the callback. The Java
runtime CancellationToken template never defined that factory, so the generated
apphost failed to compile (cannot find symbol: fromValue), breaking Java SDK
Validation. The codegen snapshot tests only diff text and never compile Java, so
this latent gap was not caught.

Add a static fromValue(Object) factory mirroring the TypeScript and Go SDKs: it
returns the value if it is already a CancellationToken, wraps a remote token id
string, and otherwise returns a fresh token. Regenerated the Java snapshots.

Verified by splitting the generated Java snapshot into files and compiling all
217 with javac: clean (no fromValue/CancellationToken errors).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The C# <summary> and <returns> XML docs are valid for ATS, and the scanner
already falls back to the standard tags when no ats- override is present
(AtsCapabilityScanner.GetDocumentationElement). Drop the duplicate ats-summary
and ats-returns so the generated polyglot docs use the C# documentation
directly. Regenerated all 5 language snapshots.

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

github-actions Bot commented Jun 9, 2026

Copy link
Copy Markdown
Contributor

CLI E2E Tests unknown — 113 passed, 0 failed, 2 unknown (commit b9a88f3)

View all recordings
- Test Detail
AddPackageInteractiveWhileAppHostRunningDetached Recording · Job · CLI logs
AddPackageWhileAppHostRunningDetached Recording · Job · CLI logs
AgentCommands_AllHelpOutputs_AreCorrect Recording · Job · CLI logs
AgentInitCommand_DefaultSelection_InstallsDefaultSkills Recording · Job · CLI logs
AgentInitCommand_MigratesDeprecatedConfig Recording · Job · CLI logs
AgentInit_NonInteractive_BundleOnlySkillsNotInCatalog Recording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp Recording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_DevLocalhost Recording · Job · CLI logs
AgentMcpListStructuredLogsReturnsLogsFromStarterApp_Isolated Recording · Job · CLI logs
AllPublishMethodsBuildDockerImages Recording · Job · CLI logs
AspireAddAndStartWorkAgainstLegacyAppHostTs Recording · Job · CLI logs
AspireAddPackageVersionToDirectoryPackagesProps Recording · Job · CLI logs
AspireInitSingleFileAppHostRunsViaDotnetRunAppHost Recording · Job · CLI logs
AspireInit_ExistingAppHostDir_RecreatesNuGetConfigKeepsFiles Recording · Job · CLI logs
AspireInit_SolutionFile_BuildsAgainstChannelHive Recording · Job · CLI logs
AspireStartUpdatesStaleTypeScriptAppHostPath Recording · Job · CLI logs
AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesProps Recording · Job · CLI logs
AspireUpdateRemovesOrphanAppHostPackageVersionWhenSdkAlreadyCurrent Recording · Job · CLI logs
Banner_DisplayedOnFirstRun Recording · Job · CLI logs
Banner_DisplayedWithExplicitFlag Recording · Job · CLI logs
Banner_NotDisplayedWithNoLogoFlag Recording · Job · CLI logs
CertificatesClean_RemovesCertificates Recording · Job · CLI logs
CertificatesTrust_WithNoCert_CreatesAndTrustsCertificate Recording · Job · CLI logs
CertificatesTrust_WithUntrustedCert_TrustsCertificate Recording · Job · CLI logs
ConfigSetGet_CreatesNestedJsonFormat Recording · Job · CLI logs
CreateAndRunAspireStarterProject Recording · Job · CLI logs
CreateAndRunAspireStarterProjectWithBundle Recording · Job · CLI logs
CreateAndRunEmptyAppHostProject Recording · Job · CLI logs
CreateAndRunJavaEmptyAppHostProject Recording · Job · CLI logs
CreateAndRunJsReactProject Recording · Job · CLI logs
CreateAndRunPolyglotAppHostWithDevLocalhostUrls Recording · Job · CLI logs
CreateAndRunPythonReactProject Recording · Job · CLI logs
CreateAndRunTypeScriptEmptyAppHostProject Recording · Job · CLI logs
CreateAndRunTypeScriptStarterProject Recording · Job · CLI logs
CreateJavaAppHostWithViteApp Recording · Job · CLI logs
CreateTypeScriptAppHostWithViteApp_UsesConfiguredToolchain Recording · Job · CLI logs
DashboardRunWithAgentMcpListTracesReturnsNoTraces Recording · Job · CLI logs
DashboardRunWithAgentMcpListTracesReturnsNoTraces_DevLocalhost Recording · Job · CLI logs
DashboardRunWithOtelTracesReturnsNoTraces Recording · Job · CLI logs
DashboardRunWithOtelTracesReturnsNoTraces_DevLocalhost Recording · Job · CLI logs
DeployK8sBasicApiService Recording · Job · CLI logs
DeployK8sWithExternalHelmChart Recording · Job · CLI logs
DeployK8sWithGarnet Recording · Job · CLI logs
DeployK8sWithMongoDB Recording · Job · CLI logs
DeployK8sWithMySql Recording · Job · CLI logs
DeployK8sWithPostgres Recording · Job · CLI logs
DeployK8sWithRabbitMQ Recording · Job · CLI logs
DeployK8sWithRedis Recording · Job · CLI logs
DeployK8sWithSqlServer Recording · Job · CLI logs
DeployK8sWithValkey Recording · Job · CLI logs
DeployTypeScriptAppToKubernetes Recording · Job · CLI logs
DescribeCommandResolvesReplicaNames Recording · Job · CLI logs
DescribeCommandShowsRunningResources Recording · Job · CLI logs
DetachFormatJsonProducesValidJson Recording · Job · CLI logs
DetachFormatJsonProducesValidJsonWhenRestartingExistingInstance Recording · Job · CLI logs
DoPublishAndDeployListStepsWork Recording · Job · CLI logs
DocsCommand_RendersInteractiveMarkdownFromLocalSource Recording · Job · CLI logs
DoctorCommand_DetectsDeprecatedAgentConfig Recording · Job · CLI logs
DoctorCommand_TypeScriptAppHostReportsMissingConfiguredToolchain Recording · Job · CLI logs
DoctorCommand_WithSslCertDir_ShowsTrusted Recording · Job · CLI logs
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted Recording · Job · CLI logs
DotNetRunFileBasedAppHostUsesAspireCliBundle Recording · Job · CLI logs
DotNetRunProjectAppHostUsesAspireCliBundle Recording · Job · CLI logs
GatewayWithoutExternalEndpoint_FailsPublishWithGuidance Recording · Job · CLI logs
GeneratedAspireDevScript_StartsWatchMode_WithConfiguredToolchain Recording · Job · CLI logs
GlobalMigration_HandlesCommentsAndTrailingCommas Recording · Job · CLI logs
GlobalMigration_HandlesMalformedLegacyJson Recording · Job · CLI logs
GlobalMigration_PreservesAllValueTypes Recording · Job · CLI logs
GlobalMigration_SkipsWhenNewConfigExists Recording · Job · CLI logs
GlobalSettings_MigratedFromLegacyFormat Recording · Job · CLI logs
IngressWithoutExternalEndpoint_FailsPublishWithGuidance Recording · Job · CLI logs
InitTypeScriptAppHost_AugmentsExistingViteRepoInWorkspaceSubdirectory Recording · Job · CLI logs
InteractiveCSharpInitCreatesExpectedFiles Recording · Job · CLI logs
InvalidAppHostPathWithComments_IsHealedOnRun Recording · Job · CLI logs
JavaScriptHostingApisRunFromTypeScriptAppHost Recording · Job · CLI logs
LatestCliCanStartStableChannelAppHost Recording · Job · CLI logs
LatestCliCanStartStableChannelTypeScriptAppHost Recording · Job · CLI logs
LegacySettingsMigration_AdjustsRelativeAppHostPath Recording · Job · CLI logs
LogsCommandShowsResourceLogs Recording · Job · CLI logs
OtelLogsReturnsStructuredLogsFromStarterApp Recording · Job · CLI logs
OtelLogsReturnsStructuredLogsFromStarterAppIsolated Recording · Job · CLI logs
ProcessCommandCallbackReceivesCliArguments Recording · Job · CLI logs
PsCommandListsRunningAppHost Recording · Job · CLI logs
PsFormatJsonOutputsOnlyJsonToStdout Recording · Job · CLI logs
PublishJavaScriptPatternsGeneratesExpectedDockerComposeArtifacts Recording · Job · CLI logs
PublishWithConfigureEnvFileUpdatesEnvOutput Recording · Job · CLI logs
PublishWithDockerComposeServiceCallbackSucceeds Recording · Job · CLI logs
PublishWithoutOutputPathUsesAppHostDirectoryDefault Recording · Job · CLI logs
ResourceCommand_FailedExec_ShowsLogPathAndLogHasEntries Recording · Job · CLI logs
ResourceCommand_SetAndDeleteParameterUpdatesDescribeOutput Recording · Job · CLI logs
RestoreGeneratesSdkFiles Recording · Job · CLI logs
RestoreGeneratesSdkFiles_WithConfiguredToolchain Recording · Job · CLI logs
RestoreRefreshesGeneratedSdkAfterAddingIntegration Recording · Job · CLI logs
RestoreSupportsConfigOnlyHelperPackageAndCrossPackageTypes Recording · Job · CLI logs
RunFromParentDirectory_UsesExistingConfigNearAppHost Recording · Job · CLI logs
RunReportsSyntaxErrorsForDotNetAppHost Recording · Job · CLI logs
RunReportsSyntaxErrorsForTypeScriptAppHost Recording · Job · CLI logs
SecretCrudOnDotNetAppHost Recording · Job · CLI logs
SecretCrudOnTypeScriptAppHost Recording · Job · CLI logs
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannels Recording · Job · CLI logs
StartAndWaitForTypeScriptSqlServerAppHostWithNativeAssets Recording · Job · CLI logs
StartReportsSyntaxErrorsForDotNetAppHost Recording · Job · CLI logs
StartReportsSyntaxErrorsForTypeScriptAppHost Recording · Job · CLI logs
StopAllAppHostsFromAppHostDirectory Recording · Job · CLI logs
StopJavaPolyglotAppHostUsingApphostDirectory Recording · Job · CLI logs
StopNonInteractiveSingleAppHost Recording · Job · CLI logs
StopTypeScriptPolyglotAppHostUsingApphostDirectory Recording · Job · CLI logs
StopWithNoRunningAppHostExitsSuccessfully Recording · Job · CLI logs
TypeScriptAppHostRunDoesNotDeadlockWhenLazyOptionsInvokeAsyncCallback Recording · Job · CLI logs
TypeScriptAppHostWithVite_AllowsDifferentGuestPkgManager Recording · Job · CLI logs
UnAwaitedChainsCompileWithAutoResolvePromises Recording · Job · CLI logs
UpdateToStable_CSharpEmptyAppHost_KeepsConfigChannel Recording · Job · CLI logs
UpdateToStable_CSharpSingleFileInit_KeepsConfigChannel Recording · Job · CLI logs
UpdateToStable_TypeScriptSingleFileInit_KeepsConfigChannel Recording · Job · CLI logs
UpdateToStable_TypeScript_PreviewsStablePkgsAndKeepsChannel Recording · Job · CLI logs

📹 Recordings uploaded automatically from CI run #27232459256

Both ignored WithContainerFiles overloads had a one-line <remarks> that
restated the attribute's Reason. Drop them; the [AspireExportIgnore] Reason
already documents how each overload is exposed to ATS.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants