Skip to content

feat(release): Linux and macOS packages in every release - #100

Merged
httpsphl merged 2 commits into
mainfrom
feat/unix-release
Oct 1, 2026
Merged

httpsphl merged 2 commits into
mainfrom
feat/unix-release

Conversation

@httpsphl

@httpsphl httpsphl commented Oct 1, 2026

Copy link
Copy Markdown
Owner

Slice 5 of Linux/macOS support (spec 18, item 8): every release ships Botloft for Linux and macOS, next to Windows.

Packages

  • Linux: .deb and AppImage, built on Ubuntu 22.04 so the AppImage also runs on older distributions. Tauri sets the .deb dependencies (WebKitGTK, GTK, the tray's appindicator).
  • macOS: .dmg and the updater's .app.tar.gz, for Apple Silicon (macOS 11+). There is no Apple Developer account yet, so the app is not notarized, only ad-hoc signed (signingIdentity: "-"). Without any signature macOS calls the app damaged; ad-hoc signed, the owner allows it once in System Settings → Privacy & Security → Open Anyway. The release notes say so.
  • The targets live in tauri.linux.conf.json and tauri.macos.conf.json, which Tauri merges on each system. pnpm bundle is the same command everywhere.

Release workflow

  • One build job per system (Windows, Ubuntu 22.04, macOS). Each runs pnpm bundle (plus bundle:setup on Windows), then release.mjs stage <system>, attests its files and uploads them as an artifact. A final job merges them and runs release.mjs publish.
  • The single draft release has one latest.json, with windows-x86_64, linux-x86_64-appimage, linux-x86_64-deb and darwin-aarch64. The updater plugin (2.13) looks for <os>-<arch>-<installer> first, so a .deb install gets the .deb (installed with dpkg -i) and an AppImage gets the AppImage.
  • workflow_dispatch builds the same files as artifacts, without checking the tag, attesting or releasing. That is how this PR was checked.

Checked (dry run)

The release workflow, run by hand on this branch, built all three; run 36940758756.

  • Windows: -setup.exe and -update.exe, as before.
  • Linux: the AppImage and the .deb, each with its .sig. In a Debian container, the .deb puts Botloft and botloftd in /usr/bin, and botloftd --version answers 0.7.0.
  • macOS: the .dmg and the .app.tar.gz, with .sig. Botloft.app/Contents/MacOS holds both Botloft and botloftd, where the app looks for the daemon, and has a _CodeSignature.

Not done yet

  • Not tried by hand: installing and opening the packages on a real Linux desktop and a real Mac (Gatekeeper's "Open Anyway" flow), and an update from one release to the next.
  • Intel Macs: they get nothing yet; that would take a second macOS job or a universal build.
  • README: it still says Windows only. I'd update it once a release with these files is published.

- Linux: .deb and AppImage, built on Ubuntu 22.04; macOS: .dmg and the
  updater's .app.tar.gz for Apple Silicon, ad-hoc signed (no Apple
  Developer account yet, so not notarized).
- One build job per system stages its files and a manifest; a final job
  merges them into one draft release and one latest.json, with an
  updater entry per system and installer (AppImage and .deb apart).
- Run by hand, the workflow builds the same files as artifacts without
  attesting or releasing, to try packaging on a branch.
It already adds libayatana-appindicator3-1 for the tray icon; the dry
run showed it twice.
@httpsphl
httpsphl merged commit 2be988c into main Oct 1, 2026
4 checks passed
@httpsphl httpsphl mentioned this pull request Oct 1, 2026
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