Migrate nuget-msi-convert to v5.yml (WiX 6) - #11743
Conversation
Smoke-test the WiX 3 -> WiX 6.0.3-dotnet.4 migration of the nuget-msi-convert template in Xamarin.yaml-templates (PR #752740, branch jonathanpeppers-nuget-msi-convert-v5). Adds a temporary second repository resource `yaml-templates-v5` pinned to the feature branch, and switches the nuget-msi-convert template reference from `v4.yml@yaml-templates` to `v5.yml@yaml-templates-v5`. All other templates (sign-artifacts, policheck, build-summary) continue to consume yaml-templates@main, so this is a single-template swap. Not to be merged: revert once the Xamarin.yaml-templates v5 PR lands. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Instead of cloning the yaml-templates resource into a second entry, point the existing one at the v5 feature branch. The other templates (sign-artifacts/v4.yml, security/policheck/v3.yml, build-summary/v1.yml) are present on the feature branch too, so this is safe for the smoke test. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
30c9579 to
9d86333
Compare
The WiX 6 migration of nuget-msi-convert (Xamarin.yaml-templates PR #752740) has merged to main, so we can drop the temporary feature-branch pin. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Xamarin.yaml-templates PR #754224 adds a fallback for BundledNETCoreAppTargetFramework on .NET 10 SDK (which only defines the *Version* property). Without this, the inner msi.csproj builds in _GenerateManifestsAndMsiNuGets fail with NETSDK1013. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Local validation on ✅ With .NET SDK The synthesized Ready for an internal re-queue against this branch. |
There was a problem hiding this comment.
Pull request overview
This PR updates the Azure DevOps pipeline definition used by dotnet/android to smoke-test the nuget-msi-convert template’s WiX 6 migration by switching from v4.yml to v5.yml and (currently) pinning the yaml-templates repository resource to a feature branch.
Changes:
- Pin
DevDiv/Xamarin.yaml-templatespipeline resource to a feature branch. - Switch
nuget-msi-convertjob template fromv4.ymltov5.yml. - Update the inline comment referencing which template produced the drop consumed later in the pipeline.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
✅ End-to-end validation succeeded on build 14529573 (still running other test stages, but the Convert NuGet to MSI job completed its work cleanly):
Remaining steps in that job are Guardian/SDL scanning, SBoM, and 1ES post-job cleanup — not blockers. |
|
Artifact validation against build 14529573: Pulled the
Coverage:
Versioning: The presence of the workload manifest pack confirms the workload registration generation works end-to-end on the new WiX 6 toolchain. Output shape is functionally equivalent to what v4 produced; only the build infrastructure changed. |
Equivalent of dotnet/android#11743 for dotnet/macios. Switches the nuget-msi-convert template reference from nuget-msi-convert/job/v4.yml@yaml-templates to v5.yml@yaml-templates, and updates the corresponding comment. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Equivalent of dotnet/android#11743 for dotnet/macios. Switches the nuget-msi-convert template reference from nuget-msi-convert/job/v4.yml@yaml-templates to v5.yml@yaml-templates, and updates the corresponding comment. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace Microsoft.Signed.WiX (WiX 3 candle/light) with Microsoft.Wix 6.0.3-dotnet.4 and its extension packages. Update CreateVisualStudioWorkload task invocation to use WixExe/HeatExe/WixExtensions parameters from arcade 11.x. Key changes: - workloads.csproj: TFM to netstandard2.0, WiX 6 PackageRefs with ExcludeAssets, WixExe/HeatExe/WixExtensions properties and items - Versions.props: Bump arcade tasks to 26330.112, add MicrosoftWixVersion - NuGetVersions.targets: Replace Microsoft.Signed.WiX with 5 WiX 6 package pins - sdk-insertion.yml: Remove outdated v4.yml reference Follows the pattern established in dotnet/android#11743 and the yaml-templates convert-v5/convert.proj reference implementation. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Equivalent of dotnet/android#11743 for dotnet/macios. ## Changes - Switches the nuget-msi-convert template reference from `nuget-msi-convert/job/v4.yml@yaml-templates` to `nuget-msi-convert/job/v5.yml@yaml-templates` in `tools/devops/automation/templates/release/vs-insertion-prep.yml`. - Updates the corresponding comment from `v4.yml` to `v5.yml`. ## What changed in v5 vs v4 (for reviewer context) - WiX packages bumped to `6.0.3-dotnet.4` (was WiX 3) - `swixBuildPackageVersion: 1.1.922` (was 1.1.392) - `arcadePackageVersion: 11.0.0-beta.26325.102` (was 9.0.0-beta.24509.3) - `arcadeTasksFxVersion: net` (was `netcoreapp3.1`) - `dotNetSdkVersion: 10.0.x` (was 9.0.x — required, arcade 11.x tasks are net10.0) - `convert.proj` now built with `DotNetCoreCLI@2 / dotnet msbuild` (Core MSBuild) instead of `MSBuild@1` desktop msbuild, because arcade 11.x workload tasks ship only `tools/net/` (.NETCoreApp v10). SwixBuild still uses desktop msbuild via the internal `_FindMSBuild` target. All new parameters have sensible defaults in `v5.yml`, so dotnet/macios does not need to override any of them. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Description Migrate workload MSI generation from WiX 3 (candle/light via `Microsoft.Signed.WiX`) to WiX 6 (wix.exe via `Microsoft.Wix` + extension packages). Follows the pattern established in dotnet/android#11743 and the yaml-templates `convert-v5/convert.proj` reference implementation. ## Related PRs - dotnet/android#11743 — Android WiX 6 migration (reference implementation) - dotnet/dotnet#5265 — Arcade-level WiX 5/6 rewrite (deeper refactor of `CreateVisualStudioWorkload` task internals) ## Changes ### `src/Workload/workloads.csproj` - Target framework changed to `netstandard2.0` (avoids NU1212 — `Microsoft.Wix` is a DotnetTool package type) - Added `GenerateDependencyFile=false` - Replaced `Microsoft.Signed.WiX` with WiX 6 packages (`Microsoft.Wix`, `Microsoft.WixToolset.Heat`, and 3 wixext packages) - `ExcludeAssets="all"` on `Microsoft.Wix` (required for DotnetTool package type) - Added `WixExe`, `HeatExe` properties and `WixExtensions` items - Updated `CreateVisualStudioWorkload` task invocation: `WixToolsetPath` → `WixExe`/`HeatExe`/`WixExtensions` - Removed `UseWorkloadPackGroupsForVS` (no longer supported in arcade 11.x) ### `eng/Versions.props` - Bumped arcade task packages to `11.0.0-beta.26330.112` (required for WiX 6 task parameters) - Added `MicrosoftWixVersion` = `6.0.3-dotnet.4` ### `eng/NuGetVersions.targets` - Replaced `Microsoft.Signed.WiX` version pin with 5 WiX 6 package pins ### `eng/pipelines/common/sdk-insertion.yml` - Removed outdated `v4.yml` comment ## Validation ✅ **Internal CI build [#3013410](https://dev.azure.com/dnceng/internal/_build/results?buildId=3013410) — PASSED** ### Artifact validation (matches dotnet/android#11743 acceptance criteria): 1. **MSI table rename** ✅ — Built with `WiX Dev Build (6.0.3.4)`, uses `Wix4DependencyProvider` table 2. **msi.json in MSI nupkg** ✅ — `ProviderKeyName` correctly populated (e.g., `"Microsoft.Maui.Core,11.0.0-preview.7.26352.12,x64"`) 3. **RelatedProducts** ✅ — `WIX_UPGRADE_DETECTED` / `WIX_DOWNGRADE_DETECTED` entries present (WiX 6 feature gain) 4. **VSDrop SWIX JSON** ✅ — All 3 VSDrop zips produced (components, components-pre, packs), vsman files correctly reference MSI packages with proper providerKey and install sizes ## Comparison with dotnet/dotnet#5265 (Arcade-level Rewrite) The arcade PR (dotnet/dotnet#5265) performs a deeper refactor of the WiX infrastructure. Here is how our approach compares: | Aspect | MAUI (this PR) | SDK (dotnet/dotnet#5265) | Status | |--------|----------------|--------------------------|--------| | WiX packages | ✅ Same 5 packages | Same | Aligned | | `WixExe`/`HeatExe`/`WixExtensions` | ✅ Correct | Same | Aligned | | Arcade version | 26330.112 | Same+ | Aligned | | SwixBuild package | `.Dotnet` 1.1.87 | Full variant 1.1.922 + desktop MSBuild | **Diverges** — works today | | SWIX build method | `<MSBuild>` task | `<Exec>` with desktop `msbuild.exe` | **Diverges** — works today | | `CreateWixPacks` | Not explicitly set (defaults to true) | Explicitly set | Functionally equivalent | | `LightCommandPackageDrop` | Never had it | Removed | N/A | ### Future considerations 1. **SwixBuild.Dotnet deprecation**: If `MicroBuild.Plugins.SwixBuild.Dotnet` is deprecated, we will need to switch to the full `Microsoft.VisualStudioEng.MicroBuild.Plugins.SwixBuild` + desktop MSBuild pattern (using `vswhere` to locate VS). 2. **Arcade dependency flow**: When the arcade version from dotnet/dotnet#5265 ships, improvements to `CreateVisualStudioWorkload` will flow to us automatically — no code changes needed in MAUI unless the task API changes. --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: rmarinho <1235097+rmarinho@users.noreply.github.com>
Migrates
dotnet/android's signed pipeline from the WiX 3nuget-msi-convert/v4.ymltemplate to the WiX 6v5.ymltemplate (Microsoft.Wix 6.0.3-dotnet.4).Changes
Switches the nuget-msi-convert template reference from
nuget-msi-convert/job/v4.yml@yaml-templatestonuget-msi-convert/job/v5.yml@yaml-templates, and updates an adjacent comment. All other consumers ofyaml-templates@main(sign-artifacts, policheck, build-summary) are unchanged — this is a single-template swap.Related Xamarin.yaml-templates work (all merged to
main)nuget-msi-convert(addsv5.yml)$(BundledNETCoreAppTargetFramework)for .NET 10 SDKIntermediate fix commits that landed inside #752740 before it merged:
baf73ec— Buildconvert.projwith Core MSBuild (DotNetCoreCLI@2), not desktop msbuild981d2a6— Pass absolute paths toCreateVisualStudioWorkloadd8a73d8— RenameWixPackageVersion→MicrosoftWixToolsetSdkVersion(arcade-canonical)What changed in v5 vs v4 (for reviewer context)
6.0.3-dotnet.4(was WiX 3)swixBuildPackageVersion: 1.1.922(was 1.1.392)arcadePackageVersion: 11.0.0-beta.26325.102(was 9.0.0-beta.24509.3)arcadeTasksFxVersion: net(wasnetcoreapp3.1)dotNetSdkVersion: 10.0.x(was 9.0.x — required; arcade 11.x tasks are net10.0)convert.projnow built withDotNetCoreCLI@2 / dotnet msbuild(Core MSBuild) instead ofMSBuild@1desktop msbuild, because arcade 11.x workload tasks ship onlytools/net/(.NETCoreApp v10). SwixBuild still uses desktop msbuild via the internal_FindMSBuildtarget.WixPackageVersion→MicrosoftWixToolsetSdkVersion(arcade-canonical, matches dotnet/dotnet VMR).All new parameters have sensible defaults in
v5.yml, so dotnet/android does not need to override any of them.End-to-end CI validation (build 14529573)
Internal
Xamarin.Androidsigned build against this branch succeeded. TheConvert NuGet to MSIjob produced:.msiinstallers = 13 workload packages × 3 host architectures (x86/x64/arm64)*.msi.<arch>.<version>.nupkgpackages, all MicroBuild-verified (Certificate : Passed)microsoft.net.sdk.android.manifest-11.0.100-preview.7MSI / nupkg spot-check (
Microsoft.Android.Sdk.Windows.Msi.x64)CreatedByfield (PID 18):WiX Dev Build (6.0.3.4)— confirms WiX 6 toolset.WixDependencyProvider(WiX 3) →Wix4DependencyProvider(WiX 4+ versioned name), populated with the correctProviderKey:Microsoft.Android.Sdk.Windows,<version>,x64.data/msi.jsoninside the nupkg has identical schema to the WiX 3 baseline (36.99.0-preview.5.308), withProviderKeyNamecorrectly extracted in canonicalPackageName,Version,Archform. NewRelatedProductsarray additionally surfacesWIX_UPGRADE_DETECTED/WIX_DOWNGRADE_DETECTEDupgrade metadata — feature gain, not a regression.