Skip to content

Add Azure resource scope support - #17988

Merged
David Fowler (davidfowl) merged 11 commits into
mainfrom
davidfowl/azure-scope-support-update
Jun 12, 2026
Merged

Add Azure resource scope support#17988
David Fowler (davidfowl) merged 11 commits into
mainfrom
davidfowl/azure-scope-support-update

Conversation

@davidfowl

@davidfowl David Fowler (davidfowl) commented Jun 7, 2026

Copy link
Copy Markdown
Collaborator

Description

Revives and updates the stale Azure scope support from #13121 so Aspire users can target Azure resources outside the default deployment resource group.

Users can now model existing Azure resources and custom Azure Bicep deployments at these scopes:

Scenario Scope emitted
Existing resource in the current deployment resource group default resource group
Existing resource in another resource group in the current subscription resourceGroup(resourceGroupName)
Existing resource in a resource group in another subscription resourceGroup(subscriptionId, resourceGroupName)
Subscription-scoped Azure resource subscription(subscriptionId)
Tenant-scoped Azure resource tenant() for the current tenant

Tenant scope intentionally targets only the current tenant. Bicep supports tenant() but does not support selecting an arbitrary tenant with tenant(tenantId), so manifests write "tenant": "current" and the schema now enforces that value.

Examples

C# AppHost existing-resource APIs

Resource-group-scoped services should use the resource-group APIs. RunAsExisting* applies only in run mode, PublishAsExisting* applies only in publish/deploy mode, and AsExisting* applies in both modes.

var subscriptionId = "00000000-0000-0000-0000-000000000000";
var existingResourceGroup = "rg-existing-shared";

// Existing resource in the current deployment resource group.
builder.AddAzureServiceBus("currentRgBus")
       .RunAsExisting("existing-current-rg-bus", resourceGroup: null);

// Existing resource in another resource group in the current subscription.
builder.AddAzureServiceBus("sameSubscriptionBus")
       .PublishAsExisting("existing-same-sub-bus", existingResourceGroup);

// Existing resource in a resource group in another subscription.
var messaging = builder.AddAzureServiceBus("messaging")
                       .AsExistingInResourceGroup("existingbus", existingResourceGroup, subscriptionId);

messaging.AddServiceBusQueue("queue", queueName: "orders");

// Mode-specific variants for cross-subscription resource-group scoped resources.
builder.AddAzureServiceBus("runOnlyBus")
       .RunAsExistingInResourceGroup("existing-run-bus", existingResourceGroup, subscriptionId);

builder.AddAzureServiceBus("publishOnlyBus")
       .PublishAsExistingInResourceGroup("existing-publish-bus", existingResourceGroup, subscriptionId);

Subscription- and tenant-scoped resources use the matching existing-resource APIs:

const string subscriptionScopedBicep = """
targetScope = 'subscription'

param location string

output subscriptionId string = subscription().subscriptionId
""";

const string tenantScopedBicep = """
targetScope = 'tenant'

output tenantId string = tenant().tenantId
""";

builder.AddBicepTemplateString("runSubscriptionScoped", subscriptionScopedBicep)
       .RunAsExistingInSubscription("existing-run-subscription-resource", subscriptionId);

builder.AddBicepTemplateString("publishSubscriptionScoped", subscriptionScopedBicep)
       .PublishAsExistingInSubscription("existing-publish-subscription-resource", subscriptionId);

builder.AddBicepTemplateString("subscriptionScoped", subscriptionScopedBicep)
       .AsExistingInSubscription("existing-subscription-resource", subscriptionId);

builder.AddBicepTemplateString("runTenantScoped", tenantScopedBicep)
       .RunAsExistingInTenant("existing-run-tenant-resource");

builder.AddBicepTemplateString("publishTenantScoped", tenantScopedBicep)
       .PublishAsExistingInTenant("existing-publish-tenant-resource");

builder.AddBicepTemplateString("tenantScoped", tenantScopedBicep)
       .AsExistingInTenant("existing-tenant-resource");

C# AppHost custom Bicep deployment scopes

Custom Bicep deployments can set AzureBicepResource.Scope directly.

var resourceGroupScoped = builder.AddBicepTemplateString("resourceGroupScoped",
    """
    param location string

    output resourceGroupName string = resourceGroup().name
    """);
resourceGroupScoped.Resource.Scope = new AzureBicepResourceScope(existingResourceGroup);

var crossSubscriptionResourceGroupScoped = builder.AddBicepTemplateString("crossSubscriptionResourceGroupScoped",
    """
    param location string

    output resourceGroupName string = resourceGroup().name
    """);
crossSubscriptionResourceGroupScoped.Resource.Scope = new AzureBicepResourceScope(existingResourceGroup, subscriptionId);

var subscriptionScoped = builder.AddBicepTemplateString("subscriptionScoped",
    """
    targetScope = 'subscription'

    param location string

    output subscriptionId string = subscription().subscriptionId
    """);
subscriptionScoped.Resource.Scope = AzureBicepResourceScope.ForSubscription(subscriptionId);

var tenantScoped = builder.AddBicepTemplateString("tenantScoped",
    """
    targetScope = 'tenant'

    output tenantId string = tenant().tenantId
    """);
tenantScoped.Resource.Scope = AzureBicepResourceScope.ForTenant();

TypeScript AppHost setup

