name: CI on: push: branches: [main] pull_request: branches: [main] workflow_dispatch: jobs: lint-and-test: name: Lint & Test runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Linux dependencies run: | sudo apt-get update sudo apt-get install -y \ libwebkit2gtk-4.1-dev \ librsvg2-dev \ patchelf \ libgtk-3-dev \ libayatana-appindicator3-dev - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 9 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 22 cache: pnpm - name: Install frontend dependencies run: pnpm install - name: Run ESLint run: pnpm lint - name: Run Prettier check run: pnpm format:check - name: Build frontend run: pnpm build - name: Run frontend tests run: pnpm test - name: Setup Rust uses: dtolnay/rust-toolchain@stable with: components: clippy - name: Cache Rust dependencies uses: actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ src-tauri/target/ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Run Clippy working-directory: src-tauri run: cargo clippy --all-targets --all-features -- -D warnings - name: Run Rust tests working-directory: src-tauri run: cargo test build-linux: name: Build Linux runs-on: ubuntu-latest needs: lint-and-test steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Linux dependencies run: | sudo apt-get update sudo apt-get install -y \ libwebkit2gtk-4.1-dev \ librsvg2-dev \ patchelf \ libgtk-3-dev \ libayatana-appindicator3-dev \ xdg-utils - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 9 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 22 cache: pnpm - name: Install frontend dependencies run: pnpm install - name: Setup Rust uses: dtolnay/rust-toolchain@stable - name: Cache Rust dependencies uses: actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ src-tauri/target/ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Build Linux run: pnpm build:linux build-windows: name: Build Windows (cross-compile) runs-on: ubuntu-latest needs: lint-and-test steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Linux dependencies for cross-compilation run: | sudo apt-get update sudo apt-get install -y \ libwebkit2gtk-4.1-dev \ librsvg2-dev \ patchelf \ libgtk-3-dev \ libayatana-appindicator3-dev \ clang \ lld \ llvm \ nsis - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 9 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 22 cache: pnpm - name: Install frontend dependencies run: pnpm install - name: Setup Rust uses: dtolnay/rust-toolchain@stable with: targets: x86_64-pc-windows-msvc - name: Install cargo-xwin run: | curl -fsSL https://github.com/rust-cross/cargo-xwin/releases/download/v0.20.2/cargo-xwin-v0.20.2.x86_64-unknown-linux-musl.tar.gz | tar xz sudo mv cargo-xwin /usr/local/bin/ - name: Cache Rust dependencies uses: actions/cache@v4 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ src-tauri/target/ key: ${{ runner.os }}-cargo-windows-${{ hashFiles('**/Cargo.lock') }} - name: Build Windows run: pnpm build:windows