Skip to content

Re enable tests#16

Closed
radical wants to merge 0 commit intomainfrom
re-enable-tests
Closed

Re enable tests#16
radical wants to merge 0 commit intomainfrom
re-enable-tests

Conversation

@radical
Copy link
Copy Markdown
Owner

@radical radical commented Aug 28, 2025

Description

Please include a summary of the changes and the related issue. Please also include relevant motivation and context. List any dependencies that are required for this change.

Fixes # (issue)

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
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No
  • Does the change require an update in our Aspire docs?

@github-actions
Copy link
Copy Markdown

🚀 Dogfood this PR with:

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

Or

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

@radical radical force-pushed the main branch 2 times, most recently from 54e0a00 to be01e72 Compare December 15, 2025 00:59
@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine foo

1 similar comment
@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine foo

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine-test foo

@github-actions
Copy link
Copy Markdown

❌ Operation failed. See the workflow run for details.

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine-test foo

@github-actions
Copy link
Copy Markdown

❌ Operation failed.

See the workflow run for full details.

2 similar comments
@github-actions
Copy link
Copy Markdown

❌ Operation failed.

See the workflow run for full details.

@github-actions
Copy link
Copy Markdown

❌ Operation failed.

See the workflow run for full details.

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine-test foo

@github-actions
Copy link
Copy Markdown

❌ Operation failed.

Error: /quarantine-test requires at least one test name and an issue URL.

See the workflow run for full details.

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine-test foo https://google.com

@github-actions
Copy link
Copy Markdown

❌ Operation failed.

Error: Invalid test name format: "foo". Expected format: Namespace.Type.Method

See the workflow run for full details.

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine-test Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorContinuesRunningWhenProcessAliveWithCorrectStartTime https://foo.com

@github-actions
Copy link
Copy Markdown

⏳ Started quarantine operation for Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorContinuesRunningWhenProcessAliveWithCorrectStartTime... (workflow run)

@github-actions
Copy link
Copy Markdown

❌ Quarantine failed.

See the workflow run for full details.

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine-test Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorContinuesRunningWhenProcessAliveWithCorrectStartTime https://foo.com/

@github-actions
Copy link
Copy Markdown

⏳ Started quarantine operation for Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorContinuesRunningWhenProcessAliveWithCorrectStartTime... (workflow run)

@github-actions
Copy link
Copy Markdown

ℹ️ No changes were needed. The test(s) may already be in the desired state.

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine-test Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid https://foo.com/

@github-actions
Copy link
Copy Markdown

⏳ Started quarantine operation for Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid... (workflow run)

@github-actions
Copy link
Copy Markdown

✅ Quarantine operation completed! Created PR #17: #17

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/unquarantine-test Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorContinuesRunningWhenProcessAliveWithCorrectStartTime

@github-actions
Copy link
Copy Markdown

⏳ Started unquarantine operation for Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorContinuesRunningWhenProcessAliveWithCorrectStartTime... (workflow run)

@github-actions
Copy link
Copy Markdown

✅ Unquarantine operation completed! Created PR #18: #18

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine-test Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid https://foo.com/

@github-actions
Copy link
Copy Markdown

@radical ❌ Quarantine failed.

Error:

MSBUILD : error MSB1009: Project file does not exist.
The build failed. Fix the build errors and run again.

See the workflow run for full details.

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine-test Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid https://foo.com/

@github-actions
Copy link
Copy Markdown

