Skip to content

feat: in-app auto-update, quick-install scripts, and signed release pipeline - #7

Merged
aayush0325 merged 3 commits into
Recurse-Labs:masterfrom
NetVar1337:feat/auto-update
Oct 29, 2026
Merged

aayush0325 merged 3 commits into
Recurse-Labs:masterfrom
NetVar1337:feat/auto-update

Conversation

@NetVar1337

Copy link
Copy Markdown
Contributor

Summary

Adds the easiest realistic path for people to install and stay current on Recurse, using Tauri's own tooling end to end rather than a bespoke updater:

  • In-app auto-update via tauri-plugin-updater + tauri-plugin-process. On launch the app silently checks the latest GitHub Release's latest.json; if newer, the ⚙ settings icon shows a dot and the menu offers "Update to vX.Y.Z — restart to install". Manual "Check for updates" is always available in the same menu.
  • Signed release pipeline (.github/workflows/release.yml) — pushing a vX.Y.Z tag builds signed bundles for macOS (arm64 + x64), Linux (.deb/.rpm/.AppImage), and Windows (.msi/.exe) via tauri-apps/tauri-action, opens a draft GitHub Release, and writes the latest.json the updater reads. Updates are Ed25519-signed; only the public key is committed (tauri.conf.json → plugins.updater.pubkey), the private key stays in a TAURI_SIGNING_PRIVATE_KEY Actions secret.
  • One-line install scripts for first-time installs (the updater only updates an existing install):
    • scripts/install.sh (macOS/Linux) — picks .deb/.rpm and installs via the system package manager where available, else falls back to a ~/.local/bin .AppImage; on macOS mounts the .dmg and copies the .app into /Applications.
    • scripts/install.ps1 (Windows) — downloads the .msi/NSIS .exe for the detected arch and runs it.
  • docs/updating.md (how the updater works, security model) and docs/releasing.md (maintainer runbook: generate the signing keypair once, add the two secrets, tag & push).
  • README gets an "Install" section up top with both one-liners, and a note in "Build" that local builds don't self-update (expected — signing only happens in CI).

Why this shape

Tauri already ships a maintained, signed updater and an official GitHub Action for building/publishing cross-platform bundles — reusing both avoids a bespoke update server or unsigned-binary footgun. The curl | sh / irm | iex install scripts match the convention most CLI/desktop tools use for a first install; every subsequent version bump is then a tag push away with zero user action beyond clicking "Update".

Setup required before this is live (maintainer, see docs/releasing.md)

  1. npx tauri signer generate once; put the public key in tauri.conf.json (currently a REPLACE_WITH_TAURI_SIGNER_PUBLIC_KEY placeholder).
  2. Add TAURI_SIGNING_PRIVATE_KEY / TAURI_SIGNING_PRIVATE_KEY_PASSWORD repo secrets.
  3. Tag v0.1.0 (or current version) to cut the first release — the install scripts and updater endpoint both resolve against the latest release, so they start working the moment one exists.

Verification

@aayush0325

aayush0325 commented Sep 22, 2026 •

Copy link
Copy Markdown
Collaborator

hi, a release pipeline has been on my mind as well but i would love to do some more testing and UI changes before we release it to users and i won't be able to find the bandwidth to do that for a week as i have my exams 😓. keeping this on hold for a while, is that okay with you?

@NetVar1337

Copy link
Copy Markdown
Contributor Author

All good :)

@aayush0325

Copy link
Copy Markdown
Collaborator

thanks, keeping this open. i'll try to act on this asap

@aayush0325

Copy link
Copy Markdown
Collaborator

I suggest setting up - Husky or Lefthook as well; pre-commit for formatting/linting and pre-push for cargo clippy, type checks, and tests.

+1, haven't been able to find the bandwidth to do that. will do by monday

…date-conflicts

# Conflicts:
#	tauri/src/components/Header.tsx
Master replaced the header with a menu bar and dropped unused frontend
packages. Keep that, and hang the updater off Settings: a dot on the menu
when a release is ready, and Check for updates / Update to vX in the menu
and the command palette. package.json keeps master's dependencies plus the
updater plugins; the lockfile is regenerated from that.
@NetVar1337

Copy link
Copy Markdown
Contributor Author

Conflicts with current master are resolved in 54f19fc.

master deleted Header.tsx when the menu bar replaced it, and dropped unused frontend packages (@xterm/xterm, scroll-area, tw-animate). The updater stays, but it now lives under Settings instead of the old gear menu:

  • launch still checks silently
  • a dot on the Settings menu when a release is ready
  • Check for updates / Update to vX.Y.Z — restart to install in that menu and in the command palette

package.json keeps master's dependencies and adds @tauri-apps/plugin-process + @tauri-apps/plugin-updater. The lockfile was regenerated from that. Menu tests for the new command pass (26/26).

@aayush0325

Copy link
Copy Markdown
Collaborator

thank you!!

@aayush0325
aayush0325 merged commit 016dc20 into Recurse-Labs:master Oct 29, 2026
1 check passed
@github-actions github-actions Bot locked and limited conversation to collaborators Oct 29, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants