| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209 |
- name: CI
- on:
- push:
- branches: [main]
- pull_request:
- branches: [main]
- workflow_dispatch:
- jobs:
- changes:
- name: Detect changes
- runs-on: ubuntu-22.04
- outputs:
- rust: ${{ github.event_name == 'workflow_dispatch' && 'true' || steps.filter.outputs.rust }}
- steps:
- - name: Checkout
- if: github.event_name != 'workflow_dispatch'
- uses: actions/checkout@v5
- with:
- fetch-depth: 0
- - name: Filter paths
- if: github.event_name != 'workflow_dispatch'
- uses: dorny/paths-filter@v4
- id: filter
- with:
- filters: |
- rust:
- - 'src-tauri/**'
- # PR / manual only. Merge to main already passed this on the PR;
- # do not compile the same debug tree again.
- check:
- name: Check Ubuntu
- needs: changes
- if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
- runs-on: ubuntu-22.04
- steps:
- - name: Checkout
- uses: actions/checkout@v5
- - name: Install Rust stable
- uses: dtolnay/rust-toolchain@stable
- - name: Install dependencies
- run: |
- sudo apt-get update
- sudo apt-get install -y curl libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf protobuf-compiler
- - name: Rust cache
- uses: Swatinem/rust-cache@v2
- with:
- workspaces: src-tauri
- cache-on-failure: true
- - name: Setup Node.js
- uses: actions/setup-node@v5
- with:
- node-version: 24
- cache: npm
- - name: Install frontend dependencies
- run: npm ci
- - name: Check frontend build
- run: npx vite build
- - name: Check Rust build
- working-directory: src-tauri
- run: cargo build
- check-windows:
- name: Check Windows (Rust)
- needs: changes
- if: >-
- (github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch') &&
- needs.changes.outputs.rust == 'true'
- runs-on: windows-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v5
- - name: Install Rust stable
- uses: dtolnay/rust-toolchain@stable
- - name: Install protoc
- uses: arduino/setup-protoc@v3
- with:
- repo-token: ${{ secrets.GITHUB_TOKEN }}
- - name: Rust cache
- uses: Swatinem/rust-cache@v2
- with:
- workspaces: src-tauri
- cache-on-failure: true
- - name: Check Rust build
- working-directory: src-tauri
- run: cargo build
- # Warm target/release on the default branch so tag builds can restore it.
- # Only when src-tauri changes (or manual dispatch). Frontend merges must not
- # pay for a 3-platform release compile.
- release-compile:
- name: Release compile ${{ matrix.display }}
- needs: changes
- if: github.event_name != 'pull_request' && needs.changes.outputs.rust == 'true'
- runs-on: ${{ matrix.platform }}
- env:
- CARGO_PROFILE_RELEASE_LTO: "false"
- CARGO_PROFILE_RELEASE_CODEGEN_UNITS: "16"
- CARGO_PROFILE_RELEASE_OPT_LEVEL: "1"
- strategy:
- fail-fast: false
- matrix:
- include:
- - platform: ubuntu-22.04
- display: Linux x64
- - platform: macos-latest
- display: macOS
- steps:
- - name: Checkout
- uses: actions/checkout@v5
- - name: Install Rust stable
- uses: dtolnay/rust-toolchain@stable
- - name: Install protoc (macOS)
- if: matrix.platform == 'macos-latest'
- run: |
- brew untap aws/tap || true
- brew install protobuf
- - name: Install dependencies (Ubuntu)
- if: matrix.platform == 'ubuntu-22.04'
- run: |
- sudo apt-get update
- sudo apt-get install -y curl libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf protobuf-compiler
- - name: Rust cache
- uses: Swatinem/rust-cache@v2
- with:
- workspaces: src-tauri
- shared-key: qmai-release
- add-job-id-key: false
- cache-on-failure: true
- - name: Setup Node.js
- uses: actions/setup-node@v5
- with:
- node-version: 24
- cache: npm
- - name: Install frontend dependencies
- run: npm ci
- - name: Build frontend
- run: npx vite build
- - name: Cargo release build
- working-directory: src-tauri
- run: cargo build --release
- release-compile-windows:
- name: Release compile Windows x64
- needs: changes
- if: github.event_name != 'pull_request' && needs.changes.outputs.rust == 'true'
- runs-on: windows-latest
- env:
- CARGO_PROFILE_RELEASE_LTO: "false"
- CARGO_PROFILE_RELEASE_CODEGEN_UNITS: "16"
- CARGO_PROFILE_RELEASE_OPT_LEVEL: "1"
- steps:
- - name: Checkout
- uses: actions/checkout@v5
- - name: Install Rust stable
- uses: dtolnay/rust-toolchain@stable
- - name: Install protoc (Windows)
- uses: arduino/setup-protoc@v3
- with:
- repo-token: ${{ secrets.GITHUB_TOKEN }}
- - name: Rust cache
- uses: Swatinem/rust-cache@v2
- with:
- workspaces: src-tauri
- shared-key: qmai-release
- add-job-id-key: false
- cache-on-failure: true
- - name: Setup Node.js
- uses: actions/setup-node@v5
- with:
- node-version: 24
- cache: npm
- - name: Install frontend dependencies
- run: npm ci
- - name: Build frontend
- run: npx vite build
- - name: Cargo release build
- working-directory: src-tauri
- run: cargo build --release
|