98e40dac97
CLI Smoke Test / smoke-test-linux (20) (push) Has been cancelled
CLI Smoke Test / smoke-test-linux (24) (push) Has been cancelled
CLI Smoke Test / smoke-test-windows (20) (push) Has been cancelled
CLI Smoke Test / smoke-test-windows (24) (push) Has been cancelled
Expo App TypeScript typecheck / typecheck (push) Has been cancelled
2.1 KiB
2.1 KiB
Tauri Desktop Packaging
Problem
Desktop app builds are manual and unsigned. macOS blocks unsigned apps. No CI pipeline exists for building cross-platform (macOS/Windows/Linux) distribution artifacts.
Current State
pnpm tauri:build:productionworks locally, outputs tosrc-tauri/target/release/bundle/- Frontend: Expo web export bundled into Tauri shell
- No code signing, no notarization, no CI workflow
- Three config variants: production, preview, dev
What's Needed
1. macOS Entitlements
Create src-tauri/entitlements.plist:
com.apple.security.network.clientcom.apple.security.cs.allow-jitcom.apple.security.cs.allow-unsigned-executable-memory
2. Signing Config (tauri.conf.json)
"bundle": {
"macOS": {
"signingIdentity": null,
"minimumSystemVersion": "10.13",
"entitlements": "./entitlements.plist"
}
}
Signing identity provided via APPLE_SIGNING_IDENTITY env var at build time.
3. GitHub Actions Workflow (.github/workflows/tauri-release.yml)
Matrix build on tag push (v*):
macos-latest->.dmg,.app.tar.gzwindows-latest->.msi,.nsisubuntu-latest->.AppImage,.deb
Uses tauri-apps/tauri-action — handles build + sign + upload to GitHub Release.
4. GitHub Secrets Required
| Secret | Platform | Purpose |
|---|---|---|
APPLE_SIGNING_IDENTITY |
macOS | Developer ID cert name |
APPLE_TEAM_ID |
macOS | 10-char team ID |
APPLE_ID |
macOS | Email for notarization |
APPLE_PASSWORD |
macOS | App-specific password |
APPLE_CERTIFICATE |
macOS | Base64 .p12 cert |
APPLE_CERTIFICATE_PASSWORD |
macOS | .p12 password |
Windows signing optional (SmartScreen warning but installable).
5. OTA Strategy (future)
Point frontendDist at hosted web app URL instead of bundled ../dist. JS updates deploy instantly without binary rebuild. Native updater only needed when Rust shell changes.
Release Flow
- Bump version in
tauri.conf.json git tag v0.2.0 && git push --tags- CI builds all platforms, creates GitHub Release with artifacts
- Add download link on happy.engineering