From c4a572a8841e652cbff678ac10bd353ec79c58c5 Mon Sep 17 00:00:00 2001 From: divens Date: Mon, 16 Mar 2026 12:38:38 +0100 Subject: [PATCH] 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 --- .github/workflows/release.yml | 102 ++++++++++ Cargo.lock | 136 ++++++++++++- Cargo.toml | 3 + assets/logo128.ico | Bin 0 -> 67646 bytes assets/zellij.rc | 1 + src/build.rs | 4 + wix/License.rtf | 15 ++ wix/Zellij.wxl | 5 + wix/banner.bmp | Bin 0 -> 85894 bytes wix/dialog.bmp | Bin 0 -> 461814 bytes wix/main.wxs | 347 ++++++++++++++++++++++++++++++++++ 11 files changed, 607 insertions(+), 6 deletions(-) create mode 100644 assets/logo128.ico create mode 100644 assets/zellij.rc create mode 100644 wix/License.rtf create mode 100644 wix/Zellij.wxl create mode 100644 wix/banner.bmp create mode 100644 wix/dialog.bmp create mode 100644 wix/main.wxs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bd4f3f509..9a2f1f458 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 diff --git a/Cargo.lock b/Cargo.lock index 2c35c595d..f856cf039 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -965,6 +965,20 @@ version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +[[package]] +name = "embed-resource" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55a075fc573c64510038d7ee9abc7990635863992f83ebc52c8b433b8411a02e" +dependencies = [ + "cc", + "memchr", + "rustc_version", + "toml 0.9.6", + "vswhom", + "winreg", +] + [[package]] name = "encode_unicode" version = "0.3.6" @@ -2908,6 +2922,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.27", +] + [[package]] name = "rustix" version = "0.37.28" @@ -3085,6 +3108,12 @@ dependencies = [ "semver-parser", ] +[[package]] +name = "semver" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" + [[package]] name = "semver-parser" version = "0.10.2" @@ -3096,18 +3125,28 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.217" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.217" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -3136,6 +3175,15 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_spanned" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8bbf91e5a4d6315eee45e704372590b30e260ee83af6639d64557f51b067776" +dependencies = [ + "serde_core", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3838,6 +3886,45 @@ dependencies = [ "serde", ] +[[package]] +name = "toml" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae2a4cf385da23d1d53bc15cdfa5c2109e93d8d362393c801e87da2f72f0e201" +dependencies = [ + "indexmap 2.7.1", + "serde_core", + "serde_spanned", + "toml_datetime", + "toml_parser", + "toml_writer", + "winnow", +] + +[[package]] +name = "toml_datetime" +version = "0.7.5+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_parser" +version = "1.0.9+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "702d4415e08923e7e1ef96cd5727c0dfed80b4d2fa25db9647fe5eb6f7c5a4c4" +dependencies = [ + "winnow", +] + +[[package]] +name = "toml_writer" +version = "1.0.6+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab16f14aed21ee8bfd8ec22513f7287cd4a91aa92e44edfe2c17ddd004e92607" + [[package]] name = "tower" version = "0.5.2" @@ -4086,6 +4173,26 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +[[package]] +name = "vswhom" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b" +dependencies = [ + "libc", + "vswhom-sys", +] + +[[package]] +name = "vswhom-sys" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb067e4cbd1ff067d1df46c9194b5de0e98efd2810bbc95c5d5e5f25a3231150" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "vte" version = "0.10.1" @@ -4655,6 +4762,22 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "winnow" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df79d97927682d2fd8adb29682d1140b343be4ac0f08fd68b7765d9c059d3945" + +[[package]] +name = "winreg" +version = "0.55.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb5a765337c50e9ec252c2069be9bf91c7df47afb103b642ba3a53bf8101be97" +dependencies = [ + "cfg-if", + "windows-sys 0.59.0", +] + [[package]] name = "winx" version = "0.36.3" @@ -4729,7 +4852,7 @@ dependencies = [ "anyhow", "prost-build", "serde_json", - "toml", + "toml 0.5.10", "which", "xflags", "xshell", @@ -4774,6 +4897,7 @@ dependencies = [ "anyhow", "clap", "dialoguer", + "embed-resource", "humantime", "insta", "interprocess", @@ -4865,7 +4989,7 @@ dependencies = [ "once_cell", "prost", "regex", - "semver", + "semver 0.11.0", "serde", "serde_json", "signal-hook", diff --git a/Cargo.toml b/Cargo.toml index 52a476fcc..b8d8fb580 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -33,6 +33,9 @@ isahc = { workspace = true } [target.'cfg(unix)'.dependencies] nix = { workspace = true } +[target.'cfg(windows)'.build-dependencies] +embed-resource = "3" + [dev-dependencies] insta = { version = "1.6.0", features = ["backtrace"] } ssh2 = "0.9.1" diff --git a/assets/logo128.ico b/assets/logo128.ico new file mode 100644 index 0000000000000000000000000000000000000000..a1cd5259a5351f1d6be6e9db752929bb69916d58 GIT binary patch literal 67646 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 + + + + diff --git a/wix/banner.bmp b/wix/banner.bmp new file mode 100644 index 0000000000000000000000000000000000000000..87e18c4a966157f5583e6ca75a1043f4fcb06ab4 GIT binary patch literal 85894 zcmeI5c~BHr9>?44W|Pt_a~X9d8Ug}>0s?{uAlJx^ih>A1IYki|l^cZNW<`a8VSrJ& z1p!6Tb&U{CxuV80F_)E1Hk(atZPl*g2BNE`#O$x9acasn`LD5F>f6<$J>5NTe)H*9 zAAa@T>weBYg&SsY{9;3|CG;Ajw`=JC8QgsOS6GH;a~%JAviyVv1V8`;K!9Ze9LvEY zb`Sso5CDOn;Biy}5C8!XV4DCu&i3^~^dJBNAOMe}4uAj%fB@SB;BmIEAEE~V5C8#q z9CZK$KmY{TCIFAKef*4eoN%5|Dm?xSDA)x8AOHf| z1jcUPK31t(wbV?ow)2K{8BHbm=Z+XITDa8MP@t&?Oi8cS^SX!*t+Qb}6EABfkA2^{HZk3j1u61{eS7v)|-z1#i zV!5)rvvXp6T==z`azy>{@VKaWQ8);I0DA<4Q7Ds-9$mX~HFaMC37VS1^%g7$*&kDI zR#i6CS~Aeg|J&cJ7;f|36%?K=Egftjzpq$hCD=SYG3ok;*MxGWLFMo`dzB0kg8&GK zM1Y(tX!o11zg85Nyu-arUZ&Tp97n0QVx&zz(5x70`{Vgz;aO78Fu$mRgv_QA8+)77 zx}u6Jrwh&<2~LWdt9H53tT`2>W#9enTMAWEtVm(Q<064Yu^<2fOcJ1Rge?t?_LeJz z%-X@rc~?QAq0U0`weoU%Nq-Xw-O$SH6^^r<$&XlB!)j2!=T$v(I+U9CyESw)0AHg@a^fgh_Ii>AVdB$oNTj5Yd z;JY_I`sm)>dm^!b$3+5*VnF}|7$cx6SCV#r!*NFXy1^+s^G;Xt`Snn1UPqO&k-k^Z zhSzi!tXS}7SxU(J$Mz35=Ur;d9%;@yUy+;>z4;I70f=F;xWnBIWy7tc{<5LALTY}= z-lO;W9Kq)GH8mm;fyYGxi()|l1Q;W*S1J{RyLE4<@`LvB(UYZ@T8ev*2PH%b`%^=_ zFQ`(7j^_+CWcSu)3M<*1*3=2ao3*kwvKMc0#2Ilsmahbcz=BsX`NpivS_=nUN&+fkD6Qx z;{q&o<}8{&Kdr7Pqv^1X#MgCOoZ92@A`yYdMFNXrK>!38BaocH4;A0+F5kEFYFy-? z!F)%FrBR0>akM4Bw^r6)CmU|cC6Cj##^&AC8QLp}o}4~Ut#JX8f%uH-(Z)!^! zYRX9o_1WlP>F;9g@4Uj_*?NP$MQW%|Pfg~fhV0Ix>CR?GSXsx&9F#pbr|B{#m8e=@$iiuZUD+Q%8I5eOFqK!7y@ zPkDTa&L*|Tv-%sddh2BA;p@r8w8RCtlH4ij?y1h`Jd#H1#V4!KfKH9+@2S$9O!d}y z1(tmLANh^(7}Z(&AUw`mjX=C000OKLc*^63^EXa;T-}pNX?R-Ll*;!8xl!v1shoCd zuY7N39p&$8k1x}83EW-!=?}%%??hLgfyY^^4u}^7K!8C4PkG#6o=;4Gq_37Ai^BJF zlDHeQlec^GIXTD0_(>>9*K~MlZ}1+kN^>?fFtV^e@WDST|N1z#`cL!`Wvkg)@IoM&9IL zNw?!uyUPDdoc5^m@l>Z}dQMxS_MaVzEN!**4S~m*s}Bem1VDg20#7_XHC|=$TrZ8s zsZphJf4JVO^!!@R$9DNSWipLKqzwIMJ+4Y~G@835^>D>k56W*onCj<5KF(gHK*S&b z0!$GQJnrXFCbX*v9;cRZ%CEbQrAy40ki^}rm!AJci3|BS->zb+Z{y}qot%m<{wuA0 z5BWG#bpgSG00^*2fchcHwsc=U4IZaeZ;oeNz&hbRAnM_4DBKxUFPUPVX17N871ny3a@?Ft{&YB(NwJ1VDf>0)of=J zB1L^)ekL`o&`P=a&o!qA67R25pI<3+#Ya(DaD1F$GJ z=kL^44_4`+)^PPBZRsgm)R;~mrzJS6?BL~p$UmVwImhHTzR&IXi)UmK?WcJvL?VKA z6_LQASP%dK#t6{7YibX3M)S;kT@UTr-YJb3iVf@Evtu;GuW9jI3py&XFsjOoAbs<5 zN;G7RH0NGar4{WB;wO)w$$;D(^k08HLf%|3_*KdEJB34k-&N7R)Rdozf|jasrAS2J zago5HSP%dK#t6_n$TS;rWZ=7kcC8FIZuP0+pJ5v@xI47hWY!w*5MOIYe(L0KAN$6_ zn69JgRr|v?+L_ay%`w|@PFEc4s>?oEzJ9x#jq}EU^b*H_D4{5tyZQ3S2+iXx5)pV@ zB(NwJ1VDgE0zZsTbewE=Sv@t?y`6bTWYF30t!LiixPtRXnIpf^M@}B@ZZux_hG1|z3(FG?jd#YzL}dYwi;5S8g8&GyMBuS{ zp@_fx_S=fmvL&;59WR>s#v)FCt-AvWnmn!;YRf;Xa@pighk}!%Xd>p)!It8l#=#fy4 z*dX9>u?eGm5C8%82nZ^txT#UQyR*~9a-|?>&uzZx^@l31oX&17vv+qm^nOG6=*jFh zh3~E);RMNw)!i36HBI4~azsS{kBf>Ig@XVH{2B<{zI98bP+GiWK(eN1WrfM&Vh$v) zcD2v%P=#g2>CEAupS99xS#@RA*zMcX|AXQ2>1U2_1OX6WiGU`j{`BJ;xtTH{?_R*Y zq%&)_{u}dzw?%mcH$VGa_*I(or|n0=2U;{RS6+!s85AEQAgMATXT-G@8CMcBiqr)^>?$$H`L@6B9xVnxoSh zlJH&d`1CW!H-Z2NFi(I+v;6q*;d6AiHbHn?n+CQ)00cmQJp%AJd)EvRg8&GCfHnbm zT$={AK>!3mfIR~6ID6L&5rY5-fPgjucwCzXwm|>{K!800@Hl(d3=x9>2!Mb#0eD=S o2DU)}1VDg20`NF{*9;MZ00@A9HUW5Cn+CQ)00cmQJp$bS0FJj(KmY&$ literal 0 HcmV?d00001 diff --git a/wix/dialog.bmp b/wix/dialog.bmp new file mode 100644 index 0000000000000000000000000000000000000000..516f33a32107c8ce46ec45bb1e31e0db091ee4fc GIT binary patch literal 461814 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +