Flow main to feature/watch-prototype#14959
Merged
tmat merged 280 commits intodotnet:feature/watch-prototypefrom Mar 5, 2026
Merged
Flow main to feature/watch-prototype#14959tmat merged 280 commits intodotnet:feature/watch-prototypefrom
tmat merged 280 commits intodotnet:feature/watch-prototypefrom
Conversation
…and_SkipsBuild_WhenExtensionDevKitCapabilityIsAvailable (dotnet#14322) * [automated] Disable Aspire.Cli.Tests.Commands.RunCommandTests.RunCommand_SkipsBuild_WhenExtensionDevKitCapabilityIsAvailable * Update tests/Aspire.Cli.Tests/Commands/RunCommandTests.cs --------- Co-authored-by: github-actions <github-actions@github.com> Co-authored-by: David Fowler <davidfowl@gmail.com>
Co-authored-by: sebastienros <sebastienros@users.noreply.github.com>
…net#14278) * Refactor endpoint resolution logic so that `EndpointReferenceExpression.GetValueAsync()` can be context aware. To make this work, DCP now always allocates a `DefaultAspireContainerNetwork` endpoint when a container is created alongside the existing `LocalhostNetwork` endpoint. * PR Review + fix broken test. * Fix `WithEnvironmentTests.EnvironmentVariableExpressions()` * - Fix Broken Tests - Add some DebuggerDisplay attributes to `ValueSnapshot`, and `NetworkEndpointSnapshotList` to make debugging easier - Explcitly use `*.dev.internal` alias for container networks - Don't allocate endpoints on custom networks * Fix test changed by previous commit removing support for custom networks. * One more failing test * Remove redundant comment.
* Update dependencies from https://github.com/microsoft/dcp build 0.22.3 On relative base path root Microsoft.DeveloperControlPlane.darwin-amd64 , Microsoft.DeveloperControlPlane.darwin-arm64 , Microsoft.DeveloperControlPlane.linux-amd64 , Microsoft.DeveloperControlPlane.linux-arm64 , Microsoft.DeveloperControlPlane.linux-musl-amd64 , Microsoft.DeveloperControlPlane.windows-amd64 , Microsoft.DeveloperControlPlane.windows-arm64 From Version 0.22.2 -> To Version 0.22.3 * Quarantine the tunnel test --------- Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com> Co-authored-by: Karol Zadora-Przylecki <karolz@microsoft.com>
* Update MCP error to suggest 'aspire run --detach' * Add test assertions for --detach in MCP error message * Show help when aspire is invoked without arguments * Return InvalidCommand exit code for consistency with other parent commands * Add tests for parent command exit codes to prevent regression
Co-authored-by: Shilpi Rachna <shilpir@microsoft.com>
…n to public method (dotnet#14319) * Initial plan * Change GetHostAddressExpression implementations to public methods Co-authored-by: eerhardt <8291187+eerhardt@users.noreply.github.com> * Add Experimental attribute to GetHostAddressExpression methods Co-authored-by: eerhardt <8291187+eerhardt@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: eerhardt <8291187+eerhardt@users.noreply.github.com>
…dotnet#14326) * Add E2E deployment test for React + ASP.NET Core to Azure App Service This adds a new deployment test that: - Creates a project using the Starter App (ASP.NET Core/React) template - Deploys to Azure App Service (instead of Container Apps) - Verifies the deployed endpoints are accessible The test follows the established patterns from AcaStarterDeploymentTests and PythonFastApiDeploymentTests. * Fix prompt sequence for React template The React template (aspire-ts-cs-starter) has different prompts than the Blazor starter template: - Does NOT have a 'test project' prompt - Output path prompt includes the default path Updated to match the working JsReactTemplateTests pattern. * Increase deployment timeouts to 30 min and fix cleanup workflow - Increase pipeline wait timeout from 10-20 min to 30 min across all deployment tests - Increase overall test timeout to 40 min to accommodate longer deployments - Fix cleanup workflow to target both e2e-* (current) and rg-aspire-* (legacy) prefixes * Add endpoint verification retry logic to deployment tests Each endpoint is now retried up to 18 times (10 second intervals) for a total of ~3 minutes before failing. This handles cases where deployed apps need time to become responsive after deployment completes. * Fix deployment test command to link to actual workflow run Move the 'starting' comment from deployment-test-command.yml to deployment-tests.yml where it has direct access to github.run_id. The notify-start job only runs when pr_number is provided, matching the existing post_pr_comment job pattern. * Add Azure quota requirements to deployment test README Document the required Azure subscription quotas for running deployment E2E tests, including Container Apps managed environments (150+) and App Service PremiumV3 vCPUs (10+). Also updated timeout documentation and cleanup commands. * Add Python FastAPI to Azure App Service deployment test New test case AppServicePythonDeploymentTests that deploys the FastAPI/React template to Azure App Service instead of Container Apps. This mirrors PythonFastApiDeploymentTests but targets App Service. * Enhance PR comment to show passed/failed tests separately - Query individual matrix job results to determine per-test outcomes - Display passed, failed, and cancelled tests in separate sections - Show summary counts (X passed, Y failed, Z cancelled) - Include recordings only for tests that have them * Add Azure resource deployment E2E tests (Phase 1) Add 7 new E2E deployment tests for Azure resources using aspire init: Simple/Low-cost resources: - AzureStorageDeploymentTests - Azure Storage Account - AzureKeyVaultDeploymentTests - Azure Key Vault - AzureAppConfigDeploymentTests - Azure App Configuration - AzureLogAnalyticsDeploymentTests - Azure Log Analytics Workspace - AzureContainerRegistryDeploymentTests - Azure Container Registry Messaging resources: - AzureServiceBusDeploymentTests - Azure Service Bus - AzureEventHubsDeploymentTests - Azure Event Hubs Each test: 1. Uses 'aspire init' to create a single-file AppHost 2. Adds the Azure hosting package via 'aspire add' 3. Injects resource code into apphost.cs 4. Deploys to Azure using 'aspire deploy' 5. Verifies the resource was created 6. Cleans up the resource group * Fix duplicate heading in deployment tests README * Fix Azure location for deployment tests - use westus3 The subscription has quota limits in eastus (only 1 Container App environment). We have expanded quota in westus3, so change the workflow to deploy there. * Fix Azure resource tests to handle NuGet.config prompt The aspire init command now prompts for 'Create NuGet.config for selected channels?' before creating the AppHost. Updated all 7 Azure resource tests to: 1. Handle the new NuGet.config prompt (press Enter for Yes) 2. Remove language selection handling (only appears with polyglot enabled) * Fix aspire init pattern matching for CI environment In CI, aspire init: 1. Auto-creates NuGet.config without prompting (no interactive prompt) 2. Shows 'Aspire initialization complete' instead of 'Created apphost.cs' Updated all 7 Azure resource tests to: - Wait for 'Aspire initialization complete' pattern - Remove the NuGet.config prompt handling (not needed in CI) * Handle NuGet.config prompt that may or may not appear in CI The NuGet.config prompt behavior is inconsistent in CI - sometimes it appears interactively, sometimes it auto-accepts. Updated tests to: 1. Wait 5 seconds after running aspire init 2. Press Enter (dismisses prompt if present, no-op if auto-accepted) 3. Then wait for 'Aspire initialization complete' This handles both interactive and non-interactive cases. * Add Azure Container App Environment for role assignment support Azure resources that require role assignments (Storage, KeyVault, AppConfig, ServiceBus, EventHubs) need a managed identity principal. The Container App Environment provides this. Updated 5 failing tests to include: builder.AddAzureContainerAppEnvironment("env") This provides the principal required for provisioning role assignments. * Add Aspire.Hosting.Azure.ContainerApps package for CAE support AddAzureContainerAppEnvironment() requires the ContainerApps hosting package. Updated 5 tests to add this package before adding the specific Azure resource package. Flow is now: 1. aspire init 2. aspire add Aspire.Hosting.Azure.ContainerApps 3. aspire add Aspire.Hosting.Azure.{Resource} 4. modify apphost.cs to use AddAzureContainerAppEnvironment + AddAzure{Resource} * Fix aspire add integration selection prompt handling Add pattern searcher for 'Select an integration to add:' prompt and wait for it before pressing Enter to select the first match. This handles the fuzzy matching that shows multiple options. * Fix aspire add prompt handling - use combined pattern searcher aspire add may show either: - Integration selection prompt if multiple matches - Version selection prompt if unique match The combined searcher waits for either prompt type. * Fix aspire add to handle TWO prompts for ContainerApps aspire add Aspire.Hosting.Azure.ContainerApps triggers: 1. Integration selection prompt (matches multiple Azure packages) 2. Version selection prompt (in CI) Need to wait for and handle both prompts sequentially. * Address code review feedback - Use discard pattern (_) instead of unused variable for AddAzureContainerAppEnvironment - Update README.md Test Structure section to include new Azure resource test files * Skip App Service deployment tests due to infrastructure timeouts App Service provisioning takes longer than 30 minutes, causing test timeouts. Skipped until infrastructure issues are resolved. --------- Co-authored-by: Mitch Denny <mitch@mitchdeny.com>
…: Build ID 2895128 (dotnet#14332)
- Add step in run-tests.yml to copy .cast files and upload as
'cli-e2e-recordings-{TestName}' artifacts
- Simplify cli-e2e-recording-comment.yml to filter by artifact name prefix
- Removes need for hardcoded test class name list
Co-authored-by: Mitch Denny <mitch@mitchdeny.com>
* Add Kubernetes/Helm E2E test for CLI publishing - Add KubernetesPublishTests.cs to correct project (Aspire.Cli.EndToEnd.Tests) - Delete orphaned tests/Aspire.Cli.EndToEndTests folder (misnamed, no csproj) * Address PR feedback: improve test reliability and cleanup - Add .WithDimensions(160, 48) to terminal builder for consistency - Make KinD/Helm versions configurable via environment variables - Use unique cluster names (GUID-based) for parallel test execution - Add kubectl wait --for=condition=Ready for proper pod verification - Wrap test in try/finally with best-effort cleanup via Process API - Improve comment explaining port override rationale * Pass CancellationToken to WaitForExitAsync in cleanup --------- Co-authored-by: Mitch Denny <mitch@mitchdeny.com>
* Add initial Aspire.Hosting.Azure.Network integration
This is the first round of supporting Azure virtual networks in Aspire. Currently it supports:
Creating a virtual network
Creating subnets
Creating private endpoints to Storage blobs and queues
Future PRs will enable:
More private endpoint support. This is just the core / first resource.
Being able to add NAT Gateways and public IPs.
This pull request introduces a new Azure Virtual Network end-to-end sample to the repository, demonstrating how to configure a virtual network, subnets, private endpoints, and secure storage access for containerized applications. It also adds support for Azure Network and Private DNS provisioning packages, and makes minor improvements to existing storage modules.
* Get some stuff working
* Don't add VNet resources in run mode.
Add a delegation annotation so things like ACA can delegate subnets.
* Initial support for private endpoints.
* Add Azure.Provisioning.PrivateDns and update to latest
* Remove unncessary workaround
* Finish implementing private endpoints.
Gets AzureStorageEndToEnd working with a vnet and private endpoints.
* Make new Aspire.Hosting.Azure APIs experimental
* Add unit tests.
Remove NatGateway (for now). This will come in a separate PR.
Clean up some code.
* More clean up
* Move to a new playground app specific to VNets
* Fix AddSubnet API
* Rename AddAzurePrivateEndpoint and hang it off of AzureSubnetResource.
* Don't add PrivateEndpointTargetAnnotation in run mode. Also walk the hierarchy until you reach the root resource.
* Add WithSubnet API for ACA environments and improve delegation naming
- Add IAzureDelegatedSubnetResource interface and DelegatedSubnetAnnotation to Aspire.Hosting.Azure
- Implement IAzureDelegatedSubnetResource on AzureContainerAppEnvironmentResource
- Add WithSubnet<T> extension method in Network package for configuring subnet delegation
- Update ACA Bicep generation to read DelegatedSubnetAnnotation and configure VnetConfiguration
- Use serviceName for delegation name in Bicep output (e.g., 'Microsoft.App/environments')
- Mark new public APIs with [Experimental("ASPIREAZURE003")]
- Add unit test verifying ACA and VNet Bicep output with subnet delegation
* Separate and reuse Private DNS Zones across private endpoints
- Add AzurePrivateDnsZoneResource for shared DNS Zone management
- Add AzurePrivateDnsZoneVNetLinkResource for VNet-to-zone linking
- DNS Zones are cached at builder level and reused per zone name
- VNet Links tracked on DNS Zone to avoid duplicates
- PE Bicep now references existing DNS Zone instead of creating inline
- Add tests for DNS Zone reuse scenarios
- Add InternalsVisibleTo for test access to internal types
* Address PR feedback
…: Build ID 2896470 (dotnet#14349) * Localized file check-in by OneLocBuild Task: Build definition ID 1309: Build ID 2895925 * Localized file check-in by OneLocBuild Task: Build definition ID 1309: Build ID 2895925 * Localized file check-in by OneLocBuild Task: Build definition ID 1309: Build ID 2895925 * Localized file check-in by OneLocBuild Task: Build definition ID 1309: Build ID 2895925 * Localized file check-in by OneLocBuild Task: Build definition ID 1309: Build ID 2895925 * Localized file check-in by OneLocBuild Task: Build definition ID 1309: Build ID 2895925 * Localized file check-in by OneLocBuild Task: Build definition ID 1309: Build ID 2895925 * Localized file check-in by OneLocBuild Task: Build definition ID 1309: Build ID 2896434 * Localized file check-in by OneLocBuild Task: Build definition ID 1309: Build ID 2896434 * Localized file check-in by OneLocBuild Task: Build definition ID 1309: Build ID 2896434
* Allow subnet addressprefix to be a parameter. Follow-up feedback from dotnet#13108 * Add parameter to virtual network
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: radical <1472+radical@users.noreply.github.com> Co-authored-by: James Newton-King <james@newtonking.com>
* Add AKS starter deployment E2E test (Phase 1) This adds a new end-to-end deployment test that validates Azure Kubernetes Service (AKS) infrastructure creation: - Creates resource group, ACR, and AKS cluster - Configures kubectl credentials - Verifies cluster connectivity - Cleans up resources after test Phase 1 focuses on infrastructure only - Aspire deployment will be added in subsequent phases. * Fix AKS test: register required resource providers Add step to register Microsoft.ContainerService and Microsoft.ContainerRegistry resource providers before attempting to create AKS resources. This fixes the MissingSubscriptionRegistration error when the subscription hasn't been configured for AKS usage. * Fix AKS test: use Standard_B2s_v2 VM size The subscription in westus3 doesn't have access to Standard_B2s, only the v2 series VMs. Changed to Standard_B2s_v2 which is available. * Fix AKS test: use Standard_D2s_v3 VM size The subscription has zero quota for B-series VMs in westus3. Changed to Standard_D2s_v3 which is a widely-available D-series VM with typical quota. * Add Phase 2 & 3: Aspire project creation, Helm chart generation, and AKS deployment Phase 2 additions: - Create Aspire starter project using 'aspire new' - Add Aspire.Hosting.Kubernetes package via 'aspire add' - Modify AppHost.cs to call AddKubernetesEnvironment() with ACR config - Login to ACR for Docker image push - Run 'aspire publish' to generate Helm charts and push images Phase 3 additions: - Deploy Helm chart to AKS using 'helm install' - Verify pods are running with kubectl - Verify deployments are healthy This completes the full end-to-end flow: AKS cluster creation -> Aspire project creation -> Helm chart generation -> Deployment to Kubernetes * Fix Kubernetes deployment: Add container build/push step Changes: - Remove invalid ContainerRegistry property from AddKubernetesEnvironment - Add pragma warning disable for experimental ASPIREPIPELINES001 - Add container build step using dotnet publish /t:PublishContainer - Push container images to ACR before Helm deployment - Override Helm image values with ACR image references The Kubernetes publisher generates Helm charts but doesn't build containers. We need to build and push containers separately using dotnet publish. * Fix duplicate Service ports in Kubernetes publisher When multiple endpoints resolve to the same port number, the Service manifest generator was creating duplicate port entries, which Kubernetes rejects as invalid. This fix deduplicates ports by (port, protocol) before adding them to the Service spec. Fixes the error: Service 'xxx-service' is invalid: spec.ports[1]: Duplicate value * Add explicit AKS-ACR attachment verification step Added Step 6 to explicitly run 'az aks update --attach-acr' after AKS cluster creation to ensure the AcrPull role assignment has properly propagated. This addresses potential image pull permission issues where AKS cannot pull images from the attached ACR. Also renumbered all subsequent steps to maintain proper ordering. * Fix AKS image pull: correct Helm value paths and add ACR check * Fix duplicate Service/container ports: compare underlying values not Helm expressions * Re-enable AppService deployment tests * Add endpoint verification via kubectl port-forward to AKS test * Wait for pods to be ready before port-forward verification * Use retry loop for health endpoint verification and log HTTP status codes * Use real app endpoints: /weatherforecast and / instead of /health * Improve comments explaining duplicate port dedup rationale * Refactor cleanup to async pattern matching other deployment tests * Fix duplicate K8s ports: skip DefaultHttpsEndpoint in ProcessEndpoints The Kubernetes publisher was generating duplicate Service/container ports (both 8080/TCP) for ProjectResources with default http+https endpoints. The root cause is that GenerateDefaultProjectEndpointMapping assigns the same default port 8080 to every endpoint with None target port. The proper fix mirrors the core framework's SetBothPortsEnvVariables() behavior: skip the DefaultHttpsEndpoint (which the container won't listen on — TLS termination happens at ingress/service mesh). The https endpoint still gets an EndpointMapping (for service discovery) but reuses the http endpoint's HelmValue, so no duplicate K8s port is generated. Added Aspire.Hosting.Kubernetes to InternalsVisibleTo to access ProjectResource.DefaultHttpsEndpoint. The downstream dedup in ToService() and WithContainerPorts() remains as defense-in-depth. Fixes dotnet#14029 * Add AKS + Redis E2E deployment test Validates the Aspire starter template with Redis cache enabled deploys correctly to AKS. Exercises the full pipeline: webfrontend → apiservice → Redis by hitting the /weather page (SSR, uses Redis output caching). Key differences from the base AKS test: - Selects 'Yes' for Redis Cache in aspire new prompts - Redis uses public container image (no ACR push needed) - Verifies /weather page content (confirms Redis integration works) * Fix ACR name collision between parallel AKS tests Both AKS tests generated the same ACR name from RunId+RunAttempt. Use different prefixes (acrs/acrr) to ensure uniqueness. * Fix Redis Helm deployment: provide missing cross-resource secret value Work around K8s publisher bug where cross-resource secret references create Helm value paths under the consuming resource instead of referencing the owning resource's secret. The webfrontend template expects secrets.webfrontend.cache_password but values.yaml only has secrets.cache.REDIS_PASSWORD. Provide the missing value via --set. --------- Co-authored-by: Mitch Denny <mitch@mitchdeny.com>
- when a Verify test fails, it auto-accepts the changes, so you can see the diff
- It fails the test (throwException: true)
- It doesn't do this on "build servers"
- https://github.com/VerifyTests/DiffEngine/blob/fef0776f63f0cfa1ac070f16d0925dee89faf9de/src/DiffEngine/BuildServerDetector.cs is the checks for what is considered a "build server"
…es (dotnet#14335) - Add Channel-based async FileLoggerProvider writing to ~/.aspire/logs/ - Add --debug-level (-v) option for console log verbosity - Show 'See logs at {path}' instead of raw stack traces on console - Centralize child process option forwarding via RootCommand.GetChildProcessArgs() - Suppress Microsoft.Hosting.Lifetime logs from file logger - Log backchannel socket errors at Debug level when AppHost has exited - Add log cleanup to 'aspire cache clear' - Make CliExecutionContext.LogFilePath a required constructor parameter Fixes dotnet#13787
…#14372) * Initial plan * Fix CLI stop command description to mention resource stopping Updated description from "Stop a running Aspire apphost." to "Stop a running apphost or the specified resource." in the resx file and all XLF localization files. Co-authored-by: JamesNK <303201+JamesNK@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: JamesNK <303201+JamesNK@users.noreply.github.com>
…ummary (dotnet#14367) * Initial plan * Add deployed compute resources and endpoints to pipeline deployment summary For both Azure Container Apps and Azure App Service deployments, the pipeline summary now includes each compute resource name and its public endpoint URL (or "No public endpoints" if none are configured). This makes it immediately visible to users whether their services are publicly accessible after deployment. Co-authored-by: davidfowl <95136+davidfowl@users.noreply.github.com> * Remove emoji from summary keys and add Docker Compose endpoint summary Remove the emoji prefix (🖥️) from pipeline summary keys in AzureContainerAppResource and AzureAppServiceWebSiteResource. Add ctx.Summary.Add() calls to DockerComposeServiceResource.PrintEndpointsAsync() so Docker Compose deployments also show compute resources and their endpoints (or "No public endpoints") in the deployment summary. Co-authored-by: davidfowl <95136+davidfowl@users.noreply.github.com> * Address PR review feedback: move endpoint check inside step lambda and simplify App Service Move the anyPublicEndpoints check inside the step Action lambda in AzureContainerAppResource so endpoints are evaluated at execution time, not step creation time (addresses @eerhardt's feedback). For AzureAppServiceWebSiteResource, remove the conditional entirely since App Service always has a public endpoint at its .azurewebsites.net URL. This restores the original always-show-URL behavior, avoids unnecessary async resolution when there are no public endpoints, and addresses both @eerhardt's and Copilot code review's feedback. Co-authored-by: davidfowl <95136+davidfowl@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: davidfowl <95136+davidfowl@users.noreply.github.com>
…#14360) * Implement IAzurePrivateEndpointTarget on more Azure resources Follow up to dotnet#13108 Contributes to dotnet#13750 * Fix tests * Fix Redis private dns zone name.
* Fix package signature verification and publishing commands to use dotnet.cmd * Add .NET 10 SDK installation and update package verification commands * Improve error handling in NuGet package verification and publishing steps
dotnet#14381) On relative base path root Microsoft.DeveloperControlPlane.darwin-amd64 , Microsoft.DeveloperControlPlane.darwin-arm64 , Microsoft.DeveloperControlPlane.linux-amd64 , Microsoft.DeveloperControlPlane.linux-arm64 , Microsoft.DeveloperControlPlane.linux-musl-amd64 , Microsoft.DeveloperControlPlane.windows-amd64 , Microsoft.DeveloperControlPlane.windows-arm64 From Version 0.22.3 -> To Version 0.22.4 Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
…t#14687) Update the command table in extension/README.md to be consistent with the actual command titles registered in package.nls.json: - Fix 'Configure launch.json' -> 'Configure launch.json file' - Fix 'Manage configuration settings' -> 'Extension settings' - Add missing commands: Initialize Aspire, Open local/global Aspire settings - Remove outdated Available/Preview availability column
Add PromptForFilePathAsync to IInteractionService that uses native OS file pickers when the VS Code extension supports the file-pickers.v1 capability. Falls back to PromptForStringAsync for older extensions or console mode. Call sites updated: AgentInitCommand, NewCommand, ProjectUpdater. Fixes dotnet#12758 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Pass open AppHost to CLI commands via --project flag When the user has an AppHost file open in the editor or configured in .aspire/settings.json, the extension now passes --project <path> to CLI commands that support it (deploy, publish, add, update). Fixes dotnet#11024 * Address review feedback: proper arg escaping, raw tokens, tighter AppHost heuristic * Fix --project to --apphost and update tests for sync getAspireCliExecutablePath - Change CLI flag from --project to --apphost to match current CLI interface - Rename getProjectArgs to getAppHostArgs for consistency - Tests already updated to stub vscode.workspace.getConfiguration instead of resolveCliPath
…05e-ad5c-9e112be93d9a [main] Update dependencies from microsoft/dcp
…e view (dotnet#14848) * Add Aspire Activity Bar panel with running apphosts tree view - Add Aspire sidebar panel in VS Code with running AppHosts tree view - Extend 'aspire ps --format json --resources' to include per-AppHost resource data - Show resources (with state, type, endpoints) as collapsible tree items - Backward-compatible: falls back gracefully if CLI doesn't support --resources - Visibility-based polling (only fetches when panel is visible) - Add SVG icon, localized strings, and unit tests * Add error welcome view, updateSelf command, initial visibility polling, and spawn error handling - Show welcome view with upgrade prompt when CLI is missing or too old - Add 'Update Aspire CLI' command (aspire update --self) - Start polling immediately if tree view is already visible on creation - Handle spawn errors (ENOENT) to prevent polling from getting stuck - Change dashboard icon to link-external for clickable items - Remove unused InfoMessageItem in favor of viewsWelcome-based error display * Add Stop and View Logs context menu actions for AppHosts and Resources - Stop AppHost: right-click context menu runs 'aspire stop --project <path>' - Stop Resource: right-click context menu runs 'aspire stop <name> --project <path>' - View Logs: right-click context menu runs 'aspire logs <name> --project <path> --follow' - All commands hidden from command palette (tree-only actions) - Localized all new command titles * Add resource management commands and fix RPC race condition - Add Start, Restart, Stop resource and Stop apphost context menu actions - Add View logs context menu for streaming resource logs - Add Execute command... context menu with quick pick for resource commands - Fix RPC race condition: register interaction service endpoints before connection.listen() to prevent unhandled 'displayEmptyLine' errors - Fix RPC client factory to use lazy debugSessionId reference - Use --apphost flag (primary) instead of --project (legacy alias) - Normalize casing: 'apphost' (lowercase h) in user-facing strings * Remove unused string constants from strings.ts * Add Aspire brand purple and semantic colors to tree view icons - Register custom 'aspire.brandPurple' color (#512BD4 light, #7455DD dark) - Color apphost and resources group icons with Aspire purple - Color resource state icons: green for success, yellow for warning, red for error, purple for other active states * Simplify tree provider, fix resource state icons and conditional commands - Merge duplicate detail item classes into single DetailItem - Extract _runResourceCommand helper for stop/start/restart/logs - Store appHostPid directly on ResourceItem instead of parsing ID string - Remove no-op resourceEndpointLabel wrapper - Fix resource state icons to use exact PascalCase state values from KnownResourceStates - Respect stateStyle overrides for health check warnings/errors on Running resources - Show Start/Stop/Restart context menus only when resource has those commands available - Reduce polling interval from 5s to 3s
* Display status in more places in CLI * Update * Update * Update * Update * Add status to templates * Fix emoji
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Include --disableProductStyleUrl in Azurite command line when running Azure Storage as an emulator. This is necessary because when a Container resource references the Storage emulator it gets a URL like storage.dev.internal:10000. Using a URL like this conflicts between the Storage SDK and the emulator because the Storage SDK sees port 10000 and uses path-style URLs. But the emulator rejects them because it expects "product-style" URLs. Fix dotnet#14044
… file (dotnet#14748) * feat: add CI trigger patterns file Extract the CI-skip glob patterns into eng/testing/github-ci-trigger-patterns.txt so that pattern maintenance is decoupled from the workflow definition. Changing this file alone will not trigger CI, avoiding the chicken-and-egg problem of the patterns being inlined in ci.yml. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * refactor: read glob patterns from file in check-changed-files action Replace the inline regex patterns input with a patterns_file input that points to a file of glob patterns. Add a glob_to_regex() function that converts glob syntax (**, *, literal dot) to anchored ERE regexes. The action now: - reads patterns from a file, skipping comments and blank lines - converts each glob to an anchored regex before matching - escapes regex metacharacters (. + ? [ ] ( ) |) in glob literals Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: use patterns_file in CI workflow Replace the inline regex patterns block in ci.yml with a single patterns_file reference to eng/testing/github-ci-trigger-patterns.txt. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: add CI trigger patterns documentation Explain the patterns file, its glob syntax, how to add new patterns, and how the check-changed-files action converts globs to ERE regexes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Ankit Jain <radical@gmail.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Initial plan * Unquarantine stable tests Co-authored-by: radical <1472+radical@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: radical <1472+radical@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…lelization (dotnet#14858) * Add ExtractTestPartitions tool and CI test matrix scripts Add tooling for automated CI test splitting and matrix generation: - ExtractTestPartitions: .NET tool that scans test assemblies for [Trait("Partition", "N")] attributes to discover test partitions - split-test-projects-for-ci.ps1: discovers partitions from assemblies and generates per-project partition JSON files - build-test-matrix.ps1: builds a canonical test matrix JSON from per-project metadata files - expand-test-matrix-github.ps1: expands the canonical matrix into GitHub Actions format with per-OS job entries - split-test-matrix-by-deps.ps1: splits the expanded matrix by dependency type (no-nugets, requires-nugets, requires-cli-archive) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Replace TestRunsheetBuilder with TestEnumerationRunsheetBuilder Replace the old per-OS runsheet generation with a new metadata-driven approach: - Add TestEnumerationRunsheetBuilder.targets: generates per-project .tests-metadata.json files during build, containing project metadata (supported OSes, timeouts, dependencies, split configuration) - Update AfterSolutionBuild.targets: add _GenerateCanonicalMatrixJson target that invokes build-test-matrix.ps1 to produce a canonical test matrix from the metadata files - Update Testing.props: add default timeout values and _ShortName computation for CI display names - Update tests/Directory.Build.targets: replace ExtractTestClassNames with GenerateTestPartitionsForCI target, add _ShouldArchiveTests logic after Testing.targets import - Remove TestRunsheetBuilder.targets and GetTestProjects.proj Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Configure test projects for unified CI splitting infrastructure Update test project files to use the new TestEnumerationRunsheetBuilder: - Aspire.Hosting.Tests: enable SplitTestsOnCI with partition-based splitting via TestClassNamePrefixForCI - Aspire.Cli.EndToEnd.Tests: migrate from ExtractTestClassNamesForHelix to SplitTestsOnCI, add RequiresCliArchive property - Aspire.Deployment.EndToEnd.Tests: migrate to SplitTestsOnCI, enable RunOnGithubActionsLinux (controlled by OnlyDeploymentTests filter) - Aspire.EndToEnd.Tests: add RequiresNugets property - Aspire.Templates.Tests: migrate to SplitTestsOnCI, add RequiresNugets, RequiresTestSdk, EnablePlaywrightInstall, and timeout properties - Aspire.Playground.Tests: remove obsolete TestRunnerPreCommand Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Simplify CI workflows to use unified test matrix Rework the CI test orchestration to use a single, unified test matrix: - enumerate-tests action: replace per-category build steps with a single build using TestEnumerationRunsheetBuilder, then expand via expand-test-matrix-github.ps1. Output a single all_tests matrix. - tests.yml: collapse 3 per-OS setup jobs into 1, replace 9 category×OS job groups with 4 dependency-based groups (no-nugets, no-nugets-overflow, requires-nugets, requires-cli-archive) - deployment-tests.yml: use the unified enumerate-tests action with OnlyDeploymentTests=true, consume all_tests output - run-tests.yml: pass through testProjectPath, timeouts, and extraTestArgs from matrix entries - Remove tests-runner.yml (superseded by run-tests.yml) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update Helix targets to consume new partitions JSON format Update send-to-helix-templatestests.targets to read test class names from the new .tests-partitions.json format (produced by GenerateTestPartitionsForCI) instead of the old .tests.list format. Strip the 'class:' prefix from partition entries for compatibility with the existing Helix work item generation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add Infrastructure.Tests for CI tooling validation Add a new test project that validates the CI test splitting infrastructure: - ExtractTestPartitionsTests: tests the ExtractTestPartitions tool using dynamically-generated mock assemblies with various trait and attribute configurations - BuildTestMatrixTests: validates build-test-matrix.ps1 canonical matrix generation from metadata files - ExpandTestMatrixGitHubTests: validates expand-test-matrix-github.ps1 GitHub Actions matrix expansion - SplitTestMatrixByDepsTests: validates split-test-matrix-by-deps.ps1 dependency-based matrix splitting - SplitTestProjectsTests: validates split-test-projects-for-ci.ps1 partition discovery - Shared TestDataBuilder and PowerShellCommand helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add CI testing documentation and rebalance-tests skill - docs/ci/TestingOnCI.md: comprehensive documentation covering the test splitting architecture, MSBuild properties, matrix generation pipeline, and how to add/rebalance test partitions - .github/skills/rebalance-tests/SKILL.md: agent skill for analyzing CI build timings, downloading TRX files, computing optimal partition assignments via greedy bin-packing, and applying changes - Update CLI E2E testing SKILL.md and README.md to reference the unified TestEnumerationRunsheetBuilder infrastructure Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add partition traits to Aspire.Hosting.Tests for CI parallelization Add [Trait("Partition", "N")] attributes to 118 test classes in Aspire.Hosting.Tests, distributing them across 6 partitions. This enables the CI infrastructure to split this large test project into parallel jobs, reducing wall-clock test time. Partition assignments are balanced by estimated test duration using greedy bin-packing across the partitions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Remove rebalance-tests skill Will be developed separately. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix ExtractTestPartitions race condition and remove silent fallback - Make build/run failures of ExtractTestPartitions hard errors instead of silently falling back to class-based splitting - Pre-build the tool in enumerate-tests action before parallel test matrix generation to eliminate file locking race condition Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix CLI E2E tests: add missing PR env vars to nuget-dependent test steps The GITHUB_PR_NUMBER, GITHUB_PR_HEAD_SHA, and GH_TOKEN environment variables were only set on the non-nuget test steps, but CLI E2E tests have requiresNugets=true and always run via the nuget-dependent path. This caused 'aspire: command not found' because the install script could not authenticate or identify the PR to download artifacts from. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix GenerateTestPartitionsForCI running during GitHub Actions test execution The GenerateTestPartitionsForCI target was firing during test execution jobs in run-tests.yml because PrepareForHelix=true (passed for archiving) combined with RunOnAzdoHelix=true (default) satisfied the condition. This caused split-test-projects-for-ci.ps1 to run and fail since ExtractTestPartitions wasn't built in that job. Add IsGitHubActionsRunner!=true to the PrepareForHelix branch so partition generation only runs via GenerateCIPartitions=true on GitHub Actions (set by the enumerate-tests action) and via PrepareForHelix on AzDo Helix. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix RepoRoot path quoting for Windows in GenerateTestPartitionsForCI On Windows, RepoRoot ends with backslash (e.g. D:\a\_work\1\s\). When wrapped in quotes for the PowerShell command, the trailing backslash escapes the closing quote, embedding a literal quote character in the path. TrimEnd the backslash before quoting to fix this. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update eng/TestEnumerationRunsheetBuilder/TestEnumerationRunsheetBuilder.targets Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update eng/TestEnumerationRunsheetBuilder/TestEnumerationRunsheetBuilder.targets Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…ndency, and simplify status feedback (dotnet#14871)
…14868) * chore: trigger CI build for issue dotnet#14819 investigation Whitespace change to trigger CI pipeline and E2E test execution for reproducing the flaky DetachFormatJsonProducesValidJson test. Fixes dotnet#14819 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix flaky E2E test: retry MSBuild evaluation on empty output When dotnet msbuild -getProperty/-getItem returns exit code 0 but produces no stdout output (likely due to MSBuild server contention when another AppHost process is running), JsonDocument.Parse would throw 'The input does not contain any JSON tokens', crashing the aspire run --detach --format json command. This fix adds retry logic (up to 3 attempts with increasing delay) for this specific case, making the project discovery more resilient to concurrent MSBuild operations. Fixes dotnet#14819 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Mitch Denny <mitch@mitchdeny.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add polyglot exports for AppContainers * Update exports * Fix tests * Add test for new behaviors * Fix cancellation token wrappers in polyglot SDKs Avoid generating/ registering CancellationToken as a handle wrapper in Go, Java, and Rust generators, and update snapshots. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…t#14569) * Replace Playwright MCP server with Playwright CLI installation Replace the Playwright MCP server configuration in `aspire agent init` with a secure Playwright CLI installation workflow. Instead of writing MCP server configuration to each agent environment's config file, the new approach: - Resolves the @playwright/cli package version from npm registry - Downloads the package tarball via `npm pack` - Verifies supply chain integrity (SHA-512 SRI hash comparison) - Runs `npm audit signatures` for provenance verification - Installs globally from the verified tarball - Runs `playwright-cli install --skills` to generate skill files New abstractions: - INpmRunner/NpmRunner: npm CLI command runner (resolve, pack, audit, install) - IPlaywrightCliRunner/PlaywrightCliRunner: playwright-cli command runner - PlaywrightCliInstaller: orchestrates the secure install flow This removes ~400 lines of per-scanner MCP config writing code (different JSON formats for VS Code, Claude Code, Copilot CLI, and OpenCode) and replaces it with a single global CLI install. Fixes dotnet#14430 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Pin Playwright CLI version range to 0.1.1 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add npm provenance verification and break-glass config - Add INpmProvenanceChecker/NpmProvenanceChecker for SLSA attestation verification - Return rich ProvenanceVerificationResult with gate-specific outcome enum - Fix AuditSignaturesAsync with temp-project approach for global tools - Add disablePlaywrightCliPackageValidation break-glass config option - Add security design document (docs/specs/safe-npm-tool-install.md) - Verify SRI integrity, Sigstore attestations, and source repository provenance Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix markdownlint: add language to fenced code block Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Improve version resolution and provenance verification - Change version range from exact 0.1.1 to >=0.1.1 for future versions - Add playwrightCliVersion config override for pinning specific versions - Verify workflow path (.github/workflows/publish.yml) in provenance - Verify SLSA build type (GitHub Actions) to confirm OIDC token issuer - Add BuildType to NpmProvenanceData, WorkflowMismatch and BuildTypeMismatch outcomes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add tests for version pinning and default version range Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add E2E test for Playwright CLI installation via agent init Verifies the full lifecycle: project creation, aspire agent init with Claude Code environment, Playwright CLI installation with npm provenance verification, and skill file generation. Marked as OuterloopTest since it requires npm and network access. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Show status spinner during Playwright CLI installation Wrap the installation work in IInteractionService.ShowStatusAsync to display a spinner with 'Installing Playwright CLI...' status text while the npm operations are in progress. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Mirror playwright-cli skill files to all detected agent environments After playwright-cli install --skills creates files in .claude/skills/, the installer now mirrors the playwright-cli skill directory to all other detected agent environment skill directories (.github/skills/, .opencode/skill/, etc.) so every configured environment has identical skill files. Stale files in target directories are also removed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update security design doc to match implementation - Step 4 now documents all three provenance gates: source repository, workflow path, and build type (with OIDC issuer implication) - Added table of verified fields with expected values - Updated implementation constants to include new fields - Added configuration section documenting break-glass keys - Updated verification diagram with workflow/build type checks - Step 7 now documents skill file mirroring across environments - Future improvements reflects experimental Sigstore branch status Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Verify workflow ref matches package version in provenance Add Gate 6 to provenance verification: check that the workflow ref (git tag) in the SLSA attestation matches refs/tags/v{version}. This ensures the build was triggered from the expected release tag, not an arbitrary branch or commit. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use callback-based workflow ref validation in provenance checker Make the workflow ref validation configurable per-package by accepting a Func<WorkflowRefInfo, bool> callback instead of hardcoding the refs/tags/v{version} format. The ref is parsed into a WorkflowRefInfo record (Raw, Kind, Name) and the caller decides what's valid. PlaywrightCliInstaller validates Kind=tags and Name=v{version}. Other packages can use different tag conventions without modifying the provenance checker. Addresses review feedback from DamianEdwards. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Replace npm provenance checking with Sigstore verification Use the Sigstore and Tuf NuGet packages (0.2.0) to cryptographically verify npm attestation bundles in-process, replacing the previous approach of shelling out to 'npm audit signatures'. - Add SigstoreNpmProvenanceChecker implementing INpmProvenanceChecker using SigstoreVerifier with CertificateIdentity.ForGitHubActions - Remove the npm audit signatures step from PlaywrightCliInstaller - Keep existing NpmProvenanceChecker but no longer register in DI - Add optional sriIntegrity parameter to INpmProvenanceChecker for digest-based bundle verification - Update safe-npm-tool-install.md spec to reflect new verification flow - Temporarily add nuget.org to NuGet.config for Sigstore/Tuf packages Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Refactor SigstoreNpmProvenanceChecker for clarity Break the monolithic VerifyProvenanceAsync method into focused methods: - FetchAttestationJsonAsync: fetches attestation JSON from npm registry - ParseAttestation: parses JSON in a single pass, extracting both the Sigstore bundle and provenance data (eliminates duplicate JSON parsing) - ParseProvenanceFromStatement: extracts provenance fields from in-toto statement - VerifySigstoreBundleAsync: cryptographic Sigstore verification - VerifyProvenanceFields: field-level provenance checks (source repo, workflow, build type, workflow ref) Removes dependency on NpmProvenanceChecker.ParseProvenance() which was re-parsing the same JSON and iterating attestations a second time. Adds NpmAttestationParseResult type to carry both bundle and provenance data from a single parse pass. Adds comprehensive unit tests for ParseAttestation, ParseProvenanceFromStatement, and VerifyProvenanceFields covering success and failure cases. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add libsodium to nuget-org package source mapping libsodium is a transitive dependency of NSec.Cryptography (used by Sigstore) and needs to be mapped to the nuget-org source for CI restore to succeed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Mitch Denny <mitch@mitchdeny.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
NOTE: Merging to unblock build. * Remove temporary nuget.org feed from NuGet.config Remove the temporary nuget-org package source and its package source mapping entries (Sigstore, Tuf, NSec.Cryptography, libsodium). These packages will be resolved from the normal internal feeds (dotnet-public, dotnet-eng) which have wildcard pattern mappings. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update Sigstore and Tuf packages to 0.3.0 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Mitch Denny <mitch@mitchdeny.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Backmerge release/13.2 to main
…et#14920) Replace bare 'new HttpClient()' with 'app.CreateHttpClient()' which uses IHttpClientFactory with AddStandardResilienceHandler() already configured by TestDistributedApplicationBuilder. This adds automatic retries for transient failures (502 BadGateway) caused by Docker inter-container networking not being fully established when the test makes its HTTP request. Fixes dotnet#9344 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Watch fork for prototyping * Single file programs * Move WatchPrototype dependencies into their own Directory.Packages.props This means WatchPrototype dependencies won't affect the rest of the repo. --------- Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.