# Tauri desktop (Linux) build — SEPARATE from ci.yml on purpose: this is a heavy # Rust + AppImage build (~20-40 min) that should NOT run on backend/frontend-only # pushes. Scoped to desktop/** (+ this file). Produces the .deb and .AppImage. # # Toolchain comes from the ci-tauri image (Rust + Node + WebKitGTK 4.1 + tauri-cli); # runs-on is just a registered scheduling label (Label Model B), not a per-purpose # runner. The frontend is built here because tauri's generate_context! embeds it. name: Desktop (Tauri) on: push: branches: [dev, main] tags: ["v*"] paths: - "desktop/**" - ".forgejo/workflows/desktop.yml" workflow_dispatch: concurrency: group: desktop-${{ github.ref }} cancel-in-progress: ${{ !startsWith(github.ref, 'refs/tags/') }} permissions: contents: read jobs: build: name: Tauri desktop (Linux) if: github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v') runs-on: python-ci container: image: git.fabledsword.com/bvandeusen/ci-tauri:1.97 env: # AppImage tooling (linuxdeploy) FUSE-mounts itself by default; CI containers # have no /dev/fuse, so tell it to extract-and-run instead. Without this the # AppImage bundle step fails with a FUSE error. APPIMAGE_EXTRACT_AND_RUN: "1" steps: - uses: actions/checkout@v6 # tauri's generate_context! embeds the built frontend at compile time, so the # frontend must exist before any cargo compile (clippy/test/build), not just # at bundle time. - name: Build the shared frontend run: npm ci && npm run build working-directory: frontend # Generate the platform icon set from the committed 1024px source PNG. - name: Generate app icons run: cargo tauri icon app-icon.png working-directory: desktop/src-tauri - name: Rust format check run: cargo fmt --check working-directory: desktop/src-tauri - name: Clippy run: cargo clippy --all-targets -- -D warnings working-directory: desktop/src-tauri - name: Test run: cargo test working-directory: desktop/src-tauri # Frontend already built above; skip the beforeBuildCommand rebuild. - name: Tauri build (deb + AppImage) run: cargo tauri build --config '{"build":{"beforeBuildCommand":""}}' working-directory: desktop/src-tauri