Skip to content

feat(release): ship the setup window, with NSIS as the updater's installer (I2) - #48

Merged
httpsphl merged 1 commit into
mainfrom
feat/setup-release
Sep 30, 2026
Merged

httpsphl merged 1 commit into
mainfrom
feat/setup-release

Conversation

@httpsphl

Copy link
Copy Markdown
Owner

What

The second milestone of the setup window (spec 15.7, I2). A release now carries two installers:

File For From
Botloft_<version>_x64-setup.exe people downloading Botloft; the name the README already gives pnpm bundle:setup
Botloft_<version>_x64-update.exe and .sig the in-app updater pnpm bundle (NSIS)
latest.json the updater's feed, pointing to -update.exe release.mjs
  • release.yml builds the setup window right after the signed installer.
  • release.mjs gains a stage step. It copies both installers under their final names into target\release\bundle\release\ and writes latest.json, so the files can be checked without creating a release. publish stages, then uploads what is there.
  • CI (App job) also runs vite build --mode setup, so the setup page cannot break only at release time.
  • Spec 15.5 and 15.7 and CLAUDE.md describe the new release. The README change lives in docs(readme): a README that shows Botloft #47, to merge with 0.6.0.

Why the new name is safe for updates

tauri-plugin-updater 2.13 decides how to install from the downloaded bytes, not the file name (extract_exe: any .exe is treated as NSIS), and runs it with the same /P /UPDATE /R. Installed apps, 0.5.0 included, keep updating from latest.json.

Tests

  • release.mjs stage locally, with a stand-in .sig since the signing key lives in CI:
    • it produced -setup.exe (the setup window, 15.4 MB), -update.exe (byte-identical to the NSIS build), its .sig and latest.json;
    • latest.json points to .../releases/download/v0.5.0/Botloft_0.5.0_x64-update.exe.
  • vite build --mode setup and Biome pass.

Still to try by hand

  • The 0.6.0 release run itself: both files in the draft, and latest.json pointing to -update.exe.
  • The updater taking an installed 0.5.0 to 0.6.0 through -update.exe.

…aller

A release now carries two installers (spec 15.7, I2): the setup window
people download, as Botloft_<version>_x64-setup.exe (the name the README
already gives), and the NSIS installer the in-app updater runs, as
Botloft_<version>_x64-update.exe with its signature. latest.json points
to the second.

release.yml builds the setup window after the signed installer.
release.mjs gains a `stage` step that copies both under their final names
and writes latest.json, so the files can be checked without a release;
`publish` stages and uploads. The updater tells an NSIS installer by its
bytes, not its name (tauri-plugin-updater 2.13, extract_exe), so the new
name is safe. CI now also builds the setup page, so it cannot break only
at release time.
@httpsphl
httpsphl enabled auto-merge September 30, 2026 02:44
@httpsphl httpsphl mentioned this pull request Sep 30, 2026
@httpsphl
httpsphl merged commit 1c5f29b into main Sep 30, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant