Skip to content

Add Azure portal link for Resource Group in deploy pipeline summary#14434

Draft
Copilot wants to merge 9 commits intomainfrom
copilot/add-link-to-resource-group-summary
Draft

Add Azure portal link for Resource Group in deploy pipeline summary#14434
Copilot wants to merge 9 commits intomainfrom
copilot/add-link-to-resource-group-summary

Conversation

Copy link
Contributor

Copilot AI commented Feb 10, 2026

Description

Adds a clickable Azure portal link to the Resource Group line in the aspire deploy pipeline summary, so users can navigate directly to their resource group after deployment.

The summary value uses markdown link syntax: VNetTest5 ([link](https://portal.azure.com/#@{tenantId}/resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/overview))

Changes:

  • AzureEnvironmentResource.AddToPipelineSummary — Constructs portal URL from provisioning context (subscription ID, resource group name, tenant ID). Only generates the link when both subscription and resource group are known.
  • ConsoleActivityLogger.FormatPipelineSummaryKvp — Now converts markdown in summary values to Spectre clickable links (color mode), strips to plain URLs (non-interactive), or renders text (url) (no-color mode). Class made partial for [GeneratedRegex].
  • ConsoleActivityLoggerTests — Tests for all three rendering paths.

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
    • No
  • Does the change require an update in our Aspire docs?
    • Yes
    • No

💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI changed the title [WIP] Add link to Azure portal for Resource Group summary Add Azure portal link for Resource Group in deploy pipeline summary Feb 10, 2026
Copilot AI requested a review from eerhardt February 10, 2026 20:39
@github-actions
Copy link
Contributor

github-actions bot commented Feb 10, 2026

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 14434

Or

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


// Build resource group value with a portal link when possible
var resourceGroupValue = resourceGroupName;
if (resourceGroupName != "unknown" && subscriptionId != "unknown")
Copy link
Member

Choose a reason for hiding this comment

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

what is unknown

@davidfowl
Copy link
Member

@eerhardt re-target this to 13.2?

joperezr and others added 9 commits February 13, 2026 13:15
…#14424)

* Improve detach mode: fix pipe handle inheritance and unify log naming

* Show child log file path on detach success

* Fix detach: redirect child output to suppress console bleed

* Suppress child console output via --log-file instead of pipe redirection

The previous approach (RedirectStandardOutput=true + close streams) still created
inheritable pipe handles. Instead, keep Redirect=false to avoid pipe inheritance
and have the child process suppress its own console output when --log-file is
specified (the signal that it's a detach child).

* Add DetachedProcessLauncher with native CreateProcess on Windows

Replace Process.Start with platform-specific launcher that suppresses child
output and prevents handle/fd inheritance to grandchildren:

- Windows: P/Invoke CreateProcess with STARTUPINFOEX and
  PROC_THREAD_ATTRIBUTE_HANDLE_LIST (same approach as Docker/hcsshim).
  Child stdout/stderr go to NUL, only NUL handle is inheritable.
- Linux/macOS: Process.Start with RedirectStdout=true + close streams.
  Pipes are O_CLOEXEC so grandchild never inherits them.

Removes the Console.SetOut(TextWriter.Null) workaround from Program.cs.

* Fix misleading O_CLOEXEC comments in Unix launcher

dup2 onto fd 0/1/2 clears O_CLOEXEC, so grandchildren DO inherit the pipe
as their stdio. With the parent's read-end closed, writes produce harmless
EPIPE. Updated comments to accurately describe the Unix fd inheritance model
based on dotnet/runtime pal_process.c source.

* Fix command-line quoting for Windows backslash escaping

* Fix detach log parsing and child log path handling
Co-authored-by: sebastienros <sebastienros@users.noreply.github.com>
* Handle polyglot settings package versions on read path

* Address review feedback for polyglot settings handling

* Encapsulate project-reference mode in apphost projects

* Prevent directory trasversal for release builds

* Fix build
* Use --exact-match in dotnet package search when stagingVersionPrefix is set

   dotnet package search only returns the latest version per package ID,
   so when the shared dotnet9 feed has both 13.2 and 13.3 prerelease
   packages, only 13.3 is returned. The stagingVersionPrefix filter then
   discards it, resulting in "no templates found".

   When VersionPrefix is set on a channel, pass --exact-match to get all
   versions from the feed, enabling the prefix filter to find the correct
   version line. Also update ParsePackageSearchResults to handle the
   "version" JSON field used by --exact-match (vs "latestVersion" in
   normal search).

* Use pinned CLI version for staging channel in shared feed mode

When the staging channel is configured with Prerelease quality and no
explicit feed override, packages are now pinned to the CLI's own version
instead of searching NuGet. This avoids the dotnet package search
limitation where only the latest version per package ID is returned,
which caused version mismatches when the shared feed contains packages
from multiple version lines (e.g. 13.2.x and 13.3.x).

New config flag stagingPinToCliVersion (boolean) controls this behavior.
When enabled alongside overrideStagingQuality=Prerelease:
- Templates (aspire new): synthetic result with CLI version
- Integrations (aspire add): discovers packages then overrides version
- Specific packages (aspire update): synthetic result with CLI version

Also cleans up reverted exact-match parameter plumbing from interfaces
and test fakes.

* Mark staging override settings as internal in JSON schemas

* Add E2E test for staging channel config and channel switching

* Fix E2E test: use correct global settings path (~/.aspire/globalsettings.json)

* Fix E2E test: config get doesn't support -g flag
)

Replace deprecated windows.vs2022preview.amd64 images with
windows.vs2026preview.scout.amd64 in internal pipeline definitions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Standard SKU doesn't work with private endpoints. It needs to be Premium.
When printing the Resource Group in the pipeline summary of `aspire deploy`,
include a clickable link to the Azure portal resource group page.

The link uses the format:
https://portal.azure.com/#@{tenantId}/resource/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/overview

Changes:
- AzureEnvironmentResource.AddToPipelineSummary: construct markdown link for resource group
- ConsoleActivityLogger.FormatPipelineSummaryKvp: convert markdown to Spectre markup for clickable links
- Add ConsoleActivityLoggerTests for the new markdown rendering behavior

Co-authored-by: eerhardt <8291187+eerhardt@users.noreply.github.com>
@eerhardt eerhardt force-pushed the copilot/add-link-to-resource-group-summary branch from 5e2f3e9 to efb3bbd Compare February 13, 2026 23:22
@github-actions
Copy link
Contributor

🎬 CLI E2E Test Recordings

The following terminal recordings are available for commit efb3bbd:

Test Recording
AgentCommands_AllHelpOutputs_AreCorrect ▶️ View Recording
AgentInitCommand_MigratesDeprecatedConfig ▶️ View Recording
Banner_DisplayedOnFirstRun ▶️ View Recording
Banner_DisplayedWithExplicitFlag ▶️ View Recording
CreateAndDeployToDockerCompose ▶️ View Recording
CreateAndDeployToDockerComposeInteractive ▶️ View Recording
CreateAndPublishToKubernetes ▶️ View Recording
CreateAndRunAspireStarterProject ▶️ View Recording
CreateAndRunAspireStarterProjectWithBundle ▶️ View Recording
CreateAndRunJsReactProject ▶️ View Recording
CreateAndRunPythonReactProject ▶️ View Recording
CreateEmptyAppHostProject ▶️ View Recording
CreateStartAndStopAspireProject ▶️ View Recording
CreateStartWaitAndStopAspireProject ▶️ View Recording
CreateTypeScriptAppHostWithViteApp ▶️ View Recording
DoctorCommand_DetectsDeprecatedAgentConfig ▶️ View Recording
DoctorCommand_WithSslCertDir_ShowsTrusted ▶️ View Recording
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted ▶️ View Recording
LogsCommandShowsResourceLogs ▶️ View Recording
PsCommandListsRunningAppHost ▶️ View Recording
ResourcesCommandShowsRunningResources ▶️ View Recording
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannels ▶️ View Recording

📹 Recordings uploaded automatically from CI run #22006256944

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants