feat(windows): ship an installer, with the zip as the portable option - #114
Merged
Merged
Conversation
The Windows release was a zip to extract and run. It now also ships an Inno Setup installer built from the same tree, giving a Start menu shortcut, an optional desktop shortcut and an entry in Settings > Apps. - Per-user only (PrivilegesRequired=lowest), with no all-users option: on Windows the app downloads deps and add-ons beside the executable, so the install directory has to stay user-writable. - An upgrade keeps deps\ and addons\; uninstall removes them. templates\ and data\ are cleared before an upgrade, since Inno never removes a file a newer version dropped. - The installer is its own script, build-windows-installer.ps1, because build-windows.yml assembles the package inline rather than calling package-windows.ps1. Both now call it. - Inno Setup is pinned to 6.7.3 by SHA-256 in the workflow. - packaging_test.dart lints the per-user restriction, the uninstall and upgrade rules, and the filename across the .iss, scripts and upload. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014GLXdGLfPwgYjW1AkonGqN
Same Windows-checkout CRLF trap as the AppImage lint tests: the installer group asserted workflow lines ending in \n. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014GLXdGLfPwgYjW1AkonGqN
…e runner's The runner image already has an ISCC.exe on PATH (a Chocolatey shim), and build-windows-installer.ps1 found that before the pinned 6.7.3 the workflow had just installed. Install the pinned copy to its own directory and pass it as $ISCC; log the compiler's version. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014GLXdGLfPwgYjW1AkonGqN
ISCC.exe carries no usable version resource, so it printed 0.0.0.0. The path already names the pinned copy in CI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014GLXdGLfPwgYjW1AkonGqN
Owner
Author
|
Test builds of this branch are green: https://github.com/StuartCameronCode/VapourBox/actions/runs/37303191178 (version
Still unchecked: running the installer on a real Windows machine (no UAC prompt, first-launch deps download, upgrade, uninstall). 🤖 Generated with Claude Code |
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.
Summary
The Windows release was a zip to extract and run. It now also ships an Inno Setup installer built from the same tree: Start menu shortcut, optional desktop shortcut, an entry in Settings → Apps. The zip stays as the portable option.
packaging/windows/vapourbox.iss(new) — the installer definition.Scripts/build-windows-installer.ps1(new) — compiles it from an assembled package directory; checks the tree is complete first.package-windows.ps1— calls it after zipping.-SkipInstallergives the zip alone.build-windows.yml— installs Inno Setup, builds the installer, uploads-setup.exe+.zip.ci-build-and-release.sh,release.sh— the release upload picks up*-setup.exe; release-notes text updated.packaging_test.dart— three lint tests (below).docs/BUILDING.md, a Windows section inCLAUDE.md.Design notes
PrivilegesRequired=lowest), no all-users option. On Windows the app downloads deps and add-ons intodeps\andaddons\next to the executable, so the install directory must stay user-writable. It installs to%LOCALAPPDATA%\Programs\VapourBoxand never prompts for admin. A lint test ties this restriction to the line independency_manager.dartthat makes it necessary.deps\/addons\; uninstall removes them.[InstallDelete]clearstemplates\anddata\before an upgrade, because Inno never removes a file a newer version dropped andexe_dir\templatesis the first path the worker searches. Saved presets are left alone.package-windows.ps1, becausebuild-windows.ymlassembles the package inline rather than calling that script (and the two zips differ in layout). That pre-existing split is untouched here..issis written against 6.Not changed
Test plan
flutter test test/packaging_test.dartpasses locally (10 tests)build-windows.ymldispatched on this branch; result to follow in a comment.deps\andaddons\are gone,%USERPROFILE%\.vapourboxis not🤖 Generated with Claude Code
https://claude.ai/code/session_014GLXdGLfPwgYjW1AkonGqN