TypeScript AppHosts use empty package versions in aspire.config.json, matching the other playground TypeScript samples:

{
  "appHost": {
    "path": "apphost.mts",
    "language": "typescript/nodejs"
  },
  "packages": {
    "Aspire.Hosting.Azure": "",
    "Aspire.Hosting.Azure.ServiceBus": ""
  }
}

TypeScript AppHost existing-resource APIs

The same existing-resource scope APIs are exported to TypeScript AppHosts.

import { createBuilder } from './.aspire/modules/aspire.mjs';

const builder = await createBuilder();

const subscriptionId = "00000000-0000-0000-0000-000000000000";
const existingResourceGroup = "rg-existing-shared";

// Existing resource in the current deployment resource group.
await builder
    .addAzureServiceBus("currentRgBus")
    .runAsExisting("existing-current-rg-bus");

// Existing resource in another resource group in the current subscription.
await builder
    .addAzureServiceBus("sameSubscriptionBus")
    .publishAsExisting("existing-same-sub-bus", { resourceGroup: existingResourceGroup });

// Existing resource in a resource group in another subscription.
const messaging = await builder
    .addAzureServiceBus("messaging")
    .asExistingInResourceGroup("existingbus", existingResourceGroup, subscriptionId);

await messaging.addServiceBusQueue("queue", { queueName: "orders" });

// Mode-specific variants for cross-subscription resource-group scoped resources.
await builder
    .addAzureServiceBus("runOnlyBus")
    .runAsExistingInResourceGroup("existing-run-bus", existingResourceGroup, subscriptionId);

await builder
    .addAzureServiceBus("publishOnlyBus")
    .publishAsExistingInResourceGroup("existing-publish-bus", existingResourceGroup, subscriptionId);

const subscriptionScopedBicep = `
targetScope = 'subscription'

param location string

output subscriptionId string = subscription().subscriptionId
`;

const tenantScopedBicep = `
targetScope = 'tenant'

output tenantId string = tenant().tenantId
`;

await builder
    .addBicepTemplateString("runSubscriptionScoped", subscriptionScopedBicep)
    .runAsExistingInSubscription("existing-run-subscription-resource", subscriptionId);

await builder
    .addBicepTemplateString("publishSubscriptionScoped", subscriptionScopedBicep)
    .publishAsExistingInSubscription("existing-publish-subscription-resource", subscriptionId);

await builder
    .addBicepTemplateString("subscriptionScoped", subscriptionScopedBicep)
    .asExistingInSubscription("existing-subscription-resource", subscriptionId);

await builder
    .addBicepTemplateString("runTenantScoped", tenantScopedBicep)
    .runAsExistingInTenant("existing-run-tenant-resource");

await builder
    .addBicepTemplateString("publishTenantScoped", tenantScopedBicep)
    .publishAsExistingInTenant("existing-publish-tenant-resource");

await builder
    .addBicepTemplateString("tenantScoped", tenantScopedBicep)
    .asExistingInTenant("existing-tenant-resource");

await builder.build().run();

Generated manifest and Bicep behavior

Scoped Azure Bicep resources now emit azure.bicep.v1 manifest entries with scope metadata:

{
  "type": "azure.bicep.v1",
  "path": "subscriptionScoped.module.bicep",
  "scope": {
    "subscription": "00000000-0000-0000-0000-000000000000"
  }
}
{
  "type": "azure.bicep.v1",
  "path": "tenantScoped.module.bicep",
  "scope": {
    "tenant": "current"
  }
}

Generated Bicep module scopes use the matching ARM scope function:

module resourceGroupScoped 'resourceGroupScoped.module.bicep' = {
  name: 'resourceGroupScoped'
  scope: resourceGroup(subscriptionId, resourceGroupName)
}

module subscriptionScoped 'subscriptionScoped.module.bicep' = {
  name: 'subscriptionScoped'
  scope: subscription(subscriptionId)
}

module tenantScoped 'tenantScoped.module.bicep' = {
  name: 'tenantScoped'
  scope: tenant()
}

Implementation details

  • Adds AzureBicepResourceScope support for resource-group, subscription, and current-tenant scopes.
  • Persists scope data into manifest/schema, generated Bicep module scopes, deployment checksums, and deployment state.
  • Updates Azure provisioning/deploy to resolve cross-subscription resource groups, use subscription/tenant ARM deployment collections, set deployment location for subscription/tenant deployments, and generate scope-correct deployment portal URLs.
  • Keeps dashboard/log metadata accurate by reporting no azure.resource.group for subscription- and tenant-scoped deployments.
  • Keeps tenant scope limited to the current tenant because Bicep supports tenant() but not tenant(tenantId).

Known end-to-end validation finding

Live PR-build validation of the associated shared-resource scenario found that #17988 is necessary but not sufficient for Azure Container Apps using a shared Azure Container Registry from another resource group.

The tested AppHost shape was:

var sharedRegistry = builder.AddAzureContainerRegistry("sharedacr")
    .PublishAsExistingInResourceGroup(acrName, sharedResourceGroup, subscriptionId);

builder.AddAzureContainerAppEnvironment("env")
    .WithAzureContainerRegistry(sharedRegistry);

#17988 correctly models and publishes the shared ACR scope as resourceGroup(subscriptionId, sharedResourceGroup), and deployment can build, log in to, and push images to the shared ACR. However, live aspire deploy fails when the ACA environment module compiles because the generated env/env.bicep contains a cross-scope existing ACR and AcrPull role assignment inside a resource-group-scoped module, which Bicep rejects with BCP139.

The companion ACR/ACA composition fix is #18118 ("Fix BCP139 cross-resource-group ACR AcrPull role in compute environments"). That change moves the AcrPull role assignment into a separately scoped module and keeps the ACA environment module resource-group-local. Both #17988 and #18118 are needed for the shared ACR in another resource group + ACA in this deployment resource group end-to-end scenario.

Validation

  • dotnet test --project tests/Aspire.Hosting.Azure.Tests/Aspire.Hosting.Azure.Tests.csproj --no-launch-profile -- --filter-class "*.AzureBicepProvisionerTests" --filter-class "*.ExistingAzureResourceExtensionsTests" --filter-class "*.ExistingAzureResourceTests" --filter-class "*.BicepUtilitiesTests" --filter-class "*.AzureEnvironmentResourceTests" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"

  • dotnet test --project tests/Aspire.Hosting.Azure.Tests/Aspire.Hosting.Azure.Tests.csproj --no-launch-profile -- --filter-class "*.BicepUtilitiesTests" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"

  • dotnet test --project tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj --no-launch-profile -- --filter-class "*.SchemaTests" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"

  • dotnet test --project tests/Aspire.Hosting.CodeGeneration.TypeScript.Tests/Aspire.Hosting.CodeGeneration.TypeScript.Tests.csproj --no-launch-profile -- --filter-method "*.Scanner_AzureExistingResourceScopes_ExposeTypeScriptCapabilities" --filter-method "*.GenerateDistributedApplication_WithAzureExistingResourceScopes_EmitsTypeScriptMethods" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"

  • ./build.sh --build /p:SkipNativeBuild=true

  • TypeScript AppHost validation with empty package versions in aspire.config.json:

    • aspire restore
    • npx tsc --noEmit --project tsconfig.apphost.json
    • aspire publish -o artifacts --non-interactive
    • az bicep build --file artifacts/main.bicep --stdout
  • PR dogfood CLI validation:

    • Installed and verified aspire version 13.5.0-pr.17988.gda775ed1 from the PR build.
    • C# file-based AppHost publish emitted resourceGroup(subscriptionId, resourceGroupName), subscription(subscriptionId), and tenant() module scopes; az bicep build --file artifacts/main.bicep --stdout succeeded.
  • Live Azure deploy validation in westus2:

    • Initial dogfood deploy exposed that resource-group ARM deployments were incorrectly sent with deployment location; Azure rejected ACA and existing-storage modules with InvalidDeployment. Fixed by only setting ArmDeploymentContent.Location for subscription and tenant deployments.
    • Re-ran live deploy with the fixed source-referenced AppHost: provision-subscope, provision-scopedstorage, provision-aca-acr, provision-aca, and provision-hello-containerapp succeeded.
    • ACA app hello reached Succeeded/Running and served https://hello.proudwave-e68e3b55.westus2.azurecontainerapps.io.
    • Existing storage container scoped-container was created under storage account aspscope0607163331 in rg-aspire-scope-live-existing-0607163331.
    • Subscription-scoped deployment created rg-aspire-scope-live-sub-0607163331 with the expected test tag.
    • Tenant-scoped Graph deployment reached Azure ARM tenant scope and was blocked by tenant RBAC (Microsoft.Resources/deployments/write), confirming the generated deployment path reaches the expected authorization boundary.
  • API clarity pass:

    • Existing-resource APIs keep the established RunAsExisting / PublishAsExisting / AsExisting naming pattern.
    • Tenant-scope XML summaries explicitly say current-tenant-scoped, matching Bicep's tenant() behavior.
  • Live PR-build validation of the shared ACR + ACA customer scenario:

    • Installed and verified aspire version 13.5.0-pr.17988.g6956065f from the PR build.
    • Created a fresh file-based AppHost and tiny ASP.NET project using the PR package hive.
    • Pre-created a shared ACR in a separate resource group and configured ACA with PublishAsExistingInResourceGroup(...).WithAzureContainerRegistry(...).
    • aspire publish emitted the expected resourceGroup(subscriptionId, sharedResourceGroup) scope.
    • aspire deploy --clear-cache failed with Bicep BCP139 in env/env.bicep because the ACA environment module still contained a cross-scope existing ACR and AcrPull role assignment. Posted the detailed report in Add Azure resource scope support #17988 (comment). This requires Fix BCP139 cross-resource-group ACR AcrPull role in compute environments #18118.

Replaces #13121.

Fixes #5901
Part of #7514. The shared ACR + ACA end-to-end scenario from #7514 also requires companion PR #18118.

Checklist

  • Is this feature complete?
  • 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 <223556219+Copilot@users.noreply.github.com>
@github-actions

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

Or

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

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 Azure resource scope support (resource group + subscription, subscription, and current-tenant) to Aspire’s Azure Bicep publishing/provisioning pipeline so existing resources and custom Bicep modules can be targeted outside the default deployment resource group.

Changes:

  • Extends the manifest schema and manifest/Bicep generation to encode and emit module scopes for resource group, subscription, and tenant deployments.
  • Updates Azure provisioning to resolve cross-subscription resource groups, select the correct ARM deployment collection (RG vs subscription vs tenant), and produce scope-correct portal URLs.
  • Adds/updates unit tests and Verify snapshots covering scoped existing resources and scoped Bicep templates.
Show a summary per file
File Description
tests/Aspire.Hosting.Azure.Tests/Snapshots/ExistingAzureResourceTests.SupportsExistingServiceBusWithResourceGroupAndSubscriptionInPublishMode#01.verified.json New snapshot for role-assignment module manifest including RG+subscription scope.
tests/Aspire.Hosting.Azure.Tests/Snapshots/ExistingAzureResourceTests.SupportsExistingServiceBusWithResourceGroupAndSubscriptionInPublishMode#01.verified.bicep New snapshot for role-assignment module Bicep output.
tests/Aspire.Hosting.Azure.Tests/Snapshots/ExistingAzureResourceTests.SupportsExistingServiceBusWithResourceGroupAndSubscriptionInPublishMode#00.verified.json New snapshot for Service Bus module manifest including RG+subscription scope.
tests/Aspire.Hosting.Azure.Tests/Snapshots/ExistingAzureResourceTests.SupportsExistingServiceBusWithResourceGroupAndSubscriptionInPublishMode#00.verified.bicep New snapshot for Service Bus module Bicep output.
tests/Aspire.Hosting.Azure.Tests/Snapshots/ExistingAzureResourceTests.SupportsBicepTemplateWithTenantScopeInPublishMode.verified.json New snapshot for tenant-scoped module manifest.
tests/Aspire.Hosting.Azure.Tests/Snapshots/ExistingAzureResourceTests.SupportsBicepTemplateWithTenantScopeInPublishMode.verified.bicep New snapshot for tenant-scoped module Bicep output.
tests/Aspire.Hosting.Azure.Tests/Snapshots/ExistingAzureResourceTests.SupportsBicepTemplateWithSubscriptionScopeInPublishMode.verified.json New snapshot for subscription-scoped module manifest.
tests/Aspire.Hosting.Azure.Tests/Snapshots/ExistingAzureResourceTests.SupportsBicepTemplateWithSubscriptionScopeInPublishMode.verified.bicep New snapshot for subscription-scoped module Bicep output.
tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureEnvironmentResourceTests.AzurePublishingContext_WritesScopedModuleExpressions.verified.bicep New snapshot validating generated scope: expressions for RG/subscription/tenant modules in the main Bicep.
tests/Aspire.Hosting.Azure.Tests/ProvisioningTestHelpers.cs Enhances ARM test fakes to model subscription/tenant deployment collections and scoped RG lookup.
tests/Aspire.Hosting.Azure.Tests/ExistingAzureResourceTests.cs Adds publish-mode coverage for scoped existing Service Bus and scoped custom Bicep templates.
tests/Aspire.Hosting.Azure.Tests/ExistingAzureResourceExtensionsTests.cs Adds unit tests for new AsExistingIn* APIs across run/publish modes.
tests/Aspire.Hosting.Azure.Tests/BicepUtilitiesTests.cs Adds tests for serializing/removing scoped values (RG+subscription, subscription-only, tenant, stale removal).
tests/Aspire.Hosting.Azure.Tests/AzureEnvironmentResourceTests.cs Adds test verifying AzurePublishingContext emits correct module scope expressions.
tests/Aspire.Hosting.Azure.Tests/AzureBicepProvisionerTests.cs Adds coverage ensuring provisioner selects correct ARM deployment collection per scope and sets location.
src/Schema/aspire-8.0.json Extends manifest schema to allow scope.subscription and scope.tenant for azure.bicep.v1.
src/Aspire.Hosting.Azure/Provisioning/Provisioners/BicepProvisioner.cs Implements scoped subscription resolution, scope-aware deployment collection selection, and scope-correct deployment URLs/logging.
src/Aspire.Hosting.Azure/Provisioning/Internal/IProvisioningServices.cs Extends provisioning abstractions: subscription lookup by id and tenant deployment collection support.
src/Aspire.Hosting.Azure/Provisioning/Internal/DefaultArmClientProvider.cs Implements new provisioning abstraction methods using Azure SDK resources.
src/Aspire.Hosting.Azure/Provisioning/BicepUtilities.cs Extends scope serialization to include subscription and tenant and clears stale scope keys.
src/Aspire.Hosting.Azure/ExistingAzureResourceExtensions.cs Adds public & polyglot-facing APIs for existing resources in RG+subscription, subscription scope, and tenant scope.
src/Aspire.Hosting.Azure/ExistingAzureResourceAnnotation.cs Extends annotation to carry subscription and current-tenant scoping information.
src/Aspire.Hosting.Azure/AzureResourcePreparer.cs Applies full existing-resource scope (not just RG) to role-assignment resources.
src/Aspire.Hosting.Azure/AzurePublishingContext.cs Emits correct Bicep module scope: expressions for RG/subscription/tenant.
src/Aspire.Hosting.Azure/AzureProvisioningResource.cs Applies the expanded scope model into provisioning expressions and scope equality checks.
src/Aspire.Hosting.Azure/AzureBicepResourceScope.cs Extends scope model to support subscription-only and current-tenant scopes and converts from existing-resource annotation.
src/Aspire.Hosting.Azure/AzureBicepResource.cs Writes expanded scope object (RG/subscription/tenant) into azure.bicep.v1 manifest entries.

Copilot's findings

  • Files reviewed: 27/27 changed files
  • Comments generated: 2

