Merge release/13.2 into main after 13.2.0 release#15540
Merge release/13.2 into main after 13.2.0 release#15540
Conversation
…5323) * Update package versions to 13.2.0 and enable stabilization in CI configuration * Temporary marking some integrations as preview while we wait for Azure.Provisioning.PrivateDns package * Update packaging service to set pre-release channel quality to 'Both' for pr hives * Update CLI E2E version check to handle stabilized builds When StabilizePackageVersion=true, aspire --version outputs just '13.2.0' without a commit SHA suffix. Update VerifyAspireCliVersionAsync to check for '13.2.0' which is present in both stable and prerelease version strings. Suppress IDE0060 for the unused commitSha parameter rather than removing it, so it can be restored when merging back to main. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Skip preview-only packages in TypeScript polyglot validation Packages with SuppressFinalPackageVersion=true only produce prerelease versions, which causes aspire restore to fail when the build is stabilized (it requests stable versions). Skip these packages until the build infrastructure dynamically computes versions (#15335). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ath to _appDirectoryPath/AppDirectoryPath in PrebuiltAppHostServer (#15332) * Initial plan * Remove Path.GetDirectoryName call and rename _appPath to _appDirectoryPath in PrebuiltAppHostServer Co-authored-by: eerhardt <8291187+eerhardt@users.noreply.github.com> * Rename AppPath property to AppDirectoryPath in IAppHostServerProject and implementations 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>
* Fix Foundry run-mode project restart Ensure the default Foundry ACR is registered in run mode so project provisioning can restore its dependent outputs on restart. Add a regression test covering run-mode default container registry registration for Foundry projects. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update Foundry run-mode test expectation Adjust the Foundry run-mode project test to expect the default container registry to be modeled in the app resources now that restart provisioning depends on it. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Block Foundry projects on local mode Throw a clear InvalidOperationException when AddProject is combined with RunAsFoundryLocal in either order, and add tests covering both unsupported scenarios. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix Aspire.Hosting analyzer hookup Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix analyzer export after rebase Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Remove global namespace qualifiers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Refresh codegen snapshots Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix TypeScript capability assertions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix shared configuration export ignore Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address analyzer review feedback Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Refresh container capability snapshot Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…te (#15333) * Consolidate WithEnvironment exports using AspireUnionAttribute Merge the separate withEnvironment (string) and withEnvironmentExpression (ReferenceExpression) polyglot exports into a single withEnvironment export using [AspireUnion] to accept string | ReferenceExpression | EndpointReference. This gives TypeScript AppHost users a single, clean API: await api.withEnvironment('KEY', 'value'); await api.withEnvironment('KEY', refExpr`redis://${endpoint}`); await api.withEnvironment('KEY', endpoint); Instead of requiring separate method names for each value type. Also adds EndpointReference support which was previously unexported, and handles object target type in AtsMarshaller.ConvertPrimitive for correct union parameter deserialization. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Expand WithEnvironment union with ParameterResource, ConnectionString, and IValueProvider fallback - Add IResourceBuilder<ParameterResource> and IResourceBuilder<IResourceWithConnectionString> to the AspireUnion - Add IValueProvider+IManifestExpressionProvider runtime fallback for extensibility (e.g. BicepOutputReference) - Remove withEnvironmentEndpoint separate export (covered by union) - Remove sync withEnvironmentCallback export, rename async to withEnvironmentCallback - Update codegen snapshots Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update TypeScript apphost environment usage Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Refresh polyglot codegen snapshots Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add ReferenceExpression apphost coverage Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix TypeScript polyglot validation apphost Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Make WithEnvironment union overload internal Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address WithEnvironment review feedback Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: David Fowler <davidfowl@gmail.com> Co-authored-by: Sebastien Ros <sebastienros@gmail.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Add TypeScript SDK refresh workflow Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address TypeScript SDK workflow review comments Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
… versions (#15367) * Add installer paths to CI trigger patterns * Replace channel with artifactVersion in Homebrew cask generation Stable builds publish CLI archives under a preview version path on ci.dot.net (e.g. aspire/9.2.0-preview.1.12345/) while the tarball filename uses the real stable version (aspire-cli-osx-arm64-9.2.0.tar.gz). The old code assumed the same version appeared in both the URL path and filename. Introduce --artifact-version to generate-cask.sh so the URL path segment and the filename version can differ. Add --archive-root for computing SHA256 hashes from locally-built archives instead of downloading from ci.dot.net. Remove the --channel parameter and the separate aspire@prerelease.rb.template; only the stable aspire.rb template is used. Simplify dogfood.sh accordingly. * Harden Homebrew prepare-stage validation Add brew style --fix to auto-correct formatting before auditing. Detect whether the cask is new upstream by querying the GitHub API and run brew audit with --new when appropriate. Use HOMEBREW_NO_INSTALL_FROM_API=1 during install tests to ensure the local tap cask is used rather than the Homebrew API cache. Add proper cleanup traps for brew untap on exit. Make the install/uninstall test conditional via a runInstallTest parameter. Write a validation-summary.json artifact recording all check results so the publish step can verify that prepare-stage validation actually ran and passed. * Rewrite Homebrew publish to use GitHub REST and GraphQL API Replace the gh CLI and git clone/push workflow with pure GitHub API calls via Invoke-RestMethod. This removes the need for a git installation on the build agent and avoids fork-clone race conditions. Key changes: - Fork Homebrew/homebrew-cask via API with polling for readiness - Create/reset the PR branch and upload the cask file via the contents API - Check whether upstream already has the exact same content and skip if so - Require a passing validation-summary.json before submitting - Create PRs as drafts; convert existing open PRs to draft via GraphQL - Generate a rich PR body with a checklist of all validation steps - Reference superseded closed PRs in the body when re-submitting * Improve WinGet manifest generation and publishing Apply the same artifactVersion split to the WinGet pipeline: the installer URL path uses the artifact version while the package version uses the real stable version. Update generate-manifests.ps1 and the prepare/publish templates accordingly. * Wire up artifactVersion in release and CI pipelines Update the top-level pipeline files to pass artifactVersion instead of channel to the Homebrew and WinGet templates. Add the new installer preparation and publishing stages to the unofficial pipeline. * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Address installer publishing review feedback Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * [release/13.2] Fix Homebrew publish URI escaping Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…es (#15350) * Improve CLI error messages for dependency and project creation failures * Use Assert.Collection and Assert.Equal in NewCommandTests * Fix DisplayLines markup test assertion
Add three context menu actions for endpoint URL tree items in the Running AppHosts tree view: - Copy URL to Clipboard - Open in External Browser - Open in Simple Browser Introduces EndpointUrlItem TreeItem subclass with contextValue 'endpointUrl' to enable context menu targeting, replacing the generic DetailItem for endpoint URLs. Fixes #15345 Co-authored-by: Mitch Denny <mitch@mitchdeny.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add API Review Agent Skill This skill allows us to automate parts of the API reviews that we do. * updates - tag the original author in the comment * Address PR review feedback on api-review skill - Fix description to say 'developer who introduced each API (via git blame)' instead of 'PR author' to avoid misdirected attribution - Replace broken gh api --jsonArray bash example with Python script using json.dump + gh api --input (--jsonArray is not a real gh flag) - Provide non-empty review body instead of empty string to avoid API rejection Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add deduplication check to api-review skill Before posting review comments, the skill now checks for existing API review comments by the current user on the PR. If found, it skips duplicates, updates changed findings, and only posts net-new findings. This prevents duplicate comments when the skill runs against the same PR multiple times. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ostPath (#15352) * Fix legacy settings migration path adjustment When migrating from .aspire/settings.json to aspire.config.json, the appHostPath was copied verbatim. But .aspire/settings.json stores paths relative to the .aspire/ directory (e.g., '../src/apphost.ts'), while aspire.config.json stores paths relative to its own directory (the project root). This caused the migrated path to resolve incorrectly. The fix re-bases the appHostPath during migration: resolves it against the legacy .aspire/ directory, then makes it relative to the config directory. For example, '../src/apphost.ts' becomes 'src/apphost.ts'. Includes unit tests for the path adjustment and an E2E test that verifies the full migration scenario with a TypeScript apphost in a subdirectory. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix E2E test: use grep instead of terminal buffer check The terminal buffer accumulates all output, so the earlier echo of legacy settings.json content (containing '../src/apphost.ts') would cause false matches when verifying the migrated aspire.config.json. Use 'grep' with the exact JSON key-value pattern to isolate the check, and rely on the host-side file verification as the primary assertion. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix E2E test: keep TS project intact, use robust patterns The previous test moved apphost.ts to src/ but left .modules/ in the workspace root, breaking TS imports. aspire run couldn't start, so the migration never triggered and aspire.config.json was never created. Changes: - Keep apphost.ts at workspace root (project stays valid) - Test re-basing with '../apphost.ts' -> 'apphost.ts' instead (same code path as '../src/apphost.ts' -> 'src/apphost.ts') - Wait for 'Press CTRL+C' or 'Apphost failed' instead of generic 'ERR:' which could false-match shell prompt patterns Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix E2E test: poll host filesystem instead of parsing terminal Previous approach failed because: 1. aspire run error messages varied by failure mode 2. Terminal buffer pattern matching was fragile across exit codes Now polls the host-side filesystem via bind mount for aspire.config.json, which is created during apphost discovery before the actual run attempt. This works regardless of whether aspire run succeeds or fails. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR feedback: normalize separators, guard empty paths, add tests - Normalize backslash separators to OS-native before Path operations, then always output forward slashes (matching storage convention) - Guard against empty/whitespace paths to avoid converting '' to '.' - Use { Length: > 0 } pattern match instead of separate null check - Rename misleading test to clarify .aspire/-relative semantics - Add tests: backslash normalization, output always uses '/', deeply nested paths, empty path preservation, null path handling Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Replace unrealistic test with realistic subdirectory path scenario The previous test used 'apphost.ts' without '../' prefix, which would mean the apphost lives inside .aspire/ — an impossible real-world scenario. Replace with a realistic .csproj-in-subdirectory case: '../MyApp.AppHost/MyApp.AppHost.csproj' -> 'MyApp.AppHost/MyApp.AppHost.csproj' Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use PathNormalizer for migration path re-basing Replace manual slash normalization + GetFullPath with the existing PathNormalizer.NormalizePathForCurrentPlatform() utility, which does the same thing in one call. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add NormalizePathForStorage helper and additional path tests Address review feedback: - Extract PathNormalizer.NormalizePathForStorage() for the common backslash-to-forward-slash normalization used when persisting paths. - Add tests for ./path, bare relative path, Unix rooted, and Windows rooted legacy migration scenarios. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use realistic paths in migration tests Avoid test paths that imply apphost lives under .aspire/ since that never happens in practice. 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>
* Secure AppHost RPC with session token handshake Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix TypeScript RPC authentication request Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address AppHost RPC auth review feedback Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update SDKs with token checks * Move scoped registrations to correct location * Consolidate temporary AppHost sessions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR review feedback Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix CI regressions after branch drift Sync the AppHost server project contract with current release/13.2 and make the RemoteHost authentication test tolerate the expected disconnect race after failed auth. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…#15375) * Clean up Aspire panel: context menus, loading state, welcome messages Adds initial 'loading' screen, new context menus for resources, endpoints, apphost, and PID nodes. Consolidates previous 3 commits into one for clean rebase onto main. * remove unused strings * remove comands on resources node, update string
Use stable Azure.Provisioning.PrivateDns and remove SuppressFinalPackageVersion on these two packages so they ship stable. Fix #15328
* Fix brittle CPM CLI E2E test Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Harden CPM E2E prompt handling Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Sebastien Ros <sebastienros@gmail.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* API Review Feedback Fixing some API review comments. * Remove unused attribute.
* Use home-based CLI cache and socket paths Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Share CLI identifier hashing helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add legacy backchannel hash fallback Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Align CLI socket and NuGet helpers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update src/Shared/BackchannelConstants.cs Co-authored-by: James Newton-King <james@newtonking.com> * Remove unshipped SHA socket fallback Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Revert NuGet cache relocation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Simplify CliPathHelper --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: James Newton-King <james@newtonking.com> Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
* Fix dashboard GHCP * Add comment * Fix dashboard tests for non-nullable resourceName parameter * Apply suggestions from code review Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com> --------- Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
* Mark code generation packages as preview Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Mark code generation packages experimental Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Internalize code generation implementations Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Include packages/restore in aspire cache clear The cache clear command was not clearing ~/.aspire/packages/ which contains restored NuGet packages for apphost server sessions. When the CLI binary is updated but the cached DLLs have the same version string, stale packages persist and cause failures (e.g. missing auth handshake in transport.ts). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address review feedback: extract helper, use EnumerateFiles, add tests - Extract ClearDirectoryContents helper to deduplicate directory-clearing logic - Use EnumerateFiles with IgnoreInaccessible instead of GetFiles to handle inaccessible paths gracefully during enumeration - Add tests for packages directory clearing, skip predicate, null/nonexistent directory handling Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix test: use WorkspaceRoot instead of WorkingDirectory Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Microsoft.Bcl.Memory 10.0.0 has a known high severity vulnerability (GHSA-73j8-2gch-69rq) - a denial of service via out-of-bounds read when decoding malformed Base64Url input. Update to 10.0.5 which includes the fix. Co-authored-by: Mitch Denny <mitch@mitchdeny.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add CodeLens and gutter decoration support for AppHost resources * wip * remove status bar strings from branch * Add CodeLens, gutter decorations, and AppHost resource parsers for VS Code extension - Add CodeLens provider showing resource state, actions (start/stop/restart), and view logs - Add gutter decoration provider with colored status circles for resources - Add C# and JS/TS AppHost resource parsers with registry pattern - Add statementStartLine for multi-line fluent chain CodeLens positioning - Add comment-skipping logic so CodeLens appears below comments, above code - Extract shared resource state utilities and resource constants - Add enableCodeLens and enableGutterDecorations settings - Add comprehensive test coverage (parsers, CodeLens, resourceStateUtils) - Only match parent resources (Add* calls), not implicit child resources (With* calls) * Address Copilot review: conditional appHostPath, displayName preference, Unhealthy as error - Guard --apphost flag when appHostPath is falsy in CodeLens commands - Prefer displayName over name in two-pass resource matching - Classify Unhealthy health status as error (not warning) to align with tree view * bump extension version * update config json
* Stabilize Aspire.Hosting.Docker package Remove SuppressFinalPackageVersion to make the package ship as a stable release. Add DisablePackageBaselineValidation since this is the first stable version and there is no prior baseline to validate against. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix tests for stable version --------- Co-authored-by: Mitch Denny <mitch@mitchdeny.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
We shouldn't default to ~/.nuget/packages. Instead we should use NuGet defaulting logic. Fix #15404 Co-authored-by: Eric Erhardt <eric.erhardt@microsoft.com>
…ectory (#15415) * [release/13.2] Store temporary AppHost service under user .aspire directory Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update tests/Aspire.Cli.Tests/Projects/PrebuiltAppHostServerTests.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update tests/Aspire.Cli.Tests/Projects/PrebuiltAppHostServerTests.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * [release/13.2] Address PR review feedback Co-authored-by: Copilot <223556219+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>
…15383) When 'aspire config set features.X true' writes a JSON string "true" instead of a JSON boolean, AspireConfigFile.Load() fails to deserialize the Dictionary<string, bool> Features property. Fix by adding a FlexibleBooleanConverter that tolerates both JSON booleans and JSON string representations of booleans. The converter is registered globally via JsonSourceGenerationOptions.Converters so all bool properties benefit. Also fix TryNormalizeSettingsFile to use DeepClone() instead of ToString() when normalizing colon-separated keys, which was corrupting non-string types. Co-authored-by: Mitch Denny <mitch@mitchdeny.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…config.json to .NET templates (#15423) * Add E2E test: config discovery from apphost directory Adds a test that verifies aspire.config.json is discovered adjacent to the apphost file when running from a parent directory, rather than being recreated in the current working directory. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix config discovery to search from apphost directory When an apphost is found via recursive search, use its directory as the search root for aspire.config.json (walking upward) instead of defaulting to CWD. This prevents creating a duplicate config when the user runs 'aspire run' from a parent directory after 'aspire new'. Changes: - Add ConfigurationHelper.FindNearestConfigFilePath helper - ProjectLocator.CreateSettingsFileAsync: skip creation when config already exists near the apphost with valid appHost.path - GuestAppHostProject.GetConfigDirectory: search from apphost directory so launch profiles are read from the correct config Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix: only skip config creation when path matches discovered apphost The previous check skipped creation whenever any appHost.path existed, which broke config healing when the path was stale/invalid. Now we resolve the stored path and only skip if it points to the same apphost that was discovered via recursive search. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add aspire.config.json to .NET apphost templates Include aspire.config.json with appHost.path in the aspire-apphost (csproj) and aspire-apphost-singlefile templates so that aspire run from a parent directory finds the config adjacent to the apphost instead of creating a spurious one in the working directory. The csproj template uses sourceName 'Aspire.AppHost1' so the template engine substitutes the actual project name automatically. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add aspire.config.json to solution-level apphost templates Add aspire.config.json at the solution root for aspire-empty, aspire-starter, and aspire-ts-cs-starter templates. Each points to the AppHost csproj via a relative path. The template engine substitutes the sourceName so the path matches the actual project name chosen by the user. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add aspire.config.json to aspire-py-starter template Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address review feedback: fix legacy path handling, stale docs, dead code - Fix legacy .aspire/settings.json path handling in ProjectLocator: resolve config root to parent of .aspire/ directory - Update GetConfigDirectory XML doc to reflect new behavior - Remove unused _configurationService field and constructor parameter - Assert originalContent == currentContent in E2E test 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 Windows CLI backchannel socket path * Respond to PR feedback When using named pipes for the Guest AppHost, we need to just return a name, not a path.
…crosoft (#15466) * Update all dotnet/aspire references to microsoft/aspire Updated all GitHub Actions workflow owner guards from repository_owner == 'dotnet' to repository_owner == 'microsoft' across 24 workflow files. Replaced all dotnet/aspire repository references with microsoft/aspire across 288 files including workflows, scripts, tests, READMEs, source code, templates, and documentation. Preserved aka.ms short links pointing to dotnet/aspire as those are external redirects. Fixed SigstoreNpmProvenanceCheckerTests expectedOwner to match the updated URL. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use GitHub App token for PR creation in all workflows The microsoft org disables GITHUB_TOKEN from creating PRs. This updates all 10 workflows that create PRs to use a GitHub App installation token (via actions/create-github-app-token) instead. - 9 workflows: add app token step, pass to existing PR creation logic - backport: rewrite locally (arcade reusable workflow doesn't accept custom tokens), filed dotnet/arcade#16585 for upstream support - release-github-tasks: also fix head: -> branch: bug in PR creation Replicates changes from microsoft/aspire-internal-reorg-temp#10. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Apply remaining microsoft/aspire updates for release/13.2 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Jose Perez Rodriguez <joperezr@microsoft.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Quarantine Docker and Kubernetes E2E tests on release/13.2 SuppressFinalPackageVersion=true packages get assembly version 42.42.42.42 while stable packages resolve from nuget.org with 13.2.0.0, causing CS1705 and NU1102 errors on release branches. Tracking issue: #15511 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add missing 'using Aspire.TestUtilities' for QuarantinedTest attribute Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Tighten Kusto emulator functional log assertions (#15473) * Tighten Kusto functional log assertions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Document Kusto log assertion source Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Assert Kusto failure log message Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix Kusto assertion analyzer warning Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Re-enable Kusto Linux tests Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Relax Kusto invalid log assertion Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Strengthen Kusto failure log assertions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Relax Kusto exception assertion Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Reduce Cosmos emulator test footprint Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Scope Cosmos wait test health checks Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Harden Cosmos emulator readiness Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Pin classic Cosmos emulator image Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use Cosmos emulator 2.14.26 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use stable Cosmos emulator image Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> (cherry picked from commit 75c45a3) * Adjust Cosmos emulator tag test for stable backport Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Pin Kusto emulator image on release/13.2 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 15540Or
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 15540" |
There was a problem hiding this comment.
Pull request overview
This PR merges the release/13.2 branch back into main after the 13.2.0 release, carrying forward release-branch fixes and infrastructure updates into the mainline.
Changes:
- Adds/updates RemoteHost JSON-RPC authentication (token-based) and regenerates polyglot transports/snapshots accordingly.
- Improves CLI filesystem/layout behavior (stable
~/.aspirepaths, packages directory support, cache clearing, settings migration behavior) and extends test coverage. - Updates engineering pipelines and packaging artifacts (WinGet/Homebrew manifest/version handling), plus template/config/link refreshes.
Reviewed changes
Copilot reviewed 218 out of 220 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/helix/send-to-helix-inner.proj | Updates repo links in Helix comments. |
| tests/Aspire.Hosting.RemoteHost.Tests/CodeGenerationResolverTests.cs | Adds resolver discovery tests for internal generators/support. |
| tests/Aspire.Hosting.RemoteHost.Tests/AttributeDataReaderTests.cs | Adds test coverage for type-level AspireExportIgnore. |
| tests/Aspire.Hosting.RemoteHost.Tests/Aspire.Hosting.RemoteHost.Tests.csproj | Adds references to codegen projects for resolver tests. |
| tests/Aspire.Hosting.Foundry.Tests/ProjectResourceTests.cs | Updates run-mode registry expectations. |
| tests/Aspire.Hosting.Foundry.Tests/AddProjectTests.cs | Adds ordering/invalid-combination tests for Foundry local + projects. |
| tests/Aspire.Hosting.CodeGeneration.TypeScript.Tests/Snapshots/transport.verified.ts | Updates TS transport snapshot for authentication. |
| tests/Aspire.Hosting.CodeGeneration.TypeScript.Tests/Snapshots/HostingContainerResourceCapabilities.verified.txt | Updates capability IDs/names snapshot after export changes. |
| tests/Aspire.Hosting.CodeGeneration.TypeScript.JsTests/tests/transport.test.ts | Adds JS tests asserting auth token behavior during connect. |
| tests/Aspire.Hosting.CodeGeneration.Rust.Tests/Snapshots/AtsGeneratedAspire.verified.rs | Updates Rust snapshot to authenticate after connect. |
| tests/Aspire.Hosting.CodeGeneration.Python.Tests/Snapshots/AtsGeneratedAspire.verified.py | Updates Python snapshot to authenticate after connect. |
| tests/Aspire.Hosting.CodeGeneration.Java.Tests/Snapshots/AtsGeneratedAspire.verified.java | Updates Java snapshot to authenticate after connect. |
| tests/Aspire.Hosting.CodeGeneration.Java.Tests/AtsJavaCodeGeneratorTests.cs | Asserts token param list generation in Transport.java. |
| tests/Aspire.Hosting.CodeGeneration.Go.Tests/Snapshots/AtsGeneratedAspire.verified.go | Updates Go snapshot to authenticate after connect. |
| tests/Aspire.Hosting.Azure.Tests/FoundryExtensionsTests.cs | Adds run-mode default container registry test. |
| tests/Aspire.Hosting.Azure.Tests/AzureCosmosDBExtensionsTests.cs | Updates expected Cosmos emulator tag default to stable. |
| tests/Aspire.Hosting.Azure.Kusto.Tests/AddAzureKustoTests.cs | Updates expected Kusto emulator tag default to pinned tag. |
| tests/Aspire.Dashboard.Tests/Model/AIAssistant/AssistantChatDataContextTests.cs | Adjusts tests for non-nullable resourceName parameters. |
| tests/Aspire.Cli.Tests/Utils/CliTestHelper.cs | Wires packages directory into CLI execution context for tests. |
| tests/Aspire.Cli.Tests/Utils/CliPathHelperTests.cs | Adds tests for randomized socket path generation. |
| tests/Aspire.Cli.Tests/Utils/AppHostHelperTests.cs | Adds compatibility tests for previous/current aux socket formats. |
| tests/Aspire.Cli.Tests/Projects/PrebuiltAppHostServerTests.cs | Adds test ensuring working dir is under user Aspire home. |
| tests/Aspire.Cli.Tests/Projects/GuestAppHostProjectTests.cs | Simplifies helper creation; adjusts config service setup. |
| tests/Aspire.Cli.Tests/Projects/AppHostServerSessionTests.cs | Adds test ensuring env var dictionary isn’t mutated by session start. |
| tests/Aspire.Cli.Tests/Projects/AppHostServerProjectTests.cs | Tests project model path hashing under ~/.aspire/hosts. |
| tests/Aspire.Cli.Tests/Packaging/PackagingServiceTests.cs | Minor assertion refactor for global packages folder value. |
| tests/Aspire.Cli.Tests/Interaction/ConsoleInteractionServiceTests.cs | Updates escaping expectation for Spectre markup rendering. |
| tests/Aspire.Cli.Tests/DotNetSdkInstallerTests.cs | Updates minimum SDK error message expected string. |
| tests/Aspire.Cli.Tests/Configuration/ConfigurationServiceTests.cs | Adds tests ensuring boolean-like strings remain JSON strings. |
| tests/Aspire.Cli.Tests/Configuration/ConfigurationHelperTests.cs | Adds normalization test preserving boolean JSON types. |
| tests/Aspire.Cli.Tests/Commands/NewCommandTests.cs | Adds tests ensuring “could not be created” error is displayed. |
| tests/Aspire.Cli.Tests/Commands/InitCommandTests.cs | Adds tests ensuring “could not be created” error is displayed. |
| tests/Aspire.Cli.Tests/Commands/CacheCommandTests.cs | Adds tests for clearing packages dir and directory delete helper. |
| tests/Aspire.Cli.EndToEnd.Tests/LocalConfigMigrationTests.cs | Adds E2E test for migrating legacy settings relative paths. |
| tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2EAutomatorHelpers.cs | Adjusts CLI version verification for stabilized builds. |
| src/Shared/PathNormalizer.cs | Adds storage normalization (backslash → forward slash). |
| src/Shared/KnownConfigNames.cs | Adds ASPIRE_REMOTE_APPHOST_TOKEN constant. |
| src/Shared/IConfigurationExtensions.cs | Adds export-ignore attribute stubs for CLI/Dashboard builds. |
| src/Directory.Build.targets | Broadens condition for analyzer project reference inclusion. |
| src/Aspire.TypeSystem/AttributeDataReader.cs | Adds HasAspireExportIgnoreData(Type) helper. |
| src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/frontend/src/App.tsx | Updates GitHub link to microsoft org. |
| src/Aspire.ProjectTemplates/templates/aspire-ts-cs-starter/aspire.config.json | Adds default template aspire.config.json. |
| src/Aspire.ProjectTemplates/templates/aspire-starter/aspire.config.json | Adds default template aspire.config.json. |
| src/Aspire.ProjectTemplates/templates/aspire-py-starter/frontend/src/App.tsx | Updates GitHub link to microsoft org. |
| src/Aspire.ProjectTemplates/templates/aspire-py-starter/aspire.config.json | Adds default template aspire.config.json. |
| src/Aspire.ProjectTemplates/templates/aspire-empty/aspire.config.json | Adds default template aspire.config.json. |
| src/Aspire.ProjectTemplates/templates/aspire-apphost/aspire.config.json | Adds default template aspire.config.json. |
| src/Aspire.ProjectTemplates/templates/aspire-apphost-singlefile/aspire.config.json | Adds default template aspire.config.json. |
| src/Aspire.Managed/NuGet/Commands/RestoreCommand.cs | Uses NuGet settings to resolve global packages folder. |
| src/Aspire.Hosting/Utils/ExtensionUtils.cs | Marks helper as AspireExportIgnore to reduce ATS surface. |
| src/Aspire.Hosting/Publishing/PublishingExtensions.cs | Marks convenience wrappers as AspireExportIgnore. |
| src/Aspire.Hosting/ProjectResourceBuilderExtensions.cs | Runs selected exports sync ops on background thread. |
| src/Aspire.Hosting/Polyglot/PolyglotLanguages.cs | Removes legacy polyglot language enum. |
| src/Aspire.Hosting/Polyglot/PolyglotIgnoreAttribute.cs | Removes legacy polyglot ignore attribute. |
| src/Aspire.Hosting/ExecutableResourceExtensions.cs | Marks model inspection helper as AspireExportIgnore. |
| src/Aspire.Hosting/ExecutableResourceBuilderExtensions.cs | Updates export metadata for docker publish helper. |
| src/Aspire.Hosting/EmulatorResourceExtensions.cs | Marks model inspection helper as AspireExportIgnore. |
| src/Aspire.Hosting/Dashboard/proto/dashboard_service.proto | Updates issue links to microsoft org. |
| src/Aspire.Hosting/ContainerResourceExtensions.cs | Marks model inspection helpers as AspireExportIgnore. |
| src/Aspire.Hosting/ContainerResourceBuilderExtensions.cs | Renames export IDs for parameter-based build arg/secret overloads. |
| src/Aspire.Hosting/ContainerExecutableResourceExtensions.cs | Marks model inspection helper as AspireExportIgnore. |
| src/Aspire.Hosting/ConnectionStringBuilderExtensions.cs | Runs export sync op on background thread. |
| src/Aspire.Hosting/ConnectionPropertiesExtensions.cs | Marks connection-property merge helper as AspireExportIgnore. |
| src/Aspire.Hosting/Ats/AspireExportIgnoreAttribute.cs | Allows applying ignore at type level. |
| src/Aspire.Hosting/Aspire.Hosting.csproj | Removes redundant analyzer project reference (now via targets). |
| src/Aspire.Hosting/ApplicationModel/ProjectResourceExtensions.cs | Marks model inspection helpers as AspireExportIgnore. |
| src/Aspire.Hosting/ApplicationModel/DistributedApplicationModelExtensions.cs | Marks model inspection helpers as AspireExportIgnore. |
| src/Aspire.Hosting.RemoteHost/RemoteHostServer.cs | Makes core services scoped per client; adds auth state. |
| src/Aspire.Hosting.RemoteHost/RemoteAppHostService.cs | Adds authenticate RPC and enforces auth for methods. |
| src/Aspire.Hosting.RemoteHost/Language/LanguageService.cs | Enforces auth before language RPC methods. |
| src/Aspire.Hosting.RemoteHost/JsonRpcServer.cs | Uses scoped services per connection and sets client connection. |
| src/Aspire.Hosting.RemoteHost/JsonRpcAuthenticationState.cs | Adds token verification state for RPC sessions. |
| src/Aspire.Hosting.RemoteHost/CodeGeneration/CodeGenerationService.cs | Enforces auth before codegen RPC methods. |
| src/Aspire.Hosting.RemoteHost/AtsCapabilityScanner.cs | Treats type-level ignore as ignoring member exports. |
| src/Aspire.Hosting.RemoteHost/Ats/AtsMarshaller.cs | Improves union object unmarshalling based on JSON shape. |
| src/Aspire.Hosting.RemoteHost/Aspire.Hosting.RemoteHost.csproj | Links shared KnownConfigNames into RemoteHost. |
| src/Aspire.Hosting.Foundry/Project/ProjectBuilderExtension.cs | Blocks projects under local-emulator Foundry; always adds ACR. |
| src/Aspire.Hosting.Foundry/FoundryModel.Generated.cs | Updates model metadata (new models/summary tweaks). |
| src/Aspire.Hosting.Foundry/FoundryExtensions.cs | Adds shared exception message and ordering guard. |
| src/Aspire.Hosting.Docker/Aspire.Hosting.Docker.csproj | Adjusts package baseline validation setting. |
| src/Aspire.Hosting.CodeGeneration.TypeScript/TypeScriptLanguageSupport.cs | Makes language support internal. |
| src/Aspire.Hosting.CodeGeneration.TypeScript/Resources/transport.ts | Adds auth handshake during connect. |
| src/Aspire.Hosting.CodeGeneration.TypeScript/AtsTypeScriptCodeGenerator.cs | Makes generator internal. |
| src/Aspire.Hosting.CodeGeneration.TypeScript/AssemblyInfo.cs | Marks assembly as Experimental(ASPIREATS001). |
| src/Aspire.Hosting.CodeGeneration.Rust/RustLanguageSupport.cs | Makes language support internal. |
| src/Aspire.Hosting.CodeGeneration.Rust/Resources/transport.rs | Adds authenticate method to transport. |
| src/Aspire.Hosting.CodeGeneration.Rust/AtsRustCodeGenerator.cs | Makes generator internal; generates auth usage. |
| src/Aspire.Hosting.CodeGeneration.Rust/AssemblyInfo.cs | Marks assembly as Experimental(ASPIREATS001). |
| src/Aspire.Hosting.CodeGeneration.Python/Resources/transport.py | Adds authenticate method to transport. |
| src/Aspire.Hosting.CodeGeneration.Python/PythonLanguageSupport.cs | Makes language support internal. |
| src/Aspire.Hosting.CodeGeneration.Python/AtsPythonCodeGenerator.cs | Makes generator internal; generates auth usage. |
| src/Aspire.Hosting.CodeGeneration.Python/AssemblyInfo.cs | Marks assembly as Experimental(ASPIREATS001). |
| src/Aspire.Hosting.CodeGeneration.Java/Resources/Transport.java | Adds authenticate request support. |
| src/Aspire.Hosting.CodeGeneration.Java/JavaLanguageSupport.cs | Makes language support internal. |
| src/Aspire.Hosting.CodeGeneration.Java/AtsJavaCodeGenerator.cs | Makes generator internal; generates auth usage. |
| src/Aspire.Hosting.CodeGeneration.Java/AssemblyInfo.cs | Marks assembly as Experimental(ASPIREATS001). |
| src/Aspire.Hosting.CodeGeneration.Go/Resources/transport.go | Adds Authenticate method to transport. |
| src/Aspire.Hosting.CodeGeneration.Go/GoLanguageSupport.cs | Makes language support internal. |
| src/Aspire.Hosting.CodeGeneration.Go/AtsGoCodeGenerator.cs | Makes generator internal; generates auth usage. |
| src/Aspire.Hosting.CodeGeneration.Go/AssemblyInfo.cs | Marks assembly as Experimental(ASPIREATS001). |
| src/Aspire.Hosting.Azure.WebPubSub/AzureWebPubSubResource.cs | Removes redundant explicit private endpoint Id impl. |
| src/Aspire.Hosting.Azure.Sql/AzureSqlServerResource.cs | Removes redundant explicit private endpoint Id impl / using. |
| src/Aspire.Hosting.Azure.SignalR/AzureSignalRResource.cs | Removes redundant explicit private endpoint Id impl. |
| src/Aspire.Hosting.Azure.ServiceBus/AzureServiceBusResource.cs | Removes redundant explicit private endpoint Id impl. |
| src/Aspire.Hosting.Azure.Search/AzureSearchResource.cs | Removes redundant explicit private endpoint Id impl. |
| src/Aspire.Hosting.Azure.Redis/AzureManagedRedisResource.cs | Removes redundant explicit private endpoint Id impl. |
| src/Aspire.Hosting.Azure.PostgreSQL/AzurePostgresFlexibleServerResource.cs | Removes redundant explicit private endpoint Id impl. |
| src/Aspire.Hosting.Azure.Network/IAzurePrivateEndpointTargetNotification.cs | Moves namespace to Aspire.Hosting.Azure. |
| src/Aspire.Hosting.Azure.Network/AzurePrivateEndpointExtensions.cs | Cleans up using after namespace move. |
| src/Aspire.Hosting.Azure.Kusto/AzureKustoEmulatorContainerImageTags.cs | Pins emulator image tag to specific build. |
| src/Aspire.Hosting.Azure.KeyVault/AzureKeyVaultResource.cs | Removes redundant explicit private endpoint Id impl. |
| src/Aspire.Hosting.Azure.EventHubs/AzureEventHubsResource.cs | Removes redundant explicit private endpoint Id impl. |
| src/Aspire.Hosting.Azure.CosmosDB/AzureCosmosDBResource.cs | Removes redundant explicit private endpoint Id impl. |
| src/Aspire.Hosting.Azure.AppConfiguration/AzureAppConfigurationResource.cs | Removes redundant explicit private endpoint Id impl. |
| src/Aspire.Hosting.Analyzers/Infrastructure/WellKnownTypeData.cs | Adds ValueTask/ValueTask as well-known types. |
| src/Aspire.Dashboard/wwwroot/css/app.css | Updates issue link to microsoft org. |
| src/Aspire.Dashboard/Model/Assistant/AssistantChatViewModel.cs | Updates default AI model list to include gpt-5.4. |
| src/Aspire.Dashboard/Model/Assistant/AssistantChatDataContext.cs | Makes resourceName non-nullable to affect schema shape. |
| src/Aspire.Cli/Utils/ConfigurationHelper.cs | Adds nearest-config search and preserves JSON value types on normalize. |
| src/Aspire.Cli/Utils/CliPathHelper.cs | Adds centralized CLI path + socket path creation helpers. |
| src/Aspire.Cli/Utils/AppHostHelper.cs | Updates docs/logic for current/previous socket name formats. |
| src/Aspire.Cli/Templating/Templates/ts-starter/frontend/src/App.tsx | Updates GitHub link to microsoft org. |
| src/Aspire.Cli/Scaffolding/ScaffoldingService.cs | Uses AppHostServerSession abstraction (auth + cleanup). |
| src/Aspire.Cli/Resources/xlf/InteractionServiceStrings.*.xlf | Adds new localized string entry placeholder. |
| src/Aspire.Cli/Resources/xlf/ErrorStrings.*.xlf | Updates MinimumSdkVersionNotMet source across locales. |
| src/Aspire.Cli/Resources/InteractionServiceStrings.resx | Adds ProjectCouldNotBeCreated string. |
| src/Aspire.Cli/Resources/InteractionServiceStrings.Designer.cs | Adds accessor for ProjectCouldNotBeCreated. |
| src/Aspire.Cli/Resources/ErrorStrings.resx | Updates MinimumSdkVersionNotMet English source string. |
| src/Aspire.Cli/Projects/ProjectUpdater.cs | Fixes named argument for cancellationToken parameter. |
| src/Aspire.Cli/Projects/ProjectLocator.cs | Avoids overwriting config if a nearby config already points to apphost. |
| src/Aspire.Cli/Projects/PrebuiltAppHostServer.cs | Renames AppPath to AppDirectoryPath; uses ~/.aspire working dir. |
| src/Aspire.Cli/Projects/IAppHostServerSession.cs | Adds AuthenticationToken property. |
| src/Aspire.Cli/Projects/IAppHostServerProject.cs | Renames AppPath to AppDirectoryPath. |
| src/Aspire.Cli/Projects/IAppHostRpcClient.cs | Requires authentication token on ConnectAsync. |
| src/Aspire.Cli/Projects/DotNetBasedAppHostServerProject.cs | Moves project model path under ~/.aspire/hosts. |
| src/Aspire.Cli/Projects/AppHostServerSession.cs | Adds server start helper injecting auth token; authenticates client. |
| src/Aspire.Cli/Projects/AppHostServerProject.cs | Uses CliPathHelper for randomized guest socket paths. |
| src/Aspire.Cli/Projects/AppHostRpcClient.cs | Adds auth handshake on connect; updates factory signature. |
| src/Aspire.Cli/Program.cs | Centralizes Aspire home and adds packages directory to execution context. |
| src/Aspire.Cli/Packaging/PackagingService.cs | Marks PR channels as quality Both. |
| src/Aspire.Cli/JsonSourceGenerationContext.cs | Adds FlexibleBooleanConverter to source-gen options. |
| src/Aspire.Cli/Interaction/ConsoleInteractionService.cs | Adjusts line rendering and single-stderr-line behavior. |
| src/Aspire.Cli/DotNet/DotNetCliRunner.cs | Uses CliPathHelper for backchannel socket path creation. |
| src/Aspire.Cli/Configuration/FlexibleBooleanConverter.cs | Adds converter accepting bool or boolean strings. |
| src/Aspire.Cli/Configuration/AspireConfigFile.cs | Rebases legacy relative appHostPath during migration and normalizes separators. |
| src/Aspire.Cli/Commands/Sdk/SdkGenerateCommand.cs | Uses AppHostServerSession for SDK generation flow. |
| src/Aspire.Cli/Commands/Sdk/SdkDumpCommand.cs | Uses AppHostServerSession for capability dump flow. |
| src/Aspire.Cli/Commands/NewCommand.cs | Adds “could not be created” error message on failures. |
| src/Aspire.Cli/Commands/InitCommand.cs | Adds “could not be created” error message on failures. |
| src/Aspire.Cli/Commands/CacheCommand.cs | Clears packages dir and refactors deletion logic into helper. |
| src/Aspire.Cli/CliExecutionContext.cs | Adds PackagesDirectory to execution context. |
| src/Aspire.Cli/Aspire.Cli.csproj | Adds TokenGenerator shared file and System.IO.Hashing dependency. |
| playground/polyglot/TypeScript/Aspire.Hosting/ValidationAppHost/apphost.ts | Updates TS validation apphost calls to new exports. |
| playground/polyglot/TypeScript/Aspire.Hosting.SqlServer/aspire.config.json | Adds profiles section. |
| playground/TypeScriptApps/RpsArena/aspire.config.json | Adds profiles section. |
| playground/TestShop/MyFrontend/Components/Layout/AppFooter.razor | Updates GitHub links to microsoft org. |
| playground/FoundryAgentEnterprise/frontend/src/App.tsx | Updates GitHub link to microsoft org. |
| eng/winget/microsoft.aspire/Aspire.locale.en-US.yaml.template | Updates support/license URLs to microsoft org. |
| eng/winget/microsoft.aspire.prerelease/Aspire.locale.en-US.yaml.template | Updates support/license URLs to microsoft org. |
| eng/winget/README.md | Updates artifact URL template to use ARTIFACT_VERSION. |
| eng/testing/github-ci-trigger-patterns.txt | Adds winget/homebrew paths to CI trigger patterns list. |
| eng/pipelines/templates/publish-winget.yml | Copies “clean” manifest set and validates required manifests. |
| eng/pipelines/templates/prepare-winget-manifest.yml | Adds artifactVersion support and conditional install test. |
| eng/pipelines/azure-pipelines.yml | Adds clean checkout, computes artifact version, refines installer gating. |
| eng/homebrew/dogfood.sh | Simplifies stable-only cask handling + conflict detection. |
| eng/homebrew/aspire@prerelease.rb.template | Removes prerelease cask template. |
| eng/homebrew/aspire.rb.template | Uses ARTIFACT_VERSION in URL and updates metadata. |
| eng/homebrew/README.md | Updates docs for stable-only flow and revised publishing behavior. |
| eng/Versions.props | Updates Microsoft.Extensions.AI.OpenAI version. |
| Directory.Packages.props | Updates Azure.Provisioning, PrivateDns, and OpenAI package versions. |
| AGENTS.md | Adds api-review skill documentation. |
| .github/workflows/refresh-typescript-sdks.yml | Adds scheduled workflow to refresh TS playground SDKs. |
| .github/workflows/polyglot-validation/test-typescript-playground.sh | Skips preview-only packages under stabilized builds; reports skipped count. |
Files not reviewed (1)
- src/Aspire.Cli/Resources/InteractionServiceStrings.Designer.cs: Language not supported
| var providedTokenBytes = Encoding.UTF8.GetBytes(token); | ||
|
|
||
| try | ||
| { | ||
| var isMatch = CryptographicOperations.FixedTimeEquals(providedTokenBytes, _expectedTokenBytes); | ||
|
|
There was a problem hiding this comment.
CryptographicOperations.FixedTimeEquals throws if the input buffers are different lengths. If a client provides a token of a different length than the expected token, this method will throw instead of returning false, potentially turning failed authentication into an unhandled exception / DoS. Consider checking providedTokenBytes.Length == _expectedTokenBytes.Length before calling FixedTimeEquals (returning false when lengths differ) and still zeroing the provided buffer.
| @@ -81,7 +81,7 @@ public async Task GetTraces_ExceedTokenLimit_ReturnMostRecentItems() | |||
| var dataContext = CreateAssistantChatDataContext(telemetryRepository: repository); | |||
|
|
|||
| // Act | |||
| var result = await dataContext.GetTracesAsync(resourceName: null, CancellationToken.None); | |||
| var result = await dataContext.GetTracesAsync(resourceName: null!, CancellationToken.None); | |||
|
|
|||
There was a problem hiding this comment.
These tests now pass null! for resourceName even though the API was intentionally changed to take a non-nullable string (to influence the generated JSON schema). To keep the tests aligned with the intended contract, pass an explicit “missing value” representation (e.g., string.Empty) instead of null!.
| <trans-unit id="MinimumSdkVersionNotMet"> | ||
| <source>The Aspire CLI requires .NET SDK version {0} or later. Detected: {1}.</source> | ||
| <target state="translated">Die Aspire-CLI erfordert .NET SDK-Version {0} oder höher. Erkannt: {1}.</target> | ||
| <source>C# apphost requires .NET SDK version {0} or later. Detected: {1}.</source> | ||
| <target state="needs-review-translation">Die Aspire-CLI erfordert .NET SDK-Version {0} oder höher. Erkannt: {1}.</target> | ||
| <note /> |
There was a problem hiding this comment.
The source string changed from “Aspire CLI requires …” to “C# apphost requires …”, but the localized <target> text still refers to the Aspire CLI. This will display an incorrect message for this locale. Until a proper translation is available, consider updating the <target> to match the new source text (or an accurate translation).
|
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.
|
Read VersionPrefix dynamically from eng/Versions.props instead of hardcoding a specific version. For non-stabilized builds (all normal PR builds), also verify the commit SHA suffix for exact build identity. This replaces the hardcoded '13.2.0' check that was added on the release/13.2 branch and would fail when merged to main (13.3.0). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ync) Take main's version which includes the newer _agentInitCommand.PromptAndChainAsync pattern, replacing release/13.2's simpler error check. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
On main, NewCommand no longer displays ProjectCouldNotBeCreated when template apply fails — it delegates to PromptAndChainAsync which just returns the exit code. Update tests from release/13.2 to match: - C# test: expect DotNetTemplateFactory's ProjectCreationFailed message - TypeScript test: just verify non-zero exit code (no error displayed) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Same class of merge issue: test from release/13.2 expected ProjectCouldNotBeCreated error which NewCommand no longer displays on main (replaced by PromptAndChainAsync). Remove the second error assertion since only the aspire-restore failure message is displayed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
🎬 CLI E2E Test Recordings — 51 recordings uploaded (commit View recordings
📹 Recordings uploaded automatically from CI run #23521402749 |
| <TargetFramework>$(DefaultTargetFramework)</TargetFramework> | ||
| <IsPackable>true</IsPackable> | ||
| <SuppressFinalPackageVersion>true</SuppressFinalPackageVersion> | ||
| <DisablePackageBaselineValidation>true</DisablePackageBaselineValidation> |
There was a problem hiding this comment.
We should remember to remove this line once this is in main and update the package baseline to 13.2.0
This PR merges the
release/13.2branch intomainnow that 13.2.0 has been released.