fix(release): preserve Windows installer layout#88
Closed
isacgalvao wants to merge 1 commit into
Closed
Conversation
Add a versioned Windows installer that installs the full package layout instead of copying only the public tiny dispatcher. Package it as install.ps1 in Windows archives and make the Windows package verifier run the installer into a temporary prefix so missing libexec helpers are caught. Fixes Helvesec#86. Signed-off-by: isac <58748901+isacgalvao@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
This PR fixes the Windows installation path so the full packaged layout (tiny dispatcher + private helper under libexec/ + daemon + shared assets) is installed and verified, preventing “private rmux helper not found” failures on clean installs/upgrades.
Changes:
- Add a versioned
scripts/install-windows.ps1that installs the full Windows package layout (and verifies the installed binary can reach its helper). - Package the installer into Windows archives as
install.ps1. - Extend
scripts/verify-package-windows.ps1to requireinstall.ps1and run it into a temporary prefix during-RunBinaryverification.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| scripts/verify-package-windows.ps1 | Requires install.ps1 in the zip and executes it during -RunBinary verification to catch missing-layout regressions. |
| scripts/package-windows.ps1 | Adds install.ps1 into the staged Windows zip output. |
| scripts/install-windows.ps1 | New installer that preserves the complete Windows package layout and performs a post-install self-check. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+216
to
+219
| & $InstallScript -InstallDir $installBin | ||
| if (-not $?) { | ||
| Fail "archive install.ps1 failed" | ||
| } |
shideneyu
added a commit
that referenced
this pull request
Jul 12, 2026
…plies install-windows.ps1 (PR #88 follow-up): force TLS 1.2 so Windows PowerShell 5.1 can reach GitHub releases, and make Fail throw instead of exit under irm|iex so a failed install no longer closes the user's interactive shell. verify-package-windows.ps1: check the installer's exit code instead of $? so a failing install.ps1 cannot pass the package gate. Ledger C-D50 (PR #89): record that answering OSC 10/11/12 colour queries from the emulator is an RMUX extension — probed tmux 3.7b leaves them unanswered in detached sessions.
shideneyu
added a commit
that referenced
this pull request
Jul 12, 2026
…n is used The contributed Windows installer (PR #88) copied rmux-daemon.exe into the parent of the bin/ install dir, but the hidden-daemon resolver (rmux-client auto_start) only looks for it as a sibling of the running rmux.exe -- matching the Unix installer's bin/rmux-daemon placement. As shipped, every server therefore ignored the packaged daemon and fell back to re-exec'ing the tiny bin\rmux.exe with --__internal-daemon, which blocks on libexec\rmux\rmux.exe for the server's whole lifetime: the daemon was dead weight and each live server leaked a blocked rmux.exe shim (confirmed by execution: rmux-daemon.exe count 0 -> 1 and stray rmux.exe count 1 -> 0 once placed as a sibling). - install-windows.ps1: copy rmux-daemon.exe into the bin/ install dir (next to rmux.exe) instead of the parent install root. - install-windows.ps1: reset $LASTEXITCODE to 0 after a successful download install so a caller that trusts the exit code (verify-package-windows.ps1) does not misread the `rmux --help` verification probe's usage exit as a failure; done without `exit`, which under irm|iex would close the shell. - verify-package-windows.ps1: AssertArchiveInstaller now checks bin\rmux-daemon.exe, next to the installed rmux.exe where the resolver looks, instead of the install root where it was calibrated to the installer's own wrong placement.
Contributor
|
Thanks @isacgalvao — this work was integrated in adapted form as e802d0b, with your authorship preserved, then further hardened in 7069f01. It shipped in RMUX v0.9.0 :) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #86.
Supersedes #87 after renaming the head branch to match the project branch naming pattern.
Summary
The documented Windows install path currently downloads the v0.8.0 zip but installs only the public rmux.exe tiny dispatcher into %LOCALAPPDATA%\rmux\bin. A clean install or upgrade from the old layout can then fail immediately with:
The release archive already contains the required Windows package layout: rmux.exe, libexec/rmux/rmux.exe, rmux-daemon.exe, and share/.... This PR makes that layout installable and testable from the repository.
Fix
Testing
I also ran:
Both hit the existing Windows failure cannot find window: 0 in cli_acceptance_matrix_exercises_real_daemon_state; the same isolated test fails on unmodified upstream/main (3b254fe).
I also ran cargo clippy --workspace --all-targets -- -D warnings; it currently fails on unmodified code with the new stable toolchain lint clippy::byte-char-slices at crates/rmux-server/src/pane_io/types.rs:1117.
Platform tested