Comment thread src/Aspire.Hosting.Azure/Provisioning/Provisioners/BicepProvisioner.cs Outdated
Comment thread src/Schema/aspire-8.0.json Outdated
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
David Fowler (davidfowl) and others added 3 commits June 7, 2026 09:54
Only set ARM deployment location for subscription and tenant scoped Bicep deployments. Resource group deployments reject the location property, which blocked existing-resource and ACA live deployment validation. Also clarify that tenant-scoped existing-resource APIs target the current tenant.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Report no resource group for subscription and tenant scoped Azure deployments, and clarify the manifest schema only supports the current tenant scope.

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

github-actions Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

Re-running the failed jobs in the CI workflow for this pull request because 1 job was identified as retry-safe transient failures in the CI run attempt.
GitHub was asked to rerun all failed jobs for that attempt, and the rerun is being tracked in the rerun attempt.
The job links below point to the failed attempt jobs that matched the retry-safe transient failure rules.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings June 11, 2026 04:55
@mitchdenny

Copy link
Copy Markdown
Member

I would like to see an end to end deployment test for this. For cross subscription we might be able to fake it by just using that overload but deploying to the same subscription. Before I click approve on this I want to see those tests and those deployment test results.

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.

Copilot's findings

  • Files reviewed: 30/30 changed files
  • Comments generated: 2

Comment thread src/Aspire.Hosting.Azure/AzureBicepResourceScope.cs
Comment thread src/Aspire.Hosting.Azure/Provisioning/Provisioners/BicepProvisioner.cs Outdated
David Fowler (davidfowl) and others added 2 commits June 10, 2026 22:22
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings June 11, 2026 08:41
@davidfowl

Copy link
Copy Markdown
Collaborator Author

Added AzureResourceScopeDeploymentTests.DeployExistingServiceBusWithResourceGroupAndSubscriptionScope, which uses the resource group + subscription overload with the current subscription and a separate existing resource group to exercise the same scoped deployment path.

Deployment result from local live run against subscription 39a289cd... in westus3: dotnet test --project tests/Aspire.Deployment.EndToEnd.Tests/Aspire.Deployment.EndToEnd.Tests.csproj --no-launch-profile -- --filter-method "*.DeployExistingServiceBusWithResourceGroupAndSubscriptionScope" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true" passed, 1/1 succeeded in 5m 23s. The deploy completed 17/17 steps, then az servicebus queue show verified scopedqueue was Active in the scoped existing resource group/namespace, followed by aspire destroy --yes and resource group cleanup.

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.

Copilot's findings

  • Files reviewed: 31/31 changed files
  • Comments generated: 2

Comment thread src/Aspire.Hosting.Azure/AzureBicepResourceScope.cs
Comment thread src/Aspire.Hosting.Azure/Provisioning/BicepUtilities.cs Outdated
@github-actions

Copy link
Copy Markdown
Contributor

Re-running the failed jobs in the CI workflow for this pull request because 1 job was identified as retry-safe transient failures in the CI run attempt.
GitHub was asked to rerun all failed jobs for that attempt, and the rerun is being tracked in the rerun attempt.
The job links below point to the failed attempt jobs that matched the retry-safe transient failure rules.

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

Copy link
Copy Markdown
Collaborator Author

/deployment-test

@github-actions

Copy link
Copy Markdown
Contributor

🚀 Deployment tests starting on PR #17988...

This will deploy to real Azure infrastructure. Results will be posted here when complete.

View workflow run

@github-actions
github-actions Bot had a problem deploying to deployment-testing June 11, 2026 16:35 Failure
@github-actions
github-actions Bot temporarily deployed to deployment-testing June 11, 2026 16:35 Inactive
@github-actions
github-actions Bot temporarily deployed to deployment-testing June 11, 2026 16:35 Inactive
@github-actions
github-actions Bot temporarily deployed to deployment-testing June 11, 2026 16:35 Inactive
@github-actions
github-actions Bot temporarily deployed to deployment-testing June 11, 2026 16:35 Inactive
@github-actions
github-actions Bot had a problem deploying to deployment-testing June 11, 2026 16:35 Failure
@github-actions
github-actions Bot temporarily deployed to deployment-testing June 11, 2026 16:35 Inactive
@github-actions
github-actions Bot had a problem deploying to deployment-testing June 11, 2026 16:35 Failure
@github-actions
github-actions Bot temporarily deployed to deployment-testing June 11, 2026 16:35 Inactive
@github-actions
github-actions Bot temporarily deployed to deployment-testing June 11, 2026 16:35 Inactive
@github-actions

Copy link
Copy Markdown
Contributor

Deployment E2E Tests failed — 37 passed, 5 failed, 0 cancelled

View test results and recordings

View workflow run

