ci: build windows/linux/macos desktop clients - #34
Merged
Conversation
Release workflow gains a `desktop` job producing installable packages of the Tauri GUI for every desktop platform: - macOS: .dmg for aarch64 + x86_64 (bundler builds the .app, then CI injects gfwlist.txt + GeoLite2-Country.mmdb into Contents/MacOS next to the bundled client, re-signs ad-hoc, and creates the dmg via hdiutil) - Linux: .deb + .AppImage for x86_64 (aarch64 skipped — WebKitGTK has no practical cross-compile story on a GitHub runner) - Windows: NSIS -setup.exe for x64 + ARM64, with gfwlist.txt, GeoLite2-Country.mmdb, wintun.dll, and THIRD-PARTY-NOTICES.txt installed next to the exe via bundle resources Each package bundles the matching-arch shadowvpn-client as a Tauri externalBin sidecar, which lands next to the app executable — exactly where the app's `app_dir` resolution and the client's bundled-data auto-discovery look. The sidecar/resources wiring lives in a CI-generated `--config` overlay, so local `cargo run` needs no pre-staged files. CI also gains a `desktop check` job (fmt + clippy) on all three OSes — the desktop crate previously had zero CI coverage, and its per-OS elevation/kill code paths need per-OS compilation to be checked at all. Verified locally on macOS: overlay build places the sidecar in Contents/MacOS, injection + ad-hoc re-sign passes codesign --verify, hdiutil produces the dmg. Co-Authored-By: Claude Fable 5 <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.
Summary
desktopjob building installable packages of the Tauri GUI:.dmgforaarch64-apple-darwin+x86_64-apple-darwin. The bundler builds the.app, then CI injectsgfwlist.txt+GeoLite2-Country.mmdbintoContents/MacOS(next to the bundled client, where auto-discovery looks), re-signs ad-hoc, and creates the dmg withhdiutil(more reliable on CI than the bundler's AppleScript dmg step)..deb+.AppImageforx86_64-unknown-linux-gnu(aarch64 skipped: WebKitGTK has no practical cross-compile story on a GitHub runner).-setup.exefor x64 and ARM64, installinggfwlist.txt,GeoLite2-Country.mmdb, the matching-archwintun.dll, andTHIRD-PARTY-NOTICES.txtnext to the exe via bundle resources.shadowvpn-clientas a TauriexternalBinsidecar — it lands next to the app executable, exactly where the app'sapp_dirresolution and the client's bundled-data auto-discovery look.--configoverlay, nottauri.conf.json, so localcargo runstill needs no pre-staged files. On tag builds the overlay also stamps the release version into the installer metadata.desktop checkjob (fmt + clippy) on ubuntu/macos/windows — the desktop crate previously had zero CI coverage, and itscfg(target_os)elevation/kill paths need per-OS compilation to be checked at all.Test plan
actionlintclean on both workflows; YAML parses.shadowvpn-clientsidecar inContents/MacOS, data injection + ad-hoc re-sign passescodesign --verify --deep --strict,hdiutilproduces a 9 MB dmg.release.ymlon this branch to exercise all five desktop matrix entries before merging.🤖 Generated with Claude Code