Linux build support + cross-platform brew hardening#9
Closed
msitarzewski wants to merge 1 commit into
Closed
Conversation
Adds Linux as a build target alongside macOS. Verified end-to-end on
arm64 Ubuntu: builds .deb/.rpm/.AppImage, installs, launches, detects
Linuxbrew, loads packages. macOS regression-clean (586 tests pass).
Backend
- keyring: per-target Cargo features — macOS apple-native, Linux
sync-secret-service + crypto-rust (Secret Service via gnome-keyring/
kwallet; pure-Rust crypto, no system OpenSSL). github/auth.rs
unchanged — unified keyring::Entry API.
- brew/paths.rs: detect Linuxbrew prefixes (/home/linuxbrew/.linuxbrew,
~/.linuxbrew) alongside the macOS prefixes.
- brew/exec.rs: pin every brew subprocess to a known-readable cwd ("/").
Fixes "current working directory must be readable" failures when the
app is launched from a dir the user can't read (surfaced on Linux as
"Couldn't load packages"). Hardening on macOS too.
- commands/disk_usage.rs: open_in_finder reveal is cfg-gated — macOS
`open -R`, Linux `xdg-open` on the parent dir. IPC name unchanged.
- commands/cask_icon.rs: macOS .app/sips/defaults extraction cfg-gated;
Linux short-circuits to Ok(None) (homepage-favicon cascade still works).
- lib.rs: native menu gated to macOS. On Linux/GTK it rendered as an
in-window menubar strip that clashed with the transparent window
config; Linux now gets a clean chromeless window.
Frontend
- platform.ts: navigator-based isMac/isLinux, zero new deps.
- "Reveal in Finder" -> "Show in file manager" on Linux; "macOS
Keychain" -> "system keyring" generic on Linux.
Packaging / CI
- .github/workflows/linux-build.yml: ubuntu-22.04 (webkit2gtk-4.1 era,
oldest-glibc floor), builds + uploads .deb/.rpm/.AppImage.
- tauri.conf.json: bundle.linux deb depends + appimage config; macOS
bundle untouched. tauri.linux.conf.json: transparent:false for Linux.
- publish-manifest.sh: emits a linux-x86_64 updater block when the
AppImage + .sig are present; macOS-only path byte-identical otherwise.
Docs
- README Linux install + build sections; memory-bank techContext/
decisions/activeContext/progress + task record 21-linux-support.md.
Known gaps (honest): casks unsupported on Linux (brew vulns + cask
icons are formula/macOS-only); Linux artifacts ship unsigned for v0;
the in-app vibrancy dropdown was already dead-wired (separate cleanup).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
Adds Linux as a build target alongside macOS. Verified end-to-end on arm64 Ubuntu 26.04 (in a Parallels VM): builds
.deb/.rpm/.AppImage, installs the.deb, launches into a GNOME/Wayland session, detects Linuxbrew, and loads packages. macOS regression-clean — 586 tests pass,cargo checkclean,npm run check0 errors.Backend
apple-native; Linuxsync-secret-service+crypto-rust(Secret Service via gnome-keyring/kwallet, pure-Rust crypto so no system OpenSSL).github/auth.rsunchanged — unifiedkeyring::EntryAPI./home/linuxbrew/.linuxbrew,~/.linuxbrew)./). Fixes "current working directory must be readable" failures (surfaced on Linux as "Couldn't load packages" when launched from an unreadable dir). Hardening on macOS too.open_in_finderreveal cfg-gated — macOSopen -R, Linuxxdg-openon parent dir. IPC name unchanged..app/sips/defaultsextraction cfg-gated; Linux short-circuits toOk(None)(homepage-favicon cascade still works).Frontend
platform.ts— navigator-basedisMac/isLinux, zero new deps.Packaging / CI
.github/workflows/linux-build.yml—ubuntu-22.04(webkit2gtk-4.1, oldest-glibc floor), builds + uploads.deb/.rpm/.AppImage.tauri.conf.jsonlinux bundle config;tauri.linux.conf.jsonsetstransparent:false. macOS bundle untouched.publish-manifest.shemits alinux-x86_64updater block when the AppImage +.sigare present; macOS-only path byte-identical otherwise.Known gaps (honest)
brew vulns+ cask icons are formula/macOS-only) — UI states this rather than faking it.Test plan
linux-build.ymlgoes green, produces the three artifactscargo test(586),npm run check(0 err), app launches normally.deb, launch, brew detected, package list loads🤖 Generated with Claude Code