---
name: Type Check
on:
  push:
    branches: [main]
  pull_request:
permissions:
  contents: read
  pull-requests: read
concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.head_ref
    || github.ref }}
  cancel-in-progress: true
jobs:
  typecheck:
    name: Type Check TypeScript
    runs-on: ubuntu-22.04
    container:
      image: ghcr.io/tinyhumansai/openhuman_ci:rust-1.93.0
    steps:
      - name: Checkout code
        uses: actions/checkout@v5
        with:
          fetch-depth: 1
      - name: Cache pnpm store
        uses: actions/cache@v5
        with:
          path: ~/.local/share/pnpm/store
          key: pnpm-store-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
          restore-keys: |
            pnpm-store-${{ runner.os }}-
      - name: Install dependencies
        run: pnpm install --frozen-lockfile
      - name: Type check TypeScript files
        run: pnpm --filter openhuman-app compile
        env:
          NODE_ENV: test
      - name: Check Prettier formatting
        run: pnpm --filter openhuman-app format:check
        env:
          NODE_ENV: test
      - name: Run ESLint
        run: pnpm --filter openhuman-app lint
        env:
          NODE_ENV: test
  rust-quality:
    name: Rust Quality (fmt + clippy)
    runs-on: ubuntu-22.04
    container:
      image: ghcr.io/tinyhumansai/openhuman_ci:rust-1.93.0
    steps:
      - name: Checkout code
        uses: actions/checkout@v5
        with:
          fetch-depth: 1
      - name: Cache Rust build artifacts
        uses: Swatinem/rust-cache@v2
        with:
          workspaces: |
            . -> target
          cache-on-failure: true
      - name: Check formatting (cargo fmt)
        run: cargo fmt --all -- --check
      - name: Run clippy (core crate)
        run: cargo clippy -p openhuman