Test Result Recording
Deployment.EndToEnd-AcaCompactNamingDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AzureServiceBusDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AzureStorageDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AzureLogAnalyticsDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AzureResourceScopeDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AzureStorageRunModeTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AksWithAzureResourcesDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AksBlazorRedisDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-NspStorageKeyVaultDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AzureAppConfigDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AppServiceReactDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-VnetStorageBlobConnectivityDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AuthenticationTests ✅ Passed
Deployment.EndToEnd-AcaStarterDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AcaExistingRegistryDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AzureEventHubsDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AksMultipleNodePoolsDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AzureContainerRegistryDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-VnetKeyVaultInfraDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AzureKeyVaultDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AksVnetWithAzureResourcesDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-TypeScriptJavaScriptHostingDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AcaCustomRegistryDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AksStarterDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-VnetStorageBlobInfraDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-FrontDoorDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-TypeScriptAzureContainerAppJobDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-VnetSqlServerConnectivityDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AksStarterWithRedisHelmDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-TypeScriptVnetSqlServerInfraDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-VnetSqlServerInfraDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-TypeScriptExpressDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AksWithHelmChartDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AksVnetInfraDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-KubernetesHelmChartDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AcaDeploymentErrorOutputTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-VnetKeyVaultConnectivityDeploymentTests ✅ Passed ▶️ View Recording
Deployment.EndToEnd-AksAzureKubernetesEnvironmentCertManagerTypeScriptDeploymentTests ❌ Failed ▶️ View Recording
Deployment.EndToEnd-KubernetesGatewayTlsDeploymentTests ❌ Failed ▶️ View Recording
Deployment.EndToEnd-AksAzureKubernetesEnvironmentCertManagerDeploymentTests ❌ Failed ▶️ View Recording
Deployment.EndToEnd-AksAzureKubernetesEnvironmentGatewayDeploymentTests ❌ Failed ▶️ View Recording
Deployment.EndToEnd-AcaManagedRedisDeploymentTests ❌ Failed ▶️ View Recording

@davidfowl

Copy link
Copy Markdown
Collaborator Author

PR Testing Report

PR Information

Artifact Version Verification

  • Expected Commit: fccb9e8
  • Installed Version: 13.5.0-pr.17988.gfccb9e84
  • Status: Verified. The installed PR CLI version includes the head short SHA fccb9e84.
  • CLI Path: /var/folders/yx/2sfj5rw95xxb_4mg1vlnlpsh0000gn/T/aspire-pr-test-XXXXXX.tZ6cP3wKN6/dogfood/pr-17988/bin/aspire
  • PR Hive: /var/folders/yx/2sfj5rw95xxb_4mg1vlnlpsh0000gn/T/aspire-pr-test-XXXXXX.tZ6cP3wKN6/hives/pr-17988/packages

Changes Analyzed

  • Hosting Azure changes: Azure resource scope APIs, publish/provision/deploy behavior, existing-resource scope metadata
  • Schema changes: azure.bicep.v1 scope shape and tenant current validation
  • TypeScript codegen changes: generated existing-resource scope helper methods
  • Test changes: Azure hosting tests, schema tests, TypeScript codegen tests, deployment E2E coverage
  • CLI, dashboard, client/component, VS Code extension, or CI infrastructure changes

Test Scenarios Executed

Scenario 1: C# all-scope publish sample

Objective: Verify C# AppHost APIs generate valid Bicep for default resource group, explicit resource group + subscription, subscription scope, tenant scope, and existing Service Bus in an explicit resource group + subscription.
Coverage Type: Happy path / boundary
Status: Passed

Steps: Created CSharpScopeSample from the PR hive, added Aspire.Hosting.Azure.ServiceBus, authored an AppHost using PublishAsExistingInResourceGroup, AzureBicepResourceScope.ForSubscription, AzureBicepResourceScope.ForTenant, and new AzureBicepResourceScope(resourceGroup, subscription), ran aspire publish, verified generated scope expressions, and compiled main.bicep with az bicep build.

Evidence:

  • Sample: /Users/davidfowler/.copilot/session-state/4c90a587-96de-4766-acf9-a5bf16385832/files/pr-17988-testing/samples/CSharpScopeSample.apphost.cs
  • Main Bicep: /Users/davidfowler/.copilot/session-state/4c90a587-96de-4766-acf9-a5bf16385832/files/pr-17988-testing/bicep/CSharpScopeSample.main.bicep
  • Publish log: /Users/davidfowler/.copilot/session-state/4c90a587-96de-4766-acf9-a5bf16385832/files/pr-17988-testing/logs/CSharpScopeSample-publish.log

Observations: Bicep compiled successfully. Custom scoped Bicep templates need to declare param location string because Aspire passes location into generated modules.


Scenario 2: TypeScript existing resource scope sample

Objective: Verify generated TypeScript APIs compile and publish for existing Azure resources scoped to an explicit resource group + subscription.
Coverage Type: Happy path
Status: Passed

Steps: Created TypeScriptScopeSample from the PR hive, added Aspire.Hosting.Azure.ServiceBus, authored an AppHost using publishAsExistingInResourceGroup(existingName, existingResourceGroup, subscriptionId) and queue creation, ran npm run build, ran aspire publish, verified generated explicit RG + subscription scope, and compiled main.bicep with az bicep build.

Evidence:

  • Sample: /Users/davidfowler/.copilot/session-state/4c90a587-96de-4766-acf9-a5bf16385832/files/pr-17988-testing/samples/TypeScriptScopeSample.apphost.mts
  • Main Bicep: /Users/davidfowler/.copilot/session-state/4c90a587-96de-4766-acf9-a5bf16385832/files/pr-17988-testing/bicep/TypeScriptScopeSample.main.bicep
  • Build log: /Users/davidfowler/.copilot/session-state/4c90a587-96de-4766-acf9-a5bf16385832/files/pr-17988-testing/logs/TypeScriptScopeSample-build.log
  • Publish log: /Users/davidfowler/.copilot/session-state/4c90a587-96de-4766-acf9-a5bf16385832/files/pr-17988-testing/logs/TypeScriptScopeSample-publish.log

