Repository navigation
feat: in-app auto-update, quick-install scripts, and signed release pipeline - #7
Conversation
|
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? |
|
All good :) |
|
thanks, keeping this open. i'll try to act on this asap |
+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.
|
Conflicts with current
|
|
thank you!! |
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:
tauri-plugin-updater+tauri-plugin-process. On launch the app silently checks the latest GitHub Release'slatest.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..github/workflows/release.yml) — pushing avX.Y.Ztag builds signed bundles for macOS (arm64 + x64), Linux (.deb/.rpm/.AppImage), and Windows (.msi/.exe) viatauri-apps/tauri-action, opens a draft GitHub Release, and writes thelatest.jsonthe updater reads. Updates are Ed25519-signed; only the public key is committed (tauri.conf.json→plugins.updater.pubkey), the private key stays in aTAURI_SIGNING_PRIVATE_KEYActions secret.scripts/install.sh(macOS/Linux) — picks.deb/.rpmand installs via the system package manager where available, else falls back to a~/.local/bin.AppImage; on macOS mounts the.dmgand copies the.appinto/Applications.scripts/install.ps1(Windows) — downloads the.msi/NSIS.exefor the detected arch and runs it.docs/updating.md(how the updater works, security model) anddocs/releasing.md(maintainer runbook: generate the signing keypair once, add the two secrets, tag & push).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 | iexinstall 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)npx tauri signer generateonce; put the public key intauri.conf.json(currently aREPLACE_WITH_TAURI_SIGNER_PUBLIC_KEYplaceholder).TAURI_SIGNING_PRIVATE_KEY/TAURI_SIGNING_PRIVATE_KEY_PASSWORDrepo secrets.v0.1.0(or current version) to cut the first release — the install scripts and updater endpoint both resolve against thelatestrelease, so they start working the moment one exists.Verification
cargo check -p recurse/cargo clippy -p recurse --all-targets— clean (one pre-existing, unrelatedrecurse-agentwarning, same as noted in Multi-provider AI auth: Claude Pro/Max & GitHub Copilot OAuth + 25 API-key providers #6).cargo fmt --all --check— clean.npx tsc --noEmit— clean on every touched file (one pre-existing, untouchedagentStore.tserror remains, same as noted in Multi-provider AI auth: Claude Pro/Max & GitHub Copilot OAuth + 25 API-key providers #6).npx eslinton touched files — clean.npx vitest run— 11/11 passing, no regressions.bash -n scripts/install.sh— syntax valid.