Repository navigation
[release/17.0] build: unify bundle build, publish and packaging in MSBuild - #22016
Mitch Denny (mitchdenny) wants to merge 1 commit into
Conversation
## Description GitHub Actions and Azure Pipelines carry separate publish, signing, and packaging steps for the same native bundle. This PR consolidates that work in `eng/Bundle.proj`, so both CI systems use one implementation instead of growing parallel lists of workflow and pipeline steps. The shared MSBuild flow publishes the components, signs prepared outputs, assembles the embedded bundle, and builds and packages the native CLI. Callers supply their RID, version, configuration, and signing mode; component reuse and the ordering of those operations stay in the shared build. CreateLayout accepts explicit prepared component paths so assembly uses the intended payload and fails on invalid explicit inputs. Components are signed before embedding, and the CLI is signed before distribution packaging. Official Assemble signs the three Linux Dashboard NuGet containers and stages the four producer-signed Windows/macOS containers without modifying them. ### Validation Validation head: `97719af00186e44771ca776dd6871d621eea68f0`. GitHub CI/native hosting tested merge `e6b1aae613675bb356325fc2133b08c539805c94`, whose parents are this head and target `100acc9` and whose source tree matches the head. Official and standalone builds pinned the exact head. Upstream main subsequently advanced to `be803a1`. A fresh merge-tree check found no conflicts with this head, without changing the branch, index, or worktree. Integration with that newer base has not been rebuilt or retested; the runs below cover the explicitly identified baseline. **CI, native hosting, real signing, and independent artifact checks passed. The standalone full-solution build failed, and a broader local coordinator test run was incomplete; validation is not all green.** | Check | Result | |---|---| | Focused layout, bundle wrapper, tray, routing, native-publishing, and retry tests | **741 passed**, zero failed/skipped; macOS 27.2 ARM64, SDK `11.0.100-rc.2.26504.105` | | Incoming IDE-capability tests | **3 passed**, zero failed/skipped | | [GitHub CI](https://github.com/microsoft/aspire/actions/runs/41960698568) | **Passed on attempt 1**; 443 successful jobs, 3 skipped, 446 total. All **115 standard test-runner native-archive consumers** passed; another 53 extension/polyglot and 2 installer consumers also passed. | | [Native hosting](https://github.com/microsoft/aspire/actions/runs/41960699040) | **Passed**; Linux native AOT/generated SDK, IPC, CLI, Docker/DCP, Dashboard, Compose and cleanup scenarios; **81/81 Windows product/named-pipe tests** | | [Official signed build 3126923](https://dev.azure.com/dnceng/internal/_build/results?buildId=3126923) | **Succeeded**, all six stages; seven producer logs and Assemble ordering inspected; **159 final Microsoft Author-signed NuGet release packages** verified in the pipeline | | Downloaded GitHub products | **Passed**, six RID sets; **26 stable artifact IDs**, archive/tool/npm binary equality, Dashboard NuGet/runtime equality, architecture/permissions, ZIP integrity, and installer hashes | | Downloaded official products | **Passed**, seven RID sets; manifest reconciliation of **159 NuGets/49 blobs**, nine SHA512 sidecars and installer hashes; **7/7 independent Dashboard NuGet signature verifications**; **3 Linux payloads preserved and 4 producer-signed containers unchanged** | | [Standalone full build/pack](https://github.com/radical/aspire/actions/runs/41960989760) | **Failed** with CS0618 in the AzureApiManagement playground AppHost. Independent default Bundle diagnostics passed: native CLI, extraction/repeat setup, **144 package ZIP/version checks**, Dashboard HTTP, and TerminalHost RPC/cleanup. | GitHub product version: `17.0.0-pr.21304.g97719af0`. Official product version: `17.0.0-preview.1.26554.21`. Detailed execution, artifact, failure, review, and limitation evidence: [validation report](#21304 (comment)). Focused infrastructure command - **passed, 741/741**: ```bash TMPDIR=/tmp DOTNET_ROOT="$PWD/.dotnet" MSBUILDTERMINALLOGGER=false \ ./.dotnet/dotnet test \ --project tests/Infrastructure.Tests/Infrastructure.Tests.csproj \ --no-launch-profile -- \ --filter-class '*.CreateLayoutTests' \ --filter-class '*.TrayBundleTests' \ --filter-class '*.AutoRerunTransientCiFailuresTests' \ --filter-class '*.Hex1bNativePublishingTests' \ --filter-class '*.BundleBuildWrapperTests' \ --filter-class 'Infrastructure.Tests.TestTriggerMap.*' \ --filter-not-trait 'quarantined=true' \ --filter-not-trait 'outerloop=true' ``` Incoming IDE-capability command - **passed, 3/3**: ```bash TMPDIR=/tmp DOTNET_ROOT="$PWD/.dotnet" MSBUILDTERMINALLOGGER=false \ ./.dotnet/dotnet test \ --project tests/Aspire.Hosting.Dotnet.Tests/Aspire.Hosting.Dotnet.Tests.csproj \ --no-launch-profile -- \ --filter-method '*.DebugSessionWithoutProjectCapabilityCoordinatesBuildForProcessLaunches' \ --filter-method '*.ExternalBuildDebugSessionCreatesCoordinatedBuild' \ --filter-not-trait 'quarantined=true' \ --filter-not-trait 'outerloop=true' ``` ### Call-outs - The standalone harness's `SkipNativeBuild=true ./build.sh --build --pack -c Release` failed because `AddProject<TProject>` is obsolete in the playground AppHost. A targeted AppHost build at merged base `87ef7df` reproduced the same `AppHost.cs(11,15): error CS0618` on macOS ARM64 with the pinned SDK. Relevant source/build/SDK inputs remain identical at target `100acc9` and this head. This specific compiler failure predates the PR, but the standalone workflow remains failed. The baseline was not a full-solution or Ubuntu full-workflow reproduction; the fork-only harness did not validate Azure deployment. - The broader local `DotnetProjectBuildCoordinatorTests` class run was stopped after repeated build-resource timeouts and is not passed. Its cause is not established. Separate current CI Hosting.Dotnet runs passed on Linux (477 passed, 14 skipped) and Windows (475 passed, 7 skipped). - A bounded independent Claude Sonnet 5.5 review found no issues in the migrated retry matchers; Max was requested, but execution effort is not exposed. Current main's force-mode bypasses selective live retry classification; the rules are covered by behavioral tests. - Eight npm PGP sidecars were structurally checked, not independently cryptographically verified. Official Dashboard/TerminalHost runtime smokes passed for Linux x64, Windows x64, and macOS ARM64; four RID smokes were skipped. Structural checks do not establish cross-architecture execution or Windows ARM64 tray UI. - Official SDL ran in no-break mode. Component Governance emitted 15- and 19-alert summaries across jobs, not distinct-alert totals, and some jobs did not wait for queued new-component processing. Agent-image patch, SBoM Dockerfile-recognition/Maven, and pinned ILCompiler NU1903 warnings remain. - Automatic-main `PostBuildSign=true`, main-only SDL enforcement, source indexing, and production release promotion/publication are not established by this manual personal-branch run. ### Security considerations This changes signing orchestration. NuGet-container signatures and native executable signatures are separate contracts. Official signing and final Dashboard-package provenance were checked, but the successful build is not a security clearance or a completed comprehensive CI-confidence verdict. --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> (cherry picked from commit 9b8d7c0)
Tests selectorSelects the full PR test matrix + all PR-gated jobs (ALL) — a rule matching 'eng/AfterSigning.targets' selects ALL Selection computed for commit |
eeb9b78 to
df1a145
Compare
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 22016Or
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 22016" |
df1a145 to
eeb9b78
Compare
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
Description
Backport of #21304 to
release/17.0(cherry-picked from 9b8d7c0 with no modifications). Layer 19 of 55 in the release/17.0 backport stack; stacked on #22015.Backport recommendation: No — Large build-infrastructure refactor.
Backport of #21304
Checklist
<remarks />and<code />elements on your triple slash comments?