* ci: add temporary test workflow for portable ZIP validation * ci: fix mock setup in test workflow * ci: remove temporary test workflow * feat: add portable mode option to NSIS installer Custom NSIS template based on tauri-v2.9.1 upstream with 6 targeted modifications for portable mode support: - New PortableMode variable and /PORTABLE CLI flag for silent installs - Install type selection page with Normal/Portable radio buttons - Conditional default directory (Desktop for portable, LocalAppData for normal) - Skip registry writes, file associations, deep links, and uninstaller for portable - Skip Start Menu and desktop shortcuts for portable installs - Create portable marker file and Data/ directory on portable install The existing portable.rs runtime detection is unchanged — it looks for the same marker file this installer creates. Usage: GUI: select "Portable Installation" on the install type page Silent: Handy_setup.exe /S /PORTABLE /D=C:\path\to\Handy Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: implement true portable mode via source code path override Detect a `portable` marker file next to the executable at startup. When present, redirect all data paths (settings, models, recordings, database, logs) to a local `Data/` directory instead of %APPDATA%. This approach works because it intercepts path resolution at the Rust level, bypassing Tauri/Windows Shell API limitations that made the previous environment-variable and junction approaches unreliable. Changes: - Add src-tauri/src/portable.rs with OnceLock-based detection - Replace all app.path().app_data_dir() calls with portable helper - Configure tauri-plugin-log to use Folder target when portable - Configure tauri-plugin-store with absolute path when portable - Simplify build.yml portable ZIP (exe + resources + marker file) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: add missing Manager trait import in portable.rs The .path() method on AppHandle requires `tauri::Manager` in scope. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: redirect WebView2 cache to portable Data dir Move main window creation from tauri.conf.json to setup closure so we can set data_directory when in portable mode. This prevents WebView2 from creating %LOCALAPPDATA%\com.pais.handy. Also set data_directory on the recording overlay window. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: auto-detect portable mode during updates When the Tauri updater runs the installer with /UPDATE, the install type page is skipped and /PORTABLE is not passed. Detect the existing portable marker file in .onInit so updates preserve portable mode automatically. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * style: fix prettier formatting in portable.rs and lib.rs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: CJ Pais <cj@cjpais.com>
75 lines
1.8 KiB
JSON
75 lines
1.8 KiB
JSON
{
|
|
"$schema": "https://schema.tauri.app/config/2",
|
|
"productName": "Handy",
|
|
"version": "0.7.9",
|
|
"identifier": "com.pais.handy",
|
|
"build": {
|
|
"beforeDevCommand": "bun run dev",
|
|
"devUrl": "http://localhost:1420",
|
|
"beforeBuildCommand": "bun run build",
|
|
"frontendDist": "../dist"
|
|
},
|
|
"app": {
|
|
"macOSPrivateApi": true,
|
|
"windows": [],
|
|
"security": {
|
|
"csp": null,
|
|
"assetProtocol": {
|
|
"enable": true,
|
|
"scope": {
|
|
"allow": ["**"],
|
|
"requireLiteralLeadingDot": false
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"bundle": {
|
|
"active": true,
|
|
"createUpdaterArtifacts": true,
|
|
"targets": "all",
|
|
"resources": ["resources/**/*"],
|
|
"license": "MIT",
|
|
"icon": [
|
|
"icons/32x32.png",
|
|
"icons/128x128.png",
|
|
"icons/128x128@2x.png",
|
|
"icons/icon.icns",
|
|
"icons/icon.ico"
|
|
],
|
|
"macOS": {
|
|
"files": {},
|
|
"hardenedRuntime": true,
|
|
"minimumSystemVersion": "10.13",
|
|
"signingIdentity": "-",
|
|
"entitlements": "Entitlements.plist"
|
|
},
|
|
"linux": {
|
|
"deb": {
|
|
"depends": ["libgtk-layer-shell0"]
|
|
},
|
|
"rpm": {
|
|
"compression": {
|
|
"type": "none"
|
|
}
|
|
},
|
|
"appimage": {
|
|
"bundleMediaFramework": true,
|
|
"files": {}
|
|
}
|
|
},
|
|
"windows": {
|
|
"signCommand": "trusted-signing-cli -e https://eus.codesigning.azure.net/ -a CJ-Signing -c cjpais-dev -d Handy %1",
|
|
"nsis": {
|
|
"template": "nsis/installer.nsi"
|
|
}
|
|
}
|
|
},
|
|
"plugins": {
|
|
"updater": {
|
|
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEJBQjcyMDk1MjA2NjAxRjkKUldUNUFXWWdsU0MzdXRRZi8zYzhqV2FaNUVDbDd2Rk5VM1IvWWowVXdmRFNKQ1BrMXF5RFFsLy8K",
|
|
"endpoints": [
|
|
"https://github.com/cjpais/Handy/releases/latest/download/latest.json"
|
|
]
|
|
}
|
|
}
|
|
}
|