Skip to content

Remove MSI from publishing pipeline#27213

Merged
TravisEz13 merged 9 commits intoPowerShell:masterfrom
jshigetomi:removeMSI
Apr 16, 2026
Merged

Remove MSI from publishing pipeline#27213
TravisEz13 merged 9 commits intoPowerShell:masterfrom
jshigetomi:removeMSI

Conversation

@jshigetomi
Copy link
Copy Markdown
Collaborator

@jshigetomi jshigetomi commented Apr 8, 2026

PR Summary

This pull request removes MSI and EXE package support from the Windows packaging and release pipelines, as well as related documentation and scripts. The changes ensure that only ZIP and MSIX packages are produced, validated, signed, and uploaded for Windows releases. Additionally, references to MSI/EXE packaging are removed from documentation and infrastructure scripts.

Pipeline and Packaging Changes:

  • Updated .pipelines/templates/packaging/windows/package.yml and .pipelines/templates/packaging/windows/sign.yml to remove MSI and EXE package types from build, sign, and copy steps; now only ZIP and MSIX packages are handled for all Windows architectures (x64, x86, arm64). [1] [2] [3] [4] [5]
  • Updated .pipelines/templates/uploadToAzure.yml to exclude MSI and EXE files from the list of artifacts to download and upload to Azure, as well as from the set of files to be uploaded in the final step. [1] [2] [3] [4]
  • Modified .pipelines/templates/release-validate-packagenames.yml to validate only ZIP package names, removing MSI from validation and updating the display name accordingly. [1] [2]
  • Updated .pipelines/templates/release-githubNuget.yml to ensure MSI packages are not uploaded to GitHub releases by explicitly removing them before publishing.

Documentation Updates:

  • Removed instructions and references related to MSI and EXE packaging from .github/CONTRIBUTING.md and .github/instructions/powershell-module-organization.instructions.md, and updated examples to refer to MSIX instead of MSI. [1] [2]

Script Cleanup:

  • Deleted the now-unused assets/MicrosoftUpdate/RegisterMicrosoftUpdate.ps1 script, which was previously used in MSI installation scenarios.

PR Context

Announcement in PowerShell-Blog and reasoning explained here: https://github.com/PowerShell/PowerShell-Blog/pull/275

This PR should not be backported to the current release branches as those still need to support MSI packages.

PR Checklist

@jshigetomi jshigetomi marked this pull request as ready for review April 10, 2026 15:25
@jshigetomi jshigetomi requested a review from a team as a code owner April 10, 2026 15:25
Copilot AI review requested due to automatic review settings April 10, 2026 15:25
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR removes Windows MSI installer creation/signing/publishing from the build + release toolchain, standardizing Windows distribution on .zip and .msix and deleting WiX/MSI-related assets and tests.

Changes:

  • Removed MSI (and WiX/MSI helper functions) from Start-PSPackage and related packaging exports.
  • Updated OneBranch pipeline templates to stop producing/downloading/uploading MSI artifacts and to validate only ZIP names.
  • Cleaned up MSI-only assets/tests (WiX sources, Microsoft Update registration script, installer tests) and removed the script from the Windows publish output.

Reviewed changes

Copilot reviewed 16 out of 19 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
tools/packaging/packaging.psm1 Removes MSI package type and deletes WiX/MSI packaging implementation.
tools/packaging/packaging.psd1 Updates exported functions list (but needs further cleanup per comments).
tools/packaging/boms/windows.json Removes BOM entry for RegisterMicrosoftUpdate.ps1.
tools/ci.psm1 Stops producing/testing MSI/EXE packages in Invoke-CIFinish; shifts to zip/msix types.
test/powershell/Installer/WindowsInstaller.Tests.ps1 Removes MSI/WiX-specific scenario tests.
src/powershell-win-core/powershell-win-core.csproj Stops publishing RegisterMicrosoftUpdate.ps1 into the Windows output.
assets/wix/Product.wxs Deletes MSI WiX authoring for the product.
assets/wix/bundle.wxs Deletes EXE bootstrapper WiX authoring.
assets/wix/ExeLicense.rtf Deletes WiX bootstrapper license asset.
assets/MicrosoftUpdate/RegisterMicrosoftUpdate.ps1 Removes MSI custom-action helper used to opt into Microsoft Update.
.pipelines/templates/packaging/windows/package.yml Removes MSI from Windows package build list; builds zip/msix only.
.pipelines/templates/packaging/windows/sign.yml Removes MSI/EXE signing logic (but currently also removes MSIX signing).
.pipelines/templates/uploadToAzure.yml Stops downloading/uploading MSI (and EXE download patterns) for Windows packages.
.pipelines/templates/release-validate-packagenames.yml Updates Windows package-name validation to ZIP-only.
.pipelines/templates/release-githubNuget.yml Ensures MSI files (if present) are removed before GitHub release publishing.
.github/CONTRIBUTING.md Updates local packaging guidance away from MSI (but leaves ambiguous wording).
assets/wix/WixUIInfoIco.png WiX UI asset present in PR (binary/no textual diff).
assets/wix/WixUIDialogBmp.png WiX UI asset present in PR (binary/no textual diff).
assets/wix/WixUIBannerBmp.png WiX UI asset present in PR (binary/no textual diff).
Comments suppressed due to low confidence (1)

.pipelines/templates/packaging/windows/sign.yml:108

  • $packageTypes still includes 'exe' for x64/x86/arm64, but this PR removed MSI→EXE generation and upload/download of *.exe elsewhere. As written, Get-ChildItem ... | Select-Object -ExpandProperty FullName will produce $null when no EXE exists and Copy-Item -Path $exePkgPath will fail. Either remove exe from $packageTypes or guard the copy with an explicit empty-check and a clear error/warning.
      $packageTypes = switch ($runtime) {
        'x64' { @('zip', 'msix', 'exe') }
        'x86' { @('zip', 'msix', 'exe') }
        'arm64' { @('zip', 'msix', 'exe') }
        'fxdependent' { 'fxdependent' }
        'fxdependentWinDesktop' { 'fxdependent-win-desktop' }
        'minsize' { 'min-size' }
      }

      if (-not (Test-Path $(ob_outputDirectory))) {
        New-Item -ItemType Directory -Path $(ob_outputDirectory) -Force
      }

      if ($packageTypes -contains 'exe') {
        $exePkgNameFilter = "powershell-*.exe"
        $exePkgPath = Get-ChildItem -Path $(Pipeline.Workspace) -Filter $exePkgNameFilter -Recurse -File | Select-Object -ExpandProperty FullName
        Write-Verbose -Verbose "signed exePkgPath: $exePkgPath"
        Copy-Item -Path $exePkgPath -Destination '$(ob_outputDirectory)' -Force -Verbose
      }

Comment thread tools/packaging/packaging.psd1 Outdated
Comment thread tools/packaging/packaging.psm1
Comment thread .pipelines/templates/packaging/windows/sign.yml Outdated
Comment thread tools/ci.psm1
Comment thread .github/CONTRIBUTING.md Outdated
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 21 out of 24 changed files in this pull request and generated 3 comments.

Comment thread .github/CONTRIBUTING.md Outdated
Comment thread tools/packaging/packaging.psm1 Outdated
Comment thread docs/maintainers/releasing.md Outdated
@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines:
5 pipeline(s) require an authorized user to comment /azp run to run.

@TravisEz13 TravisEz13 merged commit 72be78e into PowerShell:master Apr 16, 2026
40 checks passed
@MichelZ
Copy link
Copy Markdown

MichelZ commented Apr 17, 2026

This sounds like an absolutely terrible idea.... I'm baffeled.
Microsoft shooting itself in the foot again

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

Labels

CL-BuildPackaging Indicates that a PR should be marked as a build or packaging change in the Change Log

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants