name: CI on: push: branches: - '**' pull_request: permissions: contents: read concurrency: group: ci-${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: backend: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v7 - name: Setup Rust uses: dtolnay/rust-toolchain@stable with: components: rustfmt,clippy - name: Cache Rust uses: Swatinem/rust-cache@v2 with: workspaces: backend -> target - name: Rust format run: cargo fmt --manifest-path backend/Cargo.toml --check - name: Rust clippy run: cargo clippy --manifest-path backend/Cargo.toml --all-targets --all-features --locked -- -D warnings - name: Rust tests run: cargo test --manifest-path backend/Cargo.toml --test main --locked frontend: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v7 - name: Setup pnpm uses: pnpm/action-setup@v6 with: version: 11.7.0 - name: Setup Node uses: actions/setup-node@v6 with: node-version: 24 cache: pnpm cache-dependency-path: frontend/pnpm-lock.yaml - name: Install frontend dependencies run: pnpm --dir frontend install --frozen-lockfile - name: Frontend build run: pnpm --dir frontend build