⏳ Started quarantine operation for Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid (will push to PR #16)... (workflow run)

@github-actions
Copy link
Copy Markdown

@radical ❌ Quarantine failed.

Error:

MSBUILD : error MSB1009: Project file does not exist.
The build failed. Fix the build errors and run again.

See the workflow run for full details.

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine-test Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid https://foo.com/

@github-actions
Copy link
Copy Markdown

⏳ Started quarantine operation for Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid (will push to PR #16)... (workflow run)

@github-actions
Copy link
Copy Markdown

@radical ❌ Quarantine failed.

Error:

MSBUILD : error MSB1009: Project file does not exist.
The build failed. Fix the build errors and run again.

See the workflow run for full details.

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine-test Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid https://foo.com/

@github-actions
Copy link
Copy Markdown

⏳ Started quarantine operation for Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid (will push to PR #16)... (workflow run)

@github-actions
Copy link
Copy Markdown

@radical ❌ Quarantine failed.

Error:

MSBUILD : error MSB1009: Project file does not exist.
The build failed. Fix the build errors and run again.

See the workflow run for full details.

@radical radical closed this Dec 15, 2025
@radical radical deleted the re-enable-tests branch December 15, 2025 07:06
@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/unquarantine-test Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid --target-pr #21

@github-actions
Copy link
Copy Markdown

⏳ Started unquarantine operation for Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid (will push to PR #21)... (workflow run)

@github-actions
Copy link
Copy Markdown

✅ Unquarantine operation completed! Updated PR #21: #21

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine-test Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid https://foo.com/

@github-actions
Copy link
Copy Markdown

@radical ❌ Quarantine failed.

See the workflow run for full details.

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/quarantine-test Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid https://foo.com/

@github-actions
Copy link
Copy Markdown

@radical ❌ Quarantine failed.

Error: PR #16 is closed. Can only push to open PRs.

See the workflow run for full details.

@radical
Copy link
Copy Markdown
Owner Author

radical commented Dec 15, 2025

/disable-test Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid https://foo.com/ --target-pr #21

@github-actions
Copy link
Copy Markdown

⏳ Started disable operation for Aspire.Cli.Tests.CliOrphanDetectorTests.CliOrphanDetectorFallsBackToPidOnlyWhenStartTimeInvalid (will push to PR #21)... (workflow run)

@github-actions
Copy link
Copy Markdown

✅ Disable operation completed! Updated PR #21: #21

radical added a commit that referenced this pull request Apr 15, 2026
…t#15995)

* Wrap script execution in main() with BASH_SOURCE guard

Enable sourcing get-aspire-cli.sh and get-aspire-cli-pr.sh to load
function definitions without executing the main flow. This is required
for unit-testing individual script functions in isolation.

Also initialize `local config_file=""` to prevent unbound-variable
errors under `set -u` when no shell config file is found.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Consolidate ProcessExtensions into Aspire.TestUtilities

Move ProcessExtensions from Infrastructure.Tests (internal) to
Aspire.TestUtilities (public) so it can be shared by the new
acquisition test project. Update Infrastructure.Tests to reference
the shared version. Simplify CommandResult and ToolCommandException
to use primary constructors.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Surface PR metadata and GH_TOKEN for Acquisition tests in CI

Extend the existing requiresCliArchive token/metadata exports to also
trigger when testShortName == 'Acquisition', so integration tests can
access GitHub API when run as outerloop.

Remove unrelated create-failing-test-issue.* entry from CI trigger
skip-list.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add Aspire.Acquisition.Tests with 160 tests for CLI scripts

New test project covering get-aspire-cli.sh, get-aspire-cli-pr.sh,
and their PowerShell equivalents. Tests are organized in tiers:

- Function-level tests (ScriptFunctionCommand): source a script and
  call individual functions in isolation — URL construction, platform
  detection, input validation, shell profile handling, archive ops.

- Script-level tests (ScriptToolCommand): run full scripts with mock
  gh CLI and --dry-run to validate end-to-end parameter handling.

- Piped install tests (ScriptHostFixture): serve scripts over HTTP
  and test curl|bash and irm|iex patterns against a real pipe.

- Integration tests (RealGitHubPRFixture): query real GitHub PRs
  with --dry-run, gated behind OuterloopTest + Category=integration.

Test infrastructure:
- TestEnvironment: isolated temp dirs with mock HOME
- FakeArchiveHelper: generates tar.gz/zip with .sha512 sidecars
- Mock gh CLI: canned JSON for pr/run/api commands

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: iex quoting for Windows + add timeouts to piped install tests

Fix Windows test failures where double quotes in ProcessStartInfo.Arguments
were consumed as argument delimiters by MSVCRT command-line parser. Wrap the
entire iex expression in outer quotes with escaped inner quotes so they
survive as literal characters for pwsh -Command.

Add 60-second timeouts to all piped install tests to prevent CI hang dumps.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: quote bash -c args and add -Help to PR script

Fix macOS test failures where .NET's ProcessStartInfo.Arguments parser
splits compound bash -c commands on spaces. Wrap the entire command
string in quotes so it stays as a single argv entry.

Add missing -Help switch parameter to get-aspire-cli-pr.ps1 (the release
script has it but the PR script was missing it, causing iex test to fail
with 'parameter not found').

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix missing disposal of ScriptToolCommand in PR script tests

Add 'using' to all CreateCommandWithMockGhAsync call sites to ensure
ToolCommand.Dispose() is called, which kills any running process.
Without disposal, hung processes could accumulate under CI contention.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address review feedback: mock gh api fidelity and XDG_CONFIG_HOME isolation

1. Mock gh api now returns endpoint-aware responses instead of always
   returning {}. PR endpoint returns a realistic SHA, workflow endpoint
   returns a realistic run ID. When --jq is present, returns the
   pre-extracted value; otherwise returns the full JSON structure.
   This ensures tests actually validate the PR lookup contract.

2. Override XDG_CONFIG_HOME in both ScriptFunctionCommand and
   ScriptToolCommand to prevent bash scripts that consult
   ${XDG_CONFIG_HOME:-$HOME/.config} from reading real profile files
   outside the test's temp home on developer machines with
   XDG_CONFIG_HOME set.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix milestone workflow: restore permissions and update to github-script v9 (microsoft#16174)

- Restore pull-requests: write permission (required by the Issues API
  when updating PR resources, confirmed by 403 error in run #24421110155)
- Update actions/github-script from v7.0.1 (Node.js 20) to v9.0.0
  (Node.js 24) to avoid the June 2026 Node.js 20 deprecation

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Clarify dashboard clear telemetry labels (microsoft#16128)

* Rename describe endpoints column to URLs (microsoft#16144)

* Bump next in /extension in the npm_and_yarn group across 1 directory (microsoft#16041)

Bumps the npm_and_yarn group with 1 update in the /tests/Aspire.Cli.EndToEnd.Tests/Fixtures/JsPublish/nextjs directory: [next](https://github.com/vercel/next.js).


Updates `next` from 15.5.14 to 15.5.15
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](vercel/next.js@v15.5.14...v15.5.15)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 15.5.15
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix pr-docs-check docs PR flow (microsoft#16149)

* Fix pr-docs-check docs PR flow

Gate the workflow on significant user-facing changes and only draft aspire.dev documentation PRs when there is a clear docs gap.

Recompile the workflow with gh aw v0.68.1, refresh the shared action lock, and restore the required safe_outputs checkout override for microsoft/aspire.dev under _repos/aspire.dev so cross-repo draft PR creation can switch repositories correctly.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix pr-docs-check source-only checkouts

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address PR microsoft#15995 review feedback

- Remove Acquisition-specific GH_TOKEN injection from run-tests.yml (#14)
- Rename s_-prefixed test classes to PascalCase (#15)
- Add retry loop for TOCTOU port race in ScriptHostFixture (#16)
- Add missing [RequiresTools(["pwsh"])] attributes (#17)
- Add default 60s timeout to ScriptToolCommand/ScriptFunctionCommand (#18)
- Fix CTS disposal in PowerShellCommand and NodeCommand (#19/#20)
- Move ToolCommandException into Aspire.Templates.Tests namespace (#21)
- Expand comment on broad readonly override in bash sourcing (#22)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Jose Perez Rodriguez <joperezr@microsoft.com>
Co-authored-by: Adam Ratzman <adam@adamratzman.com>
Co-authored-by: James Newton-King <james@newtonking.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
radical added a commit that referenced this pull request May 4, 2026
Channel is a property of the binary itself, set at build time from the same
DotNetFinalVersionKind + branch logic the AzDO pipeline already runs. Route
is install-time and known only by the packager wrapping the binary. v3
conflated the two by putting both in the sidecar, which made channel switch
look like a JSON edit and made cross-route channel contamination a sidecar
concern rather than a structural impossibility.

This revision:

- Bakes channel into [AssemblyMetadata("AspireCliChannel")] (Change #15)
  and adds build-side verification that the produced binary's metadata
  matches the pipeline's installerChannel variable (Change #16). Install
  scripts and the running CLI trust the bytes they got; mismatches are
  caught in CI, not at install time.
- Removes 'channel' and 'prNumber' from the .aspire-route.json shape. The
  sidecar is uniform across routes: { route, selfUpdate }. PR number is
  parsed from the binary's InformationalVersion (e.g. 0.0.0-pr12345.<sha>)
  rather than duplicated in JSON.
- Splits Change #2 into #2a (RouteDetector reads sidecar, AOT JSON) and
  #2b (ChannelReader reads assembly metadata, no JSON, AOT-trivial).
- Splits Change #8 into #8a (delete the write-mostly global identity-channel
  field in ~/.aspire/aspire.config.json) and #8b (project-scoped channel
  preference next to the AppHost stays as-is; the seven readers don't move,
  only the seed source for new projects becomes baked AspireCliChannel).
- Reframes §3.4 to distinguish global CLI-identity channel (going away) from
  per-project channel preference (kept). A stable CLI with a daily-pinned
  project is a normal scenario, not a bug.
- Updates §2.5 (G1) to anchor channel binding on immutable assembly metadata
  and explicitly note the two-file separation.
- Reorders phases so build-side channel bake + verify lands first as a
  forward-compatible no-op before any reader exists.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
radical added a commit that referenced this pull request May 5, 2026
…covery

Address blockers from parallel review (rubber-duck, installer-arch
audit, code-vs-design alignment):

* Two layout modes: Mode A 'prefix/bin/aspire' for routes where the
  user adds bin/ to PATH (script, pr); Mode B 'prefix/aspire' for
  routes where the package manager owns the prefix and exposes the
  binary itself (winget, brew, dotnet-tool). Mode is determined at
  startup by sidecar location, not by a hardcoded table.

* dotnet-tool route uses Mode B at the *store path* (not at the SDK's
  copy at ~/.dotnet/tools/aspire). Store path is computed from
  package-id (constant), version (assembly), TFM (constant), RID
  (RuntimeInformation). Resolves the F1 blocker: native AOT shim
  semantics meant Process.MainModule.FileName returned the SDK copy,
  not the published files; mode discovery now special-cases this via
  step 3c using the existing IsGlobalDotNetToolShimPath detection.

* One bare archive shape works for all routes (no bin/ inside the
  archive). The script's choice of extract location is what creates
  Mode A. Drops the multiple-flavored-archive concern raised in the
  alignment review.

* Move 'aspire which' to phase 4 (alongside the new --self gating)
  per the invariants doc requirement that route introspection is not
  optional UX.

* Soften §2.6 wording: rename-then-replace is the standard Windows
  pattern, not 'atomic'. Add per-prefix .locks/self-update.lock to
  prevent two simultaneous --self invocations from racing.

* Soften reparse flip wording: 'lock-protected' rather than 'atomic'
  on Windows (per ReparsePoint.cs:72-79).

* Change #15 corrected: AzDO today emits 2-way installerChannel
  (stable/prerelease) from DotNetFinalVersionKind only; the new
  MSBuild logic *expands* to 4-way (stable/staging/daily/pr) using
  branch + DotNetFinalVersionKind, not consolidates. Audit needed
  for downstream AzDO consumers.

* Change #16 corrected: native AOT publish output isn't a managed
  PE+ assembly, so reading [AssemblyMetadata] externally is
  non-trivial. Use a hidden '--print-channel' flag on the binary
  itself for build-side verification.

* Winget Scope: user (prevent admin-machine installs landing in
  read-only %PROGRAMFILES% which would break runtime extraction).

* Update the dotnet-tool layout: TFM is net10.0 (not 'any');
  binary stays at root of tools/net10.0/<rid>/ (no bin/ subdir).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
radical added a commit that referenced this pull request May 5, 2026
Top-level plan that carves agreed-design-v3.md into 4 mandatory PRs plus
1 optional follow-up. Lists which design changes (#1-#16) each PR carries
and shows their dependencies. Per-PR design details (acceptance criteria,
test list, file inventory) to be fleshed out in follow-up sections.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
radical added a commit that referenced this pull request May 5, 2026
Flesh out the v3 PR grouping into per-PR implementation docs under
docs/specs/acquisition/v3-prs/, ready for handoff to the Squad agent.

Per-PR docs (5 new files):
- pr1-identity-primitives.md   (coarse) - build-side primitives, no CLI behavior change
- pr2-identity-aware-cli-fix.md (fine + 16-step Squad checklist) - the bug fix PR
- pr3-bundle-layout.md          (fine + 11-step Squad checklist) - BundleService Mode A/B
- pr4-schema-cleanup.md         (coarse) - delete global channel field, reseed default
- pr5-toolchain-prune.md        (coarse, DEFERRED) - optional manual cleanup command

Each per-PR doc includes: design changes delivered (with §4 citations),
in/out scope, file inventory (Add/Modify/Delete with real repo paths),
acceptance criteria, test plan (per-test-file rewrite/delete/keep status),
validation/dogfooding steps for the PR description, and risks.

Resolved 11 open design items in this planning round (recorded in the
grouping doc's 'Resolved decisions' table):
- Sidecar renamed .aspire-route.json -> .aspire-install.json
- aspire which: human + --json; always exit 0 (don't break pipes)
- dotnet-tool --tool-path: ship low-fidelity global hint
- Channel field deletion: single-release, read-tolerant via default
  System.Text.Json behavior
- Change #16 (AzDO --print-channel verification) WITHDRAWN; replaced by
  one xunit smoke test in tests/Aspire.Cli.Tests/
- Brew zap target dropped entirely
- PR-script PATH discoverability: print PATH+= hint at end of install
- PR3 reparse-flip codepath KEPT (per v3.2 team brief)
- aspire toolchain prune --days default = 14
- Scaffolding silent baked-channel default (release-notes call-out)
- Acquisition/ stub split: PR2 rewrites 5 stubs that map to v3 readers
  and deletes 8 v2-only abstractions; PR4 deletes the remaining 3
  (AutoUpdatePolicy, UninstallService, ToolchainEnumerator); test
  fixtures rewritten to a sidecar-based model

Companion edits:
- agreed-design-v3.md: applied sidecar rename, recorded all open-question
  resolutions in §5, marked Change #16 withdrawn (3 references now consistent),
  redirected §4.1 phase order to the per-PR docs
- agreed-design-v3-pr-grouping.md: promoted to top-level index linking the
  per-PR docs; replaced 'Open per-PR design items' section with 'Resolved
  decisions' table
- agreed-design-v3.1-delivery-plan.md: added superseded header (body intact
  as historical record)
- v3.2-team-brief.md: sidecar rename only (newly tracked)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
radical added a commit that referenced this pull request May 5, 2026
Earlier framing said csproj would compute the 4-way AspireCliChannel
'independently' from $(DotNetFinalVersionKind) + branch, with no AzDO
YAML edits. That doesn't actually work — MSBuild can't natively read
Build.SourceBranch or Build.Reason without environment-variable
plumbing, and duplicating branch detection in csproj would diverge
from the existing logic in eng/pipelines/common-variables.yml and
azure-pipelines.yml that already handles release/* + internal/release/*.

Corrected story:
- AzDO YAML adds a small additive pwsh step (parallel to today's
  computeChannel step at azure-pipelines.yml:375-393) that computes the
  4-way value: PR ⇒ pr; StabilizePackageVersion ⇒ stable; release/*
  branch ⇒ staging; main ⇒ daily; else daily. Exports as a pipeline
  output variable.
- Build invocation passes /p:AspireCliChannel=$(aspireCliChannel).
- csproj has a local-dev fallback: <AspireCliChannel Condition="...">daily
  </AspireCliChannel> so local builds Just Work without override.
- Existing 2-way installerChannel variable is unchanged for its existing
  ne(installerChannel, 'stable') consumers.

Also clarifies that 'no AzDO YAML changes' in resolved-decision E was
about Change #16 (the withdrawn verification step), not about Change #15
(the bake step, which does need a small additive YAML edit).

The 4-way value-set is the existing PackageChannelNames taxonomy
(Stable, Staging, Daily) plus the new pr — same strings the CLI already
uses for project-channel resolution.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
radical added a commit that referenced this pull request May 6, 2026
…aging,daily,pr})

Adds a stricter smoke test alongside CliMetadataPackagingTests (which only
checks presence + non-empty). This test asserts the AspireCliChannel
assembly metadata value is one of the expected enum values: stable,
staging, daily, pr.

Replaces the withdrawn Change #16 AzDO post-pack verification: catches any
case where MSBuild fails to set AspireCliChannel correctly (CI
misconfiguration that defaults to empty or invalid values).

Pure assembly reflection — no filesystem, env vars, or external services.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

1 participant