--- name: iOS Compile Sanity on: workflow_dispatch: permissions: # `actions: read` lets scripts/ci-cancel-aware.sh poll the run status so # cancelled builds inside container jobs stop themselves (docker exec # swallows the runner's signals). actions: read contents: read pull-requests: read env: # Consumed by scripts/ci-cancel-aware.sh's cancellation watchdog. GH_TOKEN: ${{ github.token }} concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.head_ref || github.ref }} cancel-in-progress: true jobs: ios-compile: name: iOS Compile Check runs-on: macos-latest timeout-minutes: 30 env: # Pin the deployment target so swift-rs invokes the Swift compiler with # `-target arm64-apple-ios16.0`. Matches Package.swift in # packages/tauri-plugin-ptt/ios/, which uses iOS 14+ APIs (OSLog). IPHONEOS_DEPLOYMENT_TARGET: "16.0" steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 1 # The mobile crate uses stock Tauri (no CEF), so we don't need # `submodules: recursive` — which would try to clone the # `app/src-tauri/vendor/tauri-cef` submodule, a step that # intermittently fails on macOS runners for fork PRs. submodules: false - name: Set up Rust uses: dtolnay/rust-toolchain@stable with: toolchain: "1.93.0" targets: aarch64-apple-ios - name: Cache Rust build artifacts uses: Swatinem/rust-cache@v2 with: workspaces: | . -> target app/src-tauri-mobile -> target packages/tauri-plugin-ptt -> target cache-on-failure: true - name: Set up pnpm uses: pnpm/action-setup@v4 - name: Set up Node uses: actions/setup-node@v4 with: node-version: "24" cache: "pnpm" - name: Install dependencies run: bash scripts/ci-cancel-aware.sh pnpm install --frozen-lockfile # Hard gate: mobile Tauri host compiles for iOS. No more soft-gate # `continue-on-error` — the mobile crate uses stock Tauri without CEF # so cef-dll-sys is not in the dependency graph. - name: cargo check -- mobile host (aarch64-apple-ios) run: bash scripts/ci-cancel-aware.sh cargo check --manifest-path app/src-tauri-mobile/Cargo.toml --target aarch64-apple-ios # Hard gate: PTT plugin (host-target check; Swift sources are built # lazily by swift-rs during the iOS-target check above). - name: cargo check -- tauri-plugin-ptt run: bash scripts/ci-cancel-aware.sh cargo check --manifest-path packages/tauri-plugin-ptt/Cargo.toml # Hard gate: TypeScript compile. - name: pnpm compile run: bash scripts/ci-cancel-aware.sh pnpm --dir app compile # Hard gate: iOS-relevant Vitest suites. - name: pnpm test (iOS suites) run: > bash scripts/ci-cancel-aware.sh pnpm --dir app test -- src/services/transport src/lib/tunnel src/pages/ios src/components/settings/panels/devices