diff options
| author | divens <divens@users.noreply.github.com> | 2026-03-16 12:38:38 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-16 12:38:38 +0100 |
| commit | c4a572a8841e652cbff678ac10bd353ec79c58c5 (patch) | |
| tree | 125e36af671bf8d67343da1f6e7797a935e34b23 /.github | |
| parent | fix: sixel-image aspect ratio and opacity issues (#4858) (diff) | |
| download | sl0ppij-c4a572a8841e652cbff678ac10bd353ec79c58c5.tar.gz sl0ppij-c4a572a8841e652cbff678ac10bd353ec79c58c5.tar.xz sl0ppij-c4a572a8841e652cbff678ac10bd353ec79c58c5.zip | |
Add Windows MSI installer with WiX v6 (#4847)
* Add Windows MSI installer with WiX v6
Build a dual-scope MSI installer that lets users choose per-user
(%LocalAppData%\Zellij) or per-machine (Program Files\Zellij) install,
with automatic PATH configuration and clean uninstall support.
- Custom UI based on stock WixToolset.UI.wixext dialogs to work around
the long-standing WixUI_Advanced dual-scope bug (wixtoolset/issues#7137)
- Custom folder resolution CAs (SetFolderPerUser/SetFolderPerMachine)
- Embed application icon into zellij.exe via embed-resource
- Icon shown in Add/Remove Programs via ARPPRODUCTICON
- MSI build integrated into release.yml CI workflow
* Add MSI installer to no-web build and fix artifact naming
- Add MSI build steps to build-release-noweb job
- Add SHA256 checksums for MSI artifacts
- Pin WixToolset.UI.wixext to 6.0.2 to avoid v7 RC incompatibility
- Use -installer suffix after target in artifact names
---------
Co-authored-by: divens <divens.dev@gmail.com>
Diffstat (limited to '.github')
| -rw-r--r-- | .github/workflows/release.yml | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bd4f3f50..9a2f1f45 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -162,6 +162,57 @@ jobs: asset_name: zellij-${{matrix.target}}.sha256sum asset_content_type: text/plain + # ===== Windows MSI installer ===== + - name: Install WiX v6 + if: runner.os == 'Windows' + run: dotnet tool install --global wix + + - name: Add WiX UI extension + if: runner.os == 'Windows' + run: wix extension add WixToolset.UI.wixext/6.0.2 + + - name: Build MSI installer + if: runner.os == 'Windows' + run: | + $version = (Select-String -Path Cargo.toml -Pattern '^version\s*=\s*"(.+)"' | Select-Object -First 1).Matches.Groups[1].Value + New-Item -ItemType Directory -Force -Path target\wix + wix build wix\main.wxs wix\Zellij.wxl ` + -d Version=$version ` + -arch x64 ` + -ext WixToolset.UI.wixext ` + -o target\wix\zellij-x86_64-pc-windows-msvc-installer.msi + + - name: Create MSI checksum + if: runner.os == 'Windows' + id: make-checksum-msi + run: | + $checksum_name = "zellij-${{ matrix.target }}-installer.sha256sum" + $hash = (Get-FileHash "target\wix\zellij-${{ matrix.target }}-installer.msi" -Algorithm SHA256).Hash.ToLower() + "$hash zellij-${{ matrix.target }}-installer.msi" | Out-File -Encoding ascii $checksum_name + echo "checksum_name=$checksum_name" >> $env:GITHUB_OUTPUT + + - name: Upload MSI installer + if: runner.os == 'Windows' + uses: actions/upload-release-asset@v1.0.2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-release.outputs.upload_url }} + asset_path: target\wix\zellij-${{ matrix.target }}-installer.msi + asset_name: zellij-${{ matrix.target }}-installer.msi + asset_content_type: application/octet-stream + + - name: Upload MSI checksum + if: runner.os == 'Windows' + uses: actions/upload-release-asset@v1.0.2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-release.outputs.upload_url }} + asset_path: ${{ steps.make-checksum-msi.outputs.checksum_name }} + asset_name: zellij-${{ matrix.target }}-installer.sha256sum + asset_content_type: text/plain + build-release-noweb: needs: create-release name: build-release-noweb @@ -301,3 +352,54 @@ jobs: asset_path: ${{ steps.make-checksum-unix.outputs.checksum_name || steps.make-checksum-windows.outputs.checksum_name }} asset_name: zellij-no-web-${{matrix.target}}.sha256sum asset_content_type: text/plain + + # ===== Windows MSI installer (no-web) ===== + - name: Install WiX v6 + if: runner.os == 'Windows' + run: dotnet tool install --global wix + + - name: Add WiX UI extension + if: runner.os == 'Windows' + run: wix extension add WixToolset.UI.wixext/6.0.2 + + - name: Build MSI installer (no-web) + if: runner.os == 'Windows' + run: | + $version = (Select-String -Path Cargo.toml -Pattern '^version\s*=\s*"(.+)"' | Select-Object -First 1).Matches.Groups[1].Value + New-Item -ItemType Directory -Force -Path target\wix + wix build wix\main.wxs wix\Zellij.wxl ` + -d Version=$version ` + -arch x64 ` + -ext WixToolset.UI.wixext ` + -o target\wix\zellij-no-web-${{ matrix.target }}-installer.msi + + - name: Create MSI checksum (no-web) + if: runner.os == 'Windows' + id: make-checksum-msi + run: | + $checksum_name = "zellij-no-web-${{ matrix.target }}-installer.sha256sum" + $hash = (Get-FileHash "target\wix\zellij-no-web-${{ matrix.target }}-installer.msi" -Algorithm SHA256).Hash.ToLower() + "$hash zellij-no-web-${{ matrix.target }}-installer.msi" | Out-File -Encoding ascii $checksum_name + echo "checksum_name=$checksum_name" >> $env:GITHUB_OUTPUT + + - name: Upload MSI installer (no-web) + if: runner.os == 'Windows' + uses: actions/upload-release-asset@v1.0.2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-release.outputs.upload_url }} + asset_path: target\wix\zellij-no-web-${{ matrix.target }}-installer.msi + asset_name: zellij-no-web-${{ matrix.target }}-installer.msi + asset_content_type: application/octet-stream + + - name: Upload MSI checksum (no-web) + if: runner.os == 'Windows' + uses: actions/upload-release-asset@v1.0.2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-release.outputs.upload_url }} + asset_path: ${{ steps.make-checksum-msi.outputs.checksum_name }} + asset_name: zellij-no-web-${{ matrix.target }}-installer.sha256sum + asset_content_type: text/plain |
