feat: add macOS desktop client build workflow with ARM64 support and fix tunnel metrics task ownership
Add macos-desktop-client.yml workflow with manual dispatch trigger running on macos-arm64 runner. Install Node.js 22 and Rust toolchain with aarch64-apple-darwin target. Build bundled tunnel helper and Tauri application bundle, then upload .app, .dmg, and raw build artifacts. Fix tunnel_metrics handler to clone app handle before spawn_blocking to prevent ownership issues when passing to tunnel
This commit is contained in:
55
.gitea/workflows/macos-desktop-client.yml
Normal file
55
.gitea/workflows/macos-desktop-client.yml
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
name: Build macOS Desktop Client
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-macos-client:
|
||||||
|
name: Build macOS Client
|
||||||
|
runs-on: macos-arm64
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
working-directory: desktop-client
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "22"
|
||||||
|
|
||||||
|
- name: Install Rust toolchain
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
targets: aarch64-apple-darwin
|
||||||
|
|
||||||
|
- name: Install desktop client dependencies
|
||||||
|
run: npm install
|
||||||
|
|
||||||
|
- name: Build bundled macOS tunnel helper
|
||||||
|
run: npm run helper:macos-arm64
|
||||||
|
|
||||||
|
- name: Build macOS application bundle
|
||||||
|
run: npx tauri build --target aarch64-apple-darwin
|
||||||
|
|
||||||
|
- name: Upload macOS app bundle
|
||||||
|
uses: christopherhx/gitea-upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: NexaVPN-macos-app
|
||||||
|
path: |
|
||||||
|
desktop-client/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/*.app
|
||||||
|
desktop-client/src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/*.dmg
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
- name: Upload raw macOS build outputs
|
||||||
|
uses: christopherhx/gitea-upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: NexaVPN-macos-raw-build
|
||||||
|
path: |
|
||||||
|
desktop-client/src-tauri/target/aarch64-apple-darwin/release/nexavpn-desktop
|
||||||
|
desktop-client/src-tauri/bundled/macos-arm64/nexavpn-tunnel-helper
|
||||||
|
if-no-files-found: error
|
||||||
@@ -486,8 +486,9 @@ async fn tunnel_metrics(app: AppHandle, state: State<'_, AppState>) -> Result<Tu
|
|||||||
let session = session.as_ref().ok_or_else(|| "No active session is available".to_string())?;
|
let session = session.as_ref().ok_or_else(|| "No active session is available".to_string())?;
|
||||||
session.profile_path.clone()
|
session.profile_path.clone()
|
||||||
};
|
};
|
||||||
|
let metrics_app = app.clone();
|
||||||
let metrics = tauri::async_runtime::spawn_blocking(move || {
|
let metrics = tauri::async_runtime::spawn_blocking(move || {
|
||||||
tunnel_manager::metrics(&app, std::path::Path::new(&profile_path))
|
tunnel_manager::metrics(&metrics_app, std::path::Path::new(&profile_path))
|
||||||
})
|
})
|
||||||
.await
|
.await
|
||||||
.map_err(|err| format!("Unable to join tunnel metrics task: {err}"))??;
|
.map_err(|err| format!("Unable to join tunnel metrics task: {err}"))??;
|
||||||
|
|||||||
Reference in New Issue
Block a user