name: Build Desktop App on: push: branches: [ main, develop ] pull_request: branches: [ main ] release: types: [ published ] env: CARGO_TERM_COLOR: always RUST_BACKTRACE: 1 jobs: build: strategy: fail-fast: false matrix: include: - platform: 'macos-latest' args: '--target universal-apple-darwin' target: 'universal-apple-darwin' - platform: 'ubuntu-22.04' args: '' target: 'x86_64-unknown-linux-gnu' - platform: 'windows-latest' args: '' target: 'x86_64-pc-windows-msvc' runs-on: ${{ matrix.platform }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Install dependencies (Ubuntu only) if: matrix.platform == 'ubuntu-22.04' run: | sudo apt-get update sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 8 - name: Setup Rust uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.target }} - name: Rust cache uses: swatinem/rust-cache@v2 with: workspaces: './src-tauri -> target' - name: Install frontend dependencies run: pnpm install - name: Build frontend run: pnpm build - name: Build Tauri app uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: args: ${{ matrix.args }} - name: Upload artifacts (macOS) if: matrix.platform == 'macos-latest' uses: actions/upload-artifact@v4 with: name: macos-app path: | src-tauri/target/universal-apple-darwin/release/bundle/dmg/*.dmg src-tauri/target/universal-apple-darwin/release/bundle/macos/*.app - name: Upload artifacts (Linux) if: matrix.platform == 'ubuntu-22.04' uses: actions/upload-artifact@v4 with: name: linux-app path: | src-tauri/target/release/bundle/deb/*.deb src-tauri/target/release/bundle/appimage/*.AppImage - name: Upload artifacts (Windows) if: matrix.platform == 'windows-latest' uses: actions/upload-artifact@v4 with: name: windows-app path: | src-tauri/target/release/bundle/msi/*.msi src-tauri/target/release/bundle/nsis/*.exe release: if: github.event_name == 'release' needs: build runs-on: ubuntu-latest steps: - name: Download all artifacts uses: actions/download-artifact@v4 - name: Display structure of downloaded files run: ls -la - name: Upload release assets uses: softprops/action-gh-release@v1 with: files: | macos-app/**/* linux-app/**/* windows-app/**/* env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}