Merge release/13.2 into main (manual conflict resolution)#14657
Merge release/13.2 into main (manual conflict resolution)#14657
Conversation
* Fix aspire stop --non-interactive with multiple AppHosts (#14558) When multiple AppHosts are running and aspire stop --non-interactive is used, the CLI now handles the scenario gracefully instead of crashing: - Single AppHost: auto-selects and stops it without prompting - Multiple AppHosts: shows clear error message suggesting --project or --all - No running AppHosts: shows appropriate error message Added --all option to stop all running AppHosts at once, which works in both interactive and non-interactive modes. Also adds WaitForAnyPrompt helper for E2E tests that expect non-zero exit codes, and three E2E test scenarios covering the new behavior. Fixes #14558 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR review comments - Add --all/--project mutual exclusivity validation - Thread CancellationToken through StopAppHostAsync and all callers - Add XML doc summaries to private methods - Rewrite StopAllAppHosts test to create 2 projects and verify both are stopped - Split into two tests: from AppHost dir and from unrelated dir Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix --non-interactive to take precedence over ASPIRE_PLAYGROUND The --non-interactive flag was being overridden by ASPIRE_PLAYGROUND=true in CliHostEnvironment, causing non-interactive mode to be ignored in E2E tests. Swap the priority so explicit --non-interactive always wins. Also use --project in StopNonInteractiveSingleAppHost test to avoid interference from concurrent tests sharing the backchannel directory. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address JamesNK review feedback - Move error strings to resource files with format placeholders - Scope non-interactive auto-select to in-scope AppHosts only - Stop AppHosts in parallel instead of sequentially - Add ILogger logging to StopAllAppHostsAsync - Handle --all with resource argument mutual exclusivity - Use CultureInfo.InvariantCulture for string.Format calls 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>
* Stop command exits with 0 when no AppHost is running When running 'aspire stop' and no AppHost is running, the command now returns exit code 0 and displays an informational message instead of exit code 7 (FailedToFindProject) with an error message. This aligns with the expected behavior that stopping nothing is not an error. Fixes part of #14238 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add E2E test for stop command with no running AppHost Validates that 'aspire stop' exits with code 0 and shows an informational message when no AppHost is running, rather than returning an error exit code. 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>
* Fix AKS deployment test timeouts and ACR token expiration - Increase az aks update --attach-acr timeout from 3 to 5 minutes (ReconcilingAddons phase can take several minutes) - Increase kubectl wait pod readiness timeout from 120s to 300s (pods need time to pull images from ACR and start) - Add ACR re-login step after AKS creation to refresh Docker credentials that may have expired during 10-15 min provisioning (OIDC federated tokens expire after ~5 minutes) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix WaitForSuccessPrompt timeout for chained kubectl waits The Redis test chains 3 kubectl wait commands (300s each), so the worst-case total is 900s (15 min). Increase WaitForSuccessPrompt from 6 min to 16 min to provide adequate buffer. 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>
* Stop running AppHost before adding packages When running 'aspire add' while an AppHost is running in detached mode, the project file is locked by the build server, causing 'dotnet add package' to fail. The add command now stops any running AppHost instance before attempting to add the package, using the same running instance detection pattern used by the run command. Fixes part of #14238 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add E2E test for adding package while AppHost is running Validates that 'aspire add' succeeds when an AppHost is running in detached mode. The add command should automatically stop the running AppHost to release file locks before modifying the project. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix E2E test to handle version selection prompt The aspire add --non-interactive flag doesn't suppress the version selection prompt. Updated the test to wait for and accept the default version before continuing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR feedback and add interactive add E2E test - Gate CheckAndHandleRunningInstanceAsync behind KnownFeatures.RunningInstanceDetectionEnabled feature flag, matching RunCommand behavior - Check RunningInstanceResult.StopFailed return value and fail early with a clear error message instead of proceeding - Add E2E test for interactive aspire add flow (no integration argument) while AppHost is running in detached mode Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix E2E test: accept any exit code from aspire stop cleanup The aspire add command now auto-stops the running AppHost, so the subsequent aspire stop cleanup command returns exit code 7 (no running instances found). Use a generic prompt pattern that accepts both OK and ERR exit codes for the cleanup step. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix E2E test: wait for stop output text instead of prompt pattern The RightText() method checks for immediately-adjacent text, but the ERR prompt has intermediate text between the counter and '] $'. Instead, wait for the known aspire stop output messages which correctly handles both 'no running instances' and 'stopped successfully' outcomes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Rename CheckAndHandleRunningInstanceAsync to FindAndStopRunningInstanceAsync Address PR feedback from JamesNK: the method name is more descriptive about what the method actually does — finds running instances and stops them. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add info message when running instance is successfully stopped Addresses review feedback: log on both success and failure of stopping a running AppHost, not just failure. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Retrigger CI * Fix invalid Spectre emoji name in DisplayMessage Use 'information_source' instead of 'info' which is not a valid Spectre Console emoji name, causing garbled terminal output. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix E2E test: --non-interactive skips version selection prompt The AddPackageWhileAppHostRunningDetached test was waiting for a version selection prompt that doesn't appear with --non-interactive flag. Remove the intermediate wait and directly wait for the package added success message. 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>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…onfiguration (#14618) * Add WithMcpServer extension method to ResourceBuilderExtensions Co-authored-by: davidfowl <95136+davidfowl@users.noreply.github.com> * Move WithMcpServer to dedicated class with improved API - Move WithMcpServer from ResourceBuilderExtensions to new McpServerResourceBuilderExtensions class - Make endpointName optional, defaulting to https then http fallback (consistent with WithHttpHealthCheck pattern) - Add [Experimental("ASPIREMCP001")] and [EndpointName] attributes - Update PostgresBuilderExtensions to use new extension method - Add tests for default endpoint selection and fallback behavior Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: David Fowler <davidfowl@gmail.com> * Update src/Aspire.Hosting/McpServerResourceBuilderExtensions.cs --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: davidfowl <95136+davidfowl@users.noreply.github.com> Co-authored-by: David Fowler <davidfowl@gmail.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: James Newton-King <james@newtonking.com>
- Render local and global configuration in Spectre.Console tables with rounded borders and titled headers for visual distinction - Show each available feature on its own line with description and default value instead of a comma-separated list - Add hint text showing how to enable/disable features via aspire config set Co-authored-by: Copilot <223556219+Copilot@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>
* Handle malformed MCP JSON config files gracefully When 'aspire mcp init' or 'aspire agent init' encounters an MCP config file (e.g., .vscode/mcp.json) containing empty or malformed JSON, the CLI previously crashed with an unhandled JsonReaderException. This change wraps JsonNode.Parse() calls in try-catch blocks in all four agent environment scanner Apply methods (VsCode, CopilotCli, ClaudeCode, OpenCode). On malformed JSON, a descriptive InvalidOperationException is thrown with the file path, which is caught by AgentInitCommand and displayed as a user-friendly error. The malformed file is NOT overwritten, preserving the user's content so they can fix it manually. Fixes #14394 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add explicit skip message and non-zero exit code for malformed config files When a malformed JSON config file is encountered, now displays: - The error message identifying the file - An explicit 'Skipping update of ...' message - Returns a non-zero exit code (1) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add E2E test for malformed MCP JSON config handling Adds AgentInitCommand_WithMalformedMcpJson_ShowsErrorAndExitsNonZero which: 1. Creates a .vscode folder with a malformed mcp.json 2. Runs 'aspire agent init' and selects VS Code configuration 3. Verifies the error message about malformed JSON appears 4. Verifies the 'Skipping' message appears 5. Verifies the command exits with non-zero exit code 6. Verifies the original malformed file was NOT overwritten Also adds WaitForErrorPrompt and CreateMalformedMcpConfig helpers. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix E2E test: handle additional options prompt in agent init The agent init command shows two multi-select prompts: 1. Agent environments (VS Code, OpenCode, Claude Code) 2. Additional options (skill files, Playwright) The test was missing handling for the second prompt, causing a timeout. Spectre.Console MultiSelectionPrompt requires at least one selection, so we select the first skill file option. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Extract shared McpConfigFileHelper to reduce duplication Move duplicated JSON config file reading and server-check logic from 4 scanner files into a shared McpConfigFileHelper class with two methods: - HasServerConfigured: sync read + parse + check (for Has* methods) - ReadConfigAsync: async read + parse with error handling (for Apply*) Both accept an optional preprocessContent delegate for JSONC support (used by OpenCode scanner). This removes ~360 lines of duplicated boilerplate across VsCode, CopilotCli, ClaudeCode, and OpenCode scanners. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Display partial success warning when agent init encounters errors When some applicators fail due to malformed JSON config files, display a warning message 'Configuration completed with errors' instead of silently returning a non-zero exit code. The success message is only shown when all applicators succeed. Also update the E2E test to verify the new warning message is displayed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add malformed JSON tests for CopilotCli, ClaudeCode, and OpenCode scanners Address review feedback to add test coverage for malformed JSON handling across all agent environment scanners, not just VsCode. Each scanner now has tests for malformed JSON, empty files, and file preservation. 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>
…er (#14590) * Add a script for startup performance measurement (#14345) * Add startup perf collection script * Analyze trace more efficiently * Increase pause between iterations * Fix TraceAnalyzer * Add startup-perf skill * Add backmerge release workflow to automate merging changes from release/13.2 to main (#14453) * Add backmerge release workflow to automate merging changes from release/13.2 to main * Apply suggestions from code review Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply more fixes and use dotnet's action --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Bump Aspire branding from 13.2 to 13.3 (#14456) * Initial plan * Bump Aspire branding from 13.2 to 13.3 Co-authored-by: joperezr <13854455+joperezr@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: joperezr <13854455+joperezr@users.noreply.github.com> * Update Azure.Core to latest version - lift all runtime dependencies to latest (#14361) * Update to Azure.Core 1.51.1 Use latest versions for all dotnet/runtime nuget packages. This simplifies our dependency management. Remove ForceLatestDotnetVersions property from multiple project files * Update AzureDeployerTests to use WaitForShutdown instead of StopAsync There is a timing issue when using Start/Stop since the background pipeline might still be running and it cancels the pipeline before it can complete. * Fix AuxiliaryBackchannelTests by adding a Task that completes when the AuxiliaryBackchannelService is listening and ready for connections. * Remove double registration of AuxiliaryBackchannelService as an IHostedService. * Fix ResourceLoggerForwarderServiceTests to ensure the ResourceLoggerForwarderService has started before signalling the stopping token. * Update Arcade to latest version from the .NET 10 Eng channel (#13556) Co-authored-by: Jose Perez Rodriguez <joperezr@microsoft.com> * Refactor backmerge PR creation to update existing PRs and streamline body formatting (#14476) * [main] Fix transitive Azure role assignments through WaitFor dependencies (#14478) * Initial plan * Fix transitive Azure role assignments through WaitFor dependencies Remove CollectAnnotationDependencies calls from CollectDependenciesFromValue to prevent WaitFor/parent/connection-string-redirect annotations from referenced resources being included as direct dependencies of the caller. Add tests verifying: - DirectOnly mode excludes WaitFor deps from referenced resources - WaitFor doesn't create transitive role assignments in Azure publish 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> * Remove auto-merge step from backmerge workflow (#14481) * Remove auto-merge step from backmerge workflow * Update PR body to request merge commit instead of auto-merge * Add agentic workflow daily-repo-status (#14498) * [Automated] Backmerge release/13.2 to main (#14536) * Fix Windows pipeline image to use windows.vs2022.amd64.open (#14492) * Fix Windows pipeline image to use windows.vs2022.amd64.open * Use windows.vs2026preview.scout.amd64 for public pipeline Windows pool Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add Azure portal link for Resource Group in deploy pipeline summary (#14434) * Add Azure portal link for Resource Group in pipeline summary When printing the Resource Group in the pipeline summary of `aspire deploy`, include a clickable link to the Azure portal resource group page. The link uses the format: https://portal.azure.com/#@{tenantId}/resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/overview Changes: - AzureEnvironmentResource.AddToPipelineSummary: construct markdown link for resource group - ConsoleActivityLogger.FormatPipelineSummaryKvp: convert markdown to Spectre markup for clickable links - Add ConsoleActivityLoggerTests for the new markdown rendering behavior Co-authored-by: eerhardt <8291187+eerhardt@users.noreply.github.com> * Clean up the code * Fix tests * More test fixups * Refactor code * Update src/Aspire.Cli/Utils/MarkdownToSpectreConverter.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Add test for color-enabled non-interactive rendering path Co-authored-by: eerhardt <8291187+eerhardt@users.noreply.github.com> * fix test --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: eerhardt <8291187+eerhardt@users.noreply.github.com> Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Jose Perez Rodriguez <joperezr@microsoft.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: eerhardt <8291187+eerhardt@users.noreply.github.com> Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> * [Automated] Update AI Foundry Models (#14541) Co-authored-by: sebastienros <sebastienros@users.noreply.github.com> * Detect CLI at default install paths when not on PATH (#14545) Check default installation directories (~/.aspire/bin, ~/.dotnet/tools) when the Aspire CLI is not found on the system PATH. If found at a default location, the VS Code setting is auto-updated. If later found on PATH, the setting is cleared. Resolution order: configured custom path > system PATH > default install paths. Fixes #14235 * [automated] Unquarantine stable tests with 25+ days zero failures (#14531) * Initial plan * [automated] Unquarantine stable tests - Unquarantined: DeployCommandIncludesDeployFlagInArguments - Unquarantined: GetAppHostsCommand_WithMultipleProjects_ReturnsSuccessWithAllCandidates - Unquarantined: GetAppHostsCommand_WithSingleProject_ReturnsSuccessWithValidJson - Unquarantined: PushImageToRegistry_WithRemoteRegistry_PushesImage - Unquarantined: ProcessParametersStep_ValidatesBehavior - Unquarantined: WithHttpCommand_EnablesCommandOnceResourceIsRunning These tests are being unquarantined as they have had 25+ days of quarantined run data with zero failures. 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> * Partially fix quarantined test: Update stale snapshot for DeployAsync_WithMultipleComputeEnvironments_Works (#14551) * Initial plan * Update snapshot for DeployAsync_WithMultipleComputeEnvironments_Works test Co-authored-by: radical <1472+radical@users.noreply.github.com> * Remove quarantine attribute from DeployAsync_WithMultipleComputeEnvironments_Works test Co-authored-by: radical <1472+radical@users.noreply.github.com> * Restore quarantine attribute - step="deploy" case still fails 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> * Update daily report to 13.2 milestone burndown (#14563) * Update daily report to 13.2 milestone burndown Refocus the daily-repo-status agentic workflow to serve as a 13.2 release burndown report: - Track 13.2 milestone issues closed/opened in the last 24 hours - Highlight new bugs added to the milestone - Summarize PRs merged to release/13.2 branch - List PRs targeting release/13.2 awaiting review - Surface relevant 13.2 discussions - Generate a Mermaid xychart burndown using cache-memory snapshots - Keep general triage queue as a brief secondary section - Schedule daily around 9am, auto-close older report issues Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address review feedback: clarify cache schema and queries - Exclude PRs from milestone counts (issues-only filter) - Specify exact JSON schema for cache-memory burndown snapshots - Add dedup, sort, and trim-to-7 logic for cache entries - Simplify 'new issues' query to opened-in-last-24h with milestone Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update Aspire.Hosting.Kubernetes.csproj * Initialize _kubernetesComponents with ResourceNameComparer * Update KubernetesPublisherTests.cs * Update Aspire.Hosting.Kubernetes.csproj * Adds snapshots * Adds Chart.yaml to snapshot --------- Co-authored-by: Karol Zadora-Przylecki <karolz@microsoft.com> Co-authored-by: Jose Perez Rodriguez <joperezr@microsoft.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: joperezr <13854455+joperezr@users.noreply.github.com> Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com> Co-authored-by: dotnet-maestro[bot] <42748379+dotnet-maestro[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: eerhardt <8291187+eerhardt@users.noreply.github.com> Co-authored-by: David Negstad <50252651+danegsta@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Mitch Denny <midenn@microsoft.com> Co-authored-by: sebastienros <sebastienros@users.noreply.github.com> Co-authored-by: Adam Ratzman <adam@adamratzman.com> Co-authored-by: radical <1472+radical@users.noreply.github.com>
Co-authored-by: Mitch Denny <mitch@mitchdeny.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…#14572) * Redirect human-readable messages to stderr when --format json is used When running `aspire run --detach --format json`, messages like "Finding apphosts..." and "Stopping previous instance..." were written to stdout alongside the JSON output, making it impossible to parse the JSON programmatically. Add a `UseStderrForMessages` property to IInteractionService. When enabled, ConsoleInteractionService routes all human-readable display methods through stderr while keeping DisplayRawText on stdout for structured output. The property is set in ExecuteDetachedAsync when the output format is JSON. Fixes #14423 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR feedback: replace UseStderrForMessages with ConsoleOutput enum - Add ConsoleOutput enum (Standard, Error) for explicit console targeting - Replace DIM UseStderrForMessages with standard DefaultConsole property - Add optional ConsoleOutput parameter to DisplayRawText for explicit targeting - Update all IInteractionService implementations Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use Throw for multiple apphosts when --format json; add E2E test When --format json is used with aspire run --detach, use MultipleAppHostProjectsFoundBehavior.Throw instead of Prompt to prevent interactive selection UI from polluting stdout JSON output. Users should specify --project explicitly in this case. Added MultipleAppHostTests E2E test that creates two single-file apphosts and verifies the selection prompt appears when multiple are found. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix MultipleAppHostTests: use real aspire new projects and assert on errors The previous test used stub single-file apphosts that couldn't resolve the Aspire.AppHost.Sdk, so the selection prompt appeared but the selected apphost failed to build. The test passed vacuously. Now creates two real projects via aspire new, verifies the selection prompt appears, selects one, and asserts the apphost actually starts. Adds explicit error assertions for SDK resolution and missing project failures to fail fast with descriptive messages. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Rewrite test: validate --detach --format json produces valid JSON Instead of testing multiple-apphost selection prompts, the test now validates the core PR concern: that aspire run --detach --format json produces well-formed JSON on stdout without human-readable message pollution. The test creates a single project, runs aspire run --detach first, then runs aspire run --detach --format json > output.json and validates the output file is parseable JSON with expected fields. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix detach test: wait for prompt, not nonexistent message The WaitUntil was looking for 'The apphost is running in the background.' which doesn't exist. The actual output is the AppHost summary table followed by the shell prompt. Use WaitForSuccessPrompt directly which correctly waits for the [N OK] $ prompt. 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>
…tribute (#14630) Add #pragma warning disable ASPIREACANAMING001 to the generated apphost.cs in AcaCompactNamingDeploymentTests so the test compiles after the [Experimental] attribute was added to WithCompactResourceNaming(). Co-authored-by: Mitch Denny <mitch@mitchdeny.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…y environment variables (#14626) * Use scheme instead of endpoint name when registering service discovery environment variables * Respond to PR comments * Simplify OTLP extraction to avoid service discovery lookup
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: David Fowler <davidfowl@gmail.com> Co-authored-by: James Newton-King <james@newtonking.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Improve Azure deployment error output Fixes #12303 - Add ProvisioningFailedException to throw clean error messages from AzureBicepResource instead of re-throwing raw RequestFailedException whose Message property includes verbose HTTP status, content, and headers. - Skip redundant error wrapping for DistributedApplicationException in ExecuteStepAsync, since these exceptions already have user-friendly messages that don't need 'Step ... failed: ' prefix prepended. - Update Verify snapshot for the now-cleaner error format. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add E2E deployment test for clean error output Add AcaDeploymentErrorOutputTests that deploys with an invalid Azure location ('invalidlocation') to deliberately induce a provisioning failure, then verifies the error output does not contain verbose HTTP headers, status codes, or raw Content blocks from RequestFailedException. Also add WaitForAnyPrompt helper to DeploymentE2ETestHelpers for tests that expect commands to fail (non-zero exit code). Relates to #12303 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix E2E test: unset Azure__Location from workflow env The deployment-tests.yml workflow sets Azure__Location=westus3 at the job level. On Linux, environment variables are case-sensitive, so AZURE__LOCATION=invalidlocation doesn't override Azure__Location. Unset the workflow variable and set both casings to ensure the invalid location is used. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix verbose error output in create-provisioning-context step E2E test revealed that RequestFailedException with verbose HTTP headers also leaks through BaseProvisioningContextProvider.CreateProvisioningContextAsync when resource group creation fails (e.g., invalid location). Wrap the CreateOrUpdateAsync call in a try/catch for RequestFailedException and throw ProvisioningFailedException with a clean extracted error message. Make ExtractDetailedErrorMessage internal so it can be reused from BaseProvisioningContextProvider. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR feedback: improve error format, use exact assertions, trim constructors - Change ExtractDetailedErrorMessage format from 'code: message' to 'Error code = code, Message = message' to avoid confusing double-colon when combined with context like 'Failed to create resource group: ...' - Remove unused constructors from ProvisioningFailedException (only message+inner is used) - Replace fuzzy DoesNotContain/Contains assertions with Verify snapshot testing for exact error message validation 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>
* Squash branch changes for release/13.2 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Remove CLI size check from clipack Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…er (#14653) * Update Aspire.Hosting.Kubernetes.csproj * Initialize _kubernetesComponents with ResourceNameComparer * Update KubernetesPublisherTests.cs * Update Aspire.Hosting.Kubernetes.csproj * Adds snapshots * Adds Chart.yaml to snapshot --------- Co-authored-by: Benjamin Bartels <benjamin@bartels.dev>
…t pipeline (#14650) The Windows build in BuildAndTest.yml was missing the Bundle.proj step that Linux/macOS have in build_sign_native.yml, producing an unbundled CLI binary. - Add Bundle.proj payload build step per target RID before the main build - Default BundlePayloadPath to convention path in Common.projitems - Fail the build with clear error if bundle payload is missing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 14657Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 14657" |
There was a problem hiding this comment.
Pull request overview
This PR merges the release/13.2 branch into main to bring in features and fixes from the release branch. The merge resolves conflicts related to file renames, shared helper refactoring, and version updates.
Changes:
- Merged release/13.2 branch with manual conflict resolution for renamed files and refactored test helpers
- Updated localization files with new translation strings for CLI commands
- Added new resource strings for CLI features (non-interactive mode, timestamps, error messages)
Reviewed changes
Copilot reviewed 292 out of 427 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| Multiple xlf files | Added new translation entries for CLI command descriptions and options |
| Resource .resx files | Updated English source strings for CLI commands and added new resource entries |
| Various .sh/.yml files | Updated polyglot validation scripts to use --language instead of -l flag |
| Aspire.Cli project files | Updated dependencies, removed NuGetHelper project, added new certificate generation code |
| Test helper files | Merged refactored shared test helpers from main with new methods from release/13.2 |
Files not reviewed (8)
- src/Aspire.Cli/Resources/AddCommandStrings.Designer.cs: Language not supported
- src/Aspire.Cli/Resources/AgentCommandStrings.Designer.cs: Language not supported
- src/Aspire.Cli/Resources/ConfigCommandStrings.Designer.cs: Language not supported
- src/Aspire.Cli/Resources/DescribeCommandStrings.Designer.cs: Language not supported
- src/Aspire.Cli/Resources/HelpGroupStrings.Designer.cs: Language not supported
- src/Aspire.Cli/Resources/LogsCommandStrings.Designer.cs: Language not supported
- src/Aspire.Cli/Resources/RootCommandStrings.Designer.cs: Language not supported
- src/Aspire.Cli/Resources/StopCommandStrings.Designer.cs: Language not supported
|
I think I need to backport #14369 (E2E test refactor) to release/13.2. We'll keep getting conflicts from differences between 13.2 and main. |
🎬 CLI E2E Test RecordingsThe following terminal recordings are available for commit
📹 Recordings uploaded automatically from CI run #22380728824 |
That's fine by me. Are you saying we should wait for that or okay to merge this and then do that to prevent future conflicts? |
|
Backport #14667 Doesn't need to block this PR. I did some work to check there aren't changes between change files between branches. Hopefully shouldn't generate more conflicts next merge PR. |
…-13.2 # Conflicts: # eng/Version.Details.xml # tests/Aspire.Cli.EndToEnd.Tests/DescribeCommandTests.cs # tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2ETestHelpers.cs # tests/Aspire.Deployment.EndToEnd.Tests/Helpers/DeploymentE2ETestHelpers.cs
5204ed7 to
7bcaa30
Compare
|
Updated the merge commit to fix a dropped change from PR #14441: |
Fixes #14636
Summary
This PR manually merges
release/13.2intomain, resolving the merge conflicts that prevented the automated daily back-merge workflow from completing.Important
This PR should NOT be squash-merged. It must be merged with a merge commit to preserve the release branch history. @joperezr will handle the merge once the PR is approved.
Merge Conflicts & Resolutions
1.
eng/Version.Details.xml— Whitespace-only conflict2.
tests/Aspire.Cli.EndToEnd.Tests/DescribeCommandTests.cs— File rename conflictDescribeCommandTests.cs→ResourcesCommandTests.csin CLI: Grouped help, command renames, and ergonomics cleanup #14599 (CLI command renames). On release/13.2, @mitchdenny modified the original file in Improve Azure deployment error output #14576 and Handle malformed MCP JSON config files gracefully #14537, adding recording path support to the terminal builder.DescribeCommandTests.csviagit rm. Main's renamedResourcesCommandTests.csalready usesCreateTestTerminal()which includes recording support.3.
tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2ETestHelpers.cs— Refactored shared helpers vs new methodsWaitForSuccessPrompt,IncrementSequence, andExecuteCallbackinto a sharedtests/Shared/Hex1bTestHelpers.cs(Centralize some E2E test code #14369). On release/13.2, @mitchdenny added those same methods locally plus two new ones (WaitForAnyPrompt,WaitForErrorPrompt) andCreateMalformedMcpConfigin Fix aspire stop --non-interactive with multiple AppHosts #14575 and Handle malformed MCP JSON config files gracefully #14537.WaitForAnyPrompt,WaitForErrorPrompt) to the sharedHex1bTestHelpers.cs, and addedCreateMalformedMcpConfigto the CLI-specific helpers.4.
tests/Aspire.Deployment.EndToEnd.Tests/Helpers/DeploymentE2ETestHelpers.cs— Same pattern as #3Hex1bTestHelpers.cs(including the newly addedWaitForAnyPrompt) covers all needed methods.Additional post-merge fixes
Several auto-merged files from release/13.2 (
StopNonInteractiveTests.cs,StartStopTests.cs,AgentCommandTests.cs,AcaDeploymentErrorOutputTests.cs) used the old verboseHex1bTerminal.CreateBuilder()pattern that was refactored on main. Updated 8 occurrences to useCreateTestTerminal()and removed unnecessaryusing Hex1b;directives to pass the build.Validation
Aspire.Cli.EndToEnd.TestsandAspire.Deployment.EndToEnd.Testsbuild successfully with 0 warnings and 0 errors.cc @JamesNK @mitchdenny @maddymontaquila @davidfowl for a quick review of the conflict resolutions in your respective areas.