Observations: TypeScript generated existing-resource scope helpers are usable. Direct custom AzureBicepResource.Scope assignment remains a C#-only sample surface because it is a resource property, not a generated TypeScript helper method.


Scenario 3: Manual live Azure deploy sample

Objective: Verify a realistic Azure deployment using an existing Service Bus namespace in a separate resource group, scoped with resource group + subscription, without invoking the E2E test project.
Coverage Type: Live Azure happy path
Status: Passed with observation

Steps: Created LiveServiceBusScopeSample from the PR hive, created a temporary existing RG and Service Bus namespace in subscription 39a289cd-f0fc-4d59-a745-17cf49d6aafd / tenant 72f988bf-86f1-41af-91ab-2d7cd011db47 / westus3, used PublishAsExistingInResourceGroup(...) and ClearDefaultRoleAssignments(), ran aspire deploy, verified queue orders was Active, ran aspire destroy --yes, and started deletion of all temporary resource groups.

Evidence:

  • Sample: /Users/davidfowler/.copilot/session-state/4c90a587-96de-4766-acf9-a5bf16385832/files/pr-17988-testing/samples/LiveServiceBusScopeSample.apphost.cs
  • Live variables: /Users/davidfowler/.copilot/session-state/4c90a587-96de-4766-acf9-a5bf16385832/files/pr-17988-testing/logs/live-stateful-vars.txt
  • Deploy log: /Users/davidfowler/.copilot/session-state/4c90a587-96de-4766-acf9-a5bf16385832/files/pr-17988-testing/logs/live-stateful-deploy-*.log
  • Destroy log: /Users/davidfowler/.copilot/session-state/4c90a587-96de-4766-acf9-a5bf16385832/files/pr-17988-testing/logs/live-stateful-destroy-*.log
  • Verification log: /Users/davidfowler/.copilot/session-state/4c90a587-96de-4766-acf9-a5bf16385832/files/pr-17988-testing/logs/live-stateful-verify-*.log

Observations: Deploy succeeded with 12/12 steps and queue verification returned { "name": "orders", "status": "Active" }. aspire destroy succeeded and deleted the Aspire deployment resource group/state. The queue in the pre-created existing resource group still existed after aspire destroy (postDestroyQueueShowExitCode=0), so the sample cleanup deletes the temporary existing resource group separately. This matches the current E2E cleanup shape and is important for manual testing.


Scenario 4: Focused automated tests

Objective: Validate changed Azure hosting, TypeScript codegen, and schema behavior with targeted MTP filters.
Coverage Type: Unit/schema/codegen
Status: Passed

Results:

  • BicepUtilitiesTests: 26 passed.
  • ExistingAzureResourceTests: 31 passed.
  • AzureBicepProvisionerTests: 37 passed.
  • AzureEnvironmentResourceTests: 8 passed.
  • ExistingAzureExtensionsResourceTests: 16 passed.
  • TypeScript scope methods: 2 passed.
  • Schema tenant-current validation: 1 passed.

Evidence: Logs are under /Users/davidfowler/.copilot/session-state/4c90a587-96de-4766-acf9-a5bf16385832/files/pr-17988-testing/logs/.

Summary

Scenario Status Notes
Artifact version verification Passed PR CLI 13.5.0-pr.17988.gfccb9e84 matches head short SHA
C# all-scope publish sample Passed Generated scopes include resource group + subscription, subscription, and tenant; Bicep compiled
TypeScript existing resource scope sample Passed TS build/publish succeeded; generated explicit RG + subscription scope compiled
Manual live Azure deploy sample Passed with observation Queue deployed active; destroy removed deployment RG/state, existing scoped RG cleanup remains separate
Focused automated tests Passed 121 targeted tests passed total

Overall Result

PR VERIFIED with one cleanup observation: scoped child resources deployed into a pre-existing resource group are not removed by aspire destroy; manual tests should delete the temporary existing resource group or resource afterward.

@davidfowl
David Fowler (davidfowl) marked this pull request as ready for review June 12, 2026 05:08
Copilot AI review requested due to automatic review settings June 12, 2026 05:08

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.

Copilot's findings

  • Files reviewed: 31/31 changed files
  • Comments generated: 0 new

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

Copy link
Copy Markdown
Collaborator Author

PR Testing Report

PR Information

Artifact Version Verification

  • Expected Commit: 6956065
  • Installed Version: 13.5.0-pr.17988.g6956065f
  • Status: Verified

Changes Analyzed

  • Azure Hosting/provisioning changes for explicit Azure resource scopes.
  • Existing Azure resource APIs for resource-group + subscription scope.
  • Azure Container Registry + Azure Container Apps deployment behavior through existing registry references.

Test Scenarios Executed

Scenario 1: Shared ACR in another resource group with ACA deployed to app resource group

Objective: Validate the customer scenario from the associated issues: local/dev or production app deployment into one resource group while using a shared organization Azure Container Registry from another resource group in the same subscription.
Coverage Type: Live Azure deployment
Status: Failed

