From 0c9a20ca684155b433c382d9eab1958e7fa677f5 Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 2 Apr 2026 17:28:01 +0800 Subject: [PATCH] ci: add PR and push quality checks workflow --- .github/workflows/ci.yml | 102 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..d2a007210 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,102 @@ +name: CI + +on: + pull_request: + branches: [main] + push: + branches: [main] + +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +jobs: + frontend: + name: Frontend Checks + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + + - name: Setup pnpm + uses: pnpm/action-setup@v2 + with: + version: 10.12.3 + run_install: false + + - name: Get pnpm store directory + id: pnpm-store + shell: bash + run: echo "path=$(pnpm store path --silent)" >> $GITHUB_OUTPUT + + - name: Cache pnpm store + uses: actions/cache@v4 + with: + path: ${{ steps.pnpm-store.outputs.path }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: TypeScript type check + run: pnpm typecheck + + - name: Check formatting + run: pnpm format:check + + - name: Lint + run: pnpm lint + + - name: Unit tests + run: pnpm test:unit + + backend: + name: Backend Checks + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt, clippy + + - name: Install Linux system deps + run: | + sudo apt-get update + sudo apt-get install -y --no-install-recommends \ + build-essential pkg-config libssl-dev \ + libgtk-3-dev librsvg2-dev libayatana-appindicator3-dev + sudo apt-get install -y --no-install-recommends libwebkit2gtk-4.1-dev \ + || sudo apt-get install -y --no-install-recommends libwebkit2gtk-4.0-dev + sudo apt-get install -y --no-install-recommends libsoup-3.0-dev \ + || sudo apt-get install -y --no-install-recommends libsoup2.4-dev + + - name: Cache Cargo registry and build + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + src-tauri/target + key: ${{ runner.os }}-cargo-${{ hashFiles('src-tauri/Cargo.lock') }} + restore-keys: ${{ runner.os }}-cargo- + + - name: Create frontend dist placeholder + run: mkdir -p dist + + - name: Check Rust formatting + run: cargo fmt --check --manifest-path src-tauri/Cargo.toml + + - name: Clippy + run: cargo clippy --manifest-path src-tauri/Cargo.toml -- -D warnings + + - name: Run tests + run: cargo test --manifest-path src-tauri/Cargo.toml