[release/13.2] Update CI image from 1es-mariner-2 to build.azurelinux.3.amd64 (backport #15330)#15657
Closed
[release/13.2] Update CI image from 1es-mariner-2 to build.azurelinux.3.amd64 (backport #15330)#15657
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>
The describe command was passing BaseUrlWithLoginToken (e.g., http://localhost:18888/login?t=token) directly to the resource snapshot mapper, producing broken dashboard URLs like http://localhost:18888/login?t=token/?resource=redis. Reuse TelemetryCommandHelpers.ExtractDashboardBaseUrl to strip the /login?t=... path before combining with resource URLs.
Agent-Logs-Url: https://github.com/microsoft/aspire/sessions/6a2f1f41-1660-4e0c-8d21-9fb0061809aa Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: joperezr <13854455+joperezr@users.noreply.github.com>
… linux-arm64, linux-musl-x64) (#15529) * Fix cross-compiled bundles missing DCP for win-arm64, linux-arm64, linux-musl-x64 Bundle.proj's _RestoreDcpPackage target now maps TargetRid to BuildOs/BuildArch and passes them to the AppHost restore, ensuring the correct DCP NuGet package is downloaded for the target platform instead of the build machine's platform. CreateLayout now throws when DCP is not found instead of silently producing a broken bundle that would fail layout validation at runtime. Co-authored-by: davidfowl <95136+davidfowl@users.noreply.github.com> Agent-Logs-Url: https://github.com/microsoft/aspire/sessions/a71f0181-f863-4d63-b275-47c8eb198dee * Add validation for unrecognized RID patterns and document supported format Co-authored-by: davidfowl <95136+davidfowl@users.noreply.github.com> Agent-Logs-Url: https://github.com/microsoft/aspire/sessions/a71f0181-f863-4d63-b275-47c8eb198dee --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: davidfowl <95136+davidfowl@users.noreply.github.com>
…r winget CLI (#15541) * Enable CFSClean policies and use dotnet-public feed for winget CLI - Add networkIsolationPolicy: Permissive, CFSClean, CFSClean2 to the 1ES official pipeline template parameters - Switch winget CLI installation from PSGallery to dotnet-public Azure Artifacts feed to comply with CFSClean network restrictions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update eng/pipelines/templates/prepare-winget-manifest.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update eng/pipelines/azure-pipelines.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Matt Mitchell (.NET) <mmitche@microsoft.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Ankit Jain <radical@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
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 for the stabilized 13.2.0 release build. Co-authored-by: Mitch Denny <mitch@mitchdeny.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…n Windows (#15559) * Backport NpmRunner and SigstoreNpmProvenanceChecker changes from mad-skills * Clean up empty .playwright directory after skill installation * Add missing IsAvailable property to test INpmRunner implementations
* Handle brownfield TypeScript aspire init Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Use local tsx and semver-safe dependency merges Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Pre-add JavaScript hosting for brownfield init Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Incorporate release/13.2 ESLint and tsconfig.apphost.json updates - Update ts-starter template package.json build/watch scripts to use tsconfig.apphost.json - Add eslint.config.mjs scaffolding, ESLint deps, and engines constraint to CreatePackageJson - Add aspire:lint script to brownfield scaffolding - Update dependency versions to match release/13.2 baseline - Update test assertions for new dependency versions and eslint Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add CLI-side package.json merge for brownfield safety When aspire init is run on an existing JS/TS codebase, the scaffold RPC server returns package.json content that may not include brownfield merge logic (depending on the server package version loaded). This adds a safety net in the CLI's ScaffoldingService that deep-merges the scaffold output with the existing package.json on disk. The merge preserves all existing properties (name, version, scripts, dependencies) and only adds new properties from the scaffold. For nested objects like scripts and dependencies, existing values are never overwritten — only missing entries are added. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Extract PackageJsonMerger with smart script conflict handling Extract the package.json merge logic from ScaffoldingService into a dedicated PackageJsonMerger class with conflict-aware script handling. When scaffold scripts conflict with existing user scripts, they are added under the aspire: namespace prefix (a standard npm convention). For aspire:X scripts with no non-prefixed X equivalent, a convenience alias is added (e.g. "start": "npm run aspire:start"). This ensures all Aspire scripts are always present in the merged output regardless of whether existing scripts use the same names, and works correctly with both the updated server (aspire: prefixed) and stale server (non-prefixed) package versions. Also updates ts-starter template to consistently use aspire: prefixed scripts as canonical names with non-prefixed convenience aliases. Includes 14 unit tests covering conflicts, aliases, dependencies, edge cases, idempotency, and both stale/updated server scenarios. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add semver-aware dependency merging via shared NpmVersionHelper - Create src/Shared/NpmVersionHelper.cs with TryParseNpmVersion and ShouldUpgrade methods, file-linked into both Aspire.Cli and Aspire.Hosting.CodeGeneration.TypeScript - Update PackageJsonMerger.MergeDependencySection to upgrade existing deps when scaffold version is strictly newer (semver comparison) - Unparseable ranges (||, workspace:*, file:, link:) are preserved - Refactor TypeScriptLanguageSupport to use shared helper, removing ~50 lines of duplicated private methods - Add 6 new unit tests for semver-aware merging scenarios - Update 2 existing tests to reflect new upgrade-when-newer behavior Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Harden PackageJsonMerger and deduplicate E2E helpers - Add type guards (JsonValue + TryGetValue) before GetValue<string>() in MergeScripts and MergeDependencySection to prevent InvalidOperationException on non-string JSON values - Bump merge failure log level from Debug to Warning for visibility - Extract PrepareLocalChannel helper from TypeScriptPolyglotTests and TypeScriptStarterTemplateTests into shared CliE2ETestHelpers - Add 8 new robustness tests: non-string scripts, non-string deps, array dep section, JSON root as array, *, latest, pre-release version comparison Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add explicit engines.node overwrite and array property guard - Add MergeEngines() that overwrites engines.node with the scaffold's required Node version constraint (needed for ESLint 10 compatibility). Other engines sub-keys (e.g., npm) are preserved from existing. - Add guard in MergeObjects that throws InvalidOperationException if the scaffold template contains an array property — ensures developers add explicit merge logic rather than silently dropping data via DeepMerge. - Let InvalidOperationException propagate through the outer catch (it indicates a programming error, not a runtime merge failure). - Use 'as JsonObject' instead of .AsObject() to safely handle non-object JSON roots without throwing. - Add 4 new tests: engines overwrite, other keys preserved, engines added when missing, array property throws. - Update PreservesNonScriptProperties test for new engines behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix unicode escape in engines.node constraint on server side TypeScriptLanguageSupport used default JsonSerializerOptions which encodes >= as \u003E=. Add UnsafeRelaxedJsonEscaping (same as PackageJsonMerger) so the engines.node value is written as literal >=24 in the generated package.json. Add assertion to verify no unicode escapes appear in the raw scaffold output. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR review findings: internal visibility, private:true, engines for brownfield, LoadExisting hardening - Revert TypeScriptLanguageSupport from public to internal - Add private:true to greenfield scaffold output - Move engines.node outside greenfield-only block so brownfield also gets it - Harden LoadExistingPackageJson with try-catch for malformed JSON - Fix duplicate <summary> XML doc in TypeScriptStarterTemplateTests - Add brownfield engines.node and private assertions to tests Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address James' review: indent, logger, JSON tolerance, split try/catch, log style - Explicitly set 2-space indent (npm standard) with explanatory comment - Make logger non-nullable; tests use NullLogger.Instance - Add JsonCommentHandling.Skip + AllowTrailingCommas for real-world package.json - Split Merge into parse phase and merge phase with separate try/catch blocks - End log messages with periods (style convention) - Add test for package.json with comments and trailing commas Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix array property merge crash for brownfield npm init The PackageJsonMerger threw InvalidOperationException when encountering array properties like 'keywords' in the existing package.json. These arrays get echoed through the server-side scaffold and both sides have them during merge. Instead of throwing, preserve the existing array (existing-wins semantics) and add scaffold-only arrays. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address remaining review feedback: migration, double-merge, EnsureObject logging - Add RuntimeSpec.MigrationFiles and auto-create tsconfig.apphost.json on first run for existing 13.2.0 projects (fixes tsconfig breaking change) - Remove LoadExistingPackageJson; scaffold now produces Aspire-only content so CLI-side PackageJsonMerger handles all merging (fixes double-merge ordering dependency) - Thread ILogger through PackageJsonMerger internals; EnsureObject now logs a warning when replacing non-object values (fixes silent data loss) - Add comprehensive tests for all three fixes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address review nits: non-nullable EnsureObject logger, GuestRuntime test helper - Make EnsureObject logger parameter non-nullable (consistent with Merge) - Add CreateRuntime helper to GuestRuntimeTests with ITestOutputHelper logging for better debuggability on test failures - Replace all NullLogger.Instance usages with the test logger 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>
…15598) * Add rebuild guidance to Aspire skill for per-resource code changes Update the skill content to teach agents when to restart the AppHost vs rebuild a single resource vs do nothing: - AppHost code changed → aspire start (full restart) - Compiled resource changed (C#, Go, etc.) → aspire resource <name> rebuild - Interpreted resource (JS, Python) → no action (file watchers handle it) Add 'aspire resource <resource> rebuild' to the CLI command reference table and reinforce the rule in Important rules section. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Soften interpreted resource guidance per review feedback Acknowledge that not all JS/Python resources run in watch mode — suggest restarting the resource if no file watcher is configured. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Scope rebuild command to .NET project resources only Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add aspire describe --format Json hint for command discovery Agents can check which commands a resource supports before attempting rebuild, since it is only available on .NET project resources. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Nudge agents to use aspire docs search instead of NuGet XML docs Users report Copilot digging through NuGet package caches for XML doc files instead of using the built-in aspire docs search/get commands. Add an explicit rule telling agents to never search local package folders for Aspire documentation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Soften docs rule to prefer instead of hard block Use medium-freedom 'prefer X over Y' pattern instead of 'Do NOT' for documentation lookup guidance. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…t trace IDs (#15613) * Simplify TelemetryApiService.GetTrace and support short trace IDs - Use TelemetryRepository.GetTrace instead of fetching all traces - Add early return in GetTraceUnsynchronized for IDs shorter than ShortenedIdLength - Add parameterized unit test for full, short, and nonexistent trace IDs * Use hex constant in GetTrace test for explicit trace ID relationship * Remove early return for short trace IDs in GetTraceUnsynchronized MatchTelemetryId already handles short IDs correctly with exact equality fallback, so the guard was preventing valid exact-match lookups. * Clean up
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When running 'aspire new' from the VS Code extension, OpenEditor was called immediately after template creation, which opened the new workspace and severed the CLI terminal connection before the 'configure AI agent environments' prompt could be shown. Move OpenEditor to after PromptAndChainAsync so the full CLI interaction completes before the workspace switches. Fixes #15551
…et (#15586) * Allow filtering endpoints from the default reference set (#15558) * Allow filtering endpoints from the default reference set * Update snapshots for codegen * Update the property to ExcludeReferenceEndpoint and make it false by default * Update test snapshot with outdated containerApps API version * release/13.2 --version check returns 13.2.1 now
* Fix guest apphost launch profile env propagation Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Reuse launch profile env values Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Export more importable ATS hosting APIs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Remove legacy polyglot settings files Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Unionize Foundry capability host export Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Unify addContainer ATS overloads Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Refresh generated TS SDKs for addContainer union Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Regenerate polyglot codegen snapshots Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address review feedback Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Clarify TypeScript reference environment options Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Hide generated parameter ATS helper Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Remove stale addContainer remark Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix Go polyglot keyword escaping Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix polyglot validation regressions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Preserve connection property ATS alias Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Refresh polyglot codegen snapshots Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…fig.json (#15526) * Fix migration from .aspire/settings.json to aspire.config.json When the AppHost was found from legacy .aspire/settings.json, the UseOrFindAppHostProjectFileAsync method returned early without calling CreateSettingsFileAsync, so the migration to aspire.config.json never triggered. This fix ensures CreateSettingsFileAsync is called when createSettingsFile is true and the AppHost is found from settings. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix migration test to use correct relative path Address Copilot review feedback: compute appHostPath relative to .aspire/ directory (not workspace root), normalize to forward slashes, and add a decoy project to ensure the legacy-settings resolution path is actually exercised rather than falling through to directory scanning. 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>
….3.amd64 (#15330) Agent-Logs-Url: https://github.com/microsoft/aspire/sessions/ac46e493-5cd8-46f6-b032-96ff7fe82159 Co-authored-by: radical <1472+radical@users.noreply.github.com>
Co-authored-by: radical <1472+radical@users.noreply.github.com>
Member
|
Already fixed in #15656 ! |
Copilot stopped work on behalf of
radical due to an error
March 27, 2026 21:03
Copilot created this pull request from a session on behalf of
radical
March 27, 2026 21:03
View session
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
1es-azurelinux-3→build.azurelinux.3.amd64ineng/pipelines/templates/build_sign_native.yml1es-mariner-2which also needs updating tobuild.azurelinux.3.amd64main— a maintainer needs to change the base branch torelease/13.2📍 Connect Copilot coding agent with Jira, Azure Boards or Linear to delegate work to Copilot in one click without leaving your project management tool.