Steps:

  1. Used PR dogfood CLI from Add Azure resource scope support #17988 and verified version 13.5.0-pr.17988.g6956065f matches PR head 6956065f97ea62adccff42ffccda22e7b36fe27a.
  2. Created a fresh file-based C# AppHost from the PR package hive.
  3. Created a tiny ASP.NET Web project and added it to the AppHost.
  4. Pre-created a shared resource group and ACR.
  5. Configured AppHost with PublishAsExistingInResourceGroup for the shared ACR and WithAzureContainerRegistry on the ACA environment.
  6. Published artifacts and confirmed the generated Bicep contains the explicit shared resource group/subscription scope.
  7. Ran aspire deploy --clear-cache into a separate deployment resource group.

AppHost shape:

var sharedRegistry = builder.AddAzureContainerRegistry("sharedacr")
    .PublishAsExistingInResourceGroup("<acr-name>", "<shared-resource-group>", "<subscription-id>");

builder.AddAzureContainerAppEnvironment("env")
    .WithAzureContainerRegistry(sharedRegistry);

Observed:

  • Publish output correctly emitted the top-level module scope:
module sharedacr 'sharedacr/sharedacr.bicep' = {
  name: 'sharedacr'
  scope: resourceGroup('<subscription-id>', '<shared-resource-group>')
}
  • Deploy failed when compiling the ACA environment module:
Error BCP139: A resource's scope must match the scope of the Bicep file for it to be deployable. You must use modules to deploy resources to a different scope.
  • The failing module contains this existing ACR declaration inside env/env.bicep:
resource sharedacr 'Microsoft.ContainerRegistry/registries@2025-04-01' existing = {
  name: '<acr-name>'
  scope: resourceGroup('<subscription-id>', '<shared-resource-group>')
}

resource sharedacr_env_mi_AcrPull 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  scope: sharedacr
}

Impact:
This blocks the associated customer scenario where ACA deploys into the app resource group while using a shared organization ACR from another resource group in the same subscription. The PR can publish the intended scope, build the container image, log into the shared ACR, and push the image, but ACA environment provisioning fails because the environment module contains a cross-scope existing resource instead of delegating that cross-scope work through a module at the correct scope.

Cleanup:

  • aspire destroy found no saved deployment state because the deployment used --clear-cache and failed before state was saved.
  • Both test resource groups were deleted or reported not found after cleanup.

Evidence:

  • Test directory: /var/folders/yx/2sfj5rw95xxb_4mg1vlnlpsh0000gn/T/aspire-pr-17988-acr-aca-empty-XXXXXX.yq6PcbOCIg
  • Logs: /var/folders/yx/2sfj5rw95xxb_4mg1vlnlpsh0000gn/T/aspire-pr-17988-acr-aca-empty-XXXXXX.yq6PcbOCIg/logs
  • AppHost: logs/apphost.cs.log
  • Publish scope check: logs/publish-scope-check.log
  • Deployment failure: logs/aspire_deploy.log

Summary

Scenario Status Notes
Shared ACR separate RG + ACA deployment RG Failed Bicep BCP139 in ACA environment module for cross-RG existing ACR role assignment.

Overall Result

ISSUE FOUND

Adds two focused unit tests to verify that existing Azure resources
with cross-subscription and tenant scope annotations survive the DCP
run-mode pipeline (ExecuteBeforeStartHooksAsync) without blowing up:

- SupportsExistingServiceBusWithResourceGroupAndSubscriptionInRunMode
- SupportsExistingServiceBusWithTenantScopeInRunMode

Each test verifies that the scope annotation is preserved correctly
and that no deployment target is added in run mode (the annotation
is carried but provisioning is deferred to the BicepProvisioner at
local F5 time, not the DCP startup pipeline).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings June 12, 2026 11:37

@mitchdenny Mitch Denny (mitchdenny) left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Code review complete. The architecture is sound — scope metadata flows cleanly from the AppHost annotation through Bicep generation and ARM deployment routing. Test coverage is solid across all four scope types at the unit level, with a passing live deployment E2E test for the primary cross-subscription/RG scenario.

I've added two additional run-mode unit tests to cover the DCP path for cross-subscription and tenant scope:

  • SupportsExistingServiceBusWithResourceGroupAndSubscriptionInRunMode
  • SupportsExistingServiceBusWithTenantScopeInRunMode

These verify that the scope annotations survive ExecuteBeforeStartHooksAsync without errors and carry through correctly in run mode.

One known limitation documented by the author: cross-scope resource references within a single Bicep module (e.g. ACA + shared ACR in different RGs) fail with Bicep BCP139. This is a Bicep module architecture issue outside the scope of this PR and is tracked in the PR testing report.

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.

Copilot's findings

  • Files reviewed: 40/40 changed files
  • Comments generated: 0 new

@davidfowl
David Fowler (davidfowl) merged commit 2780eda into main Jun 12, 2026
667 of 670 checks passed
@davidfowl
David Fowler (davidfowl) deleted the davidfowl/azure-scope-support-update branch June 12, 2026 16:03
@microsoft-github-policy-service microsoft-github-policy-service Bot added this to the 13.5 milestone Jun 12, 2026
@github-actions

Copy link
Copy Markdown
Contributor

CLI E2E Tests unknown — 115 passed, 0 failed, 2 unknown (commit 412510d)

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
AgentMcpListResources_ExcludesResourceMarkedWithExcludeFromMcp 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
TerminalAttachFrontend_ShowsViteHelpAndDetaches 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 #27413259906

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Allow to use AddBicepTemplate on subscription level, controlling target scope

3 participants