# ClawPanel 持续集成工作流
# 在推送到 main 分支或提交 PR 到 main 分支时自动运行
name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

# 同一分支的新提交会取消正在运行的旧工作流
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  check:
    name: 检查 (${{ matrix.platform.name }})
    runs-on: ${{ matrix.platform.os }}
    strategy:
      fail-fast: false
      matrix:
        platform:
          # macOS Apple Silicon
          - name: macOS (ARM64)
            os: macos-latest
          # Linux x86_64
          - name: Linux (x64)
            os: ubuntu-latest
          # Windows x86_64
          - name: Windows (x64)
            os: windows-latest

    steps:
      # 签出代码
      - name: 签出代码
        uses: actions/checkout@v4

      # 安装 Node.js 22
      - name: 安装 Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm

      # 安装前端依赖
      - name: 安装前端依赖
        run: npm ci

      # 安装 Rust 工具链 (stable)
      - name: 安装 Rust 工具链
        uses: dtolnay/rust-toolchain@stable

      # Rust 编译缓存
      - name: Rust 编译缓存
        uses: swatinem/rust-cache@v2
        with:
          workspaces: src-tauri -> target

      # Linux 专用: 安装 Tauri v2 系统依赖
      - name: 安装 Linux 系统依赖
        if: runner.os == 'Linux'
        run: |
          sudo apt-get update
          sudo apt-get install -y \
            libwebkit2gtk-4.1-dev \
            librsvg2-dev \
            patchelf \
            libssl-dev \
            libgtk-3-dev \
            libayatana-appindicator3-dev

      # Rust 格式检查
      - name: Rust 格式检查
        working-directory: src-tauri
        run: cargo fmt --all -- --check

      # Rust 编译检查
      - name: Rust 编译检查
        working-directory: src-tauri
        run: cargo check

      # Rust Lint（警告视为错误）
      - name: Rust Clippy
        working-directory: src-tauri
        run: cargo clippy --all-targets -- -D warnings

      # 前端构建验证
      - name: 前端构建验证
        run: npm run build
