name: CI

on:
  # Run on every PR so a contributor's first push gets feedback.
  pull_request:
  # Also run on direct pushes to main so the "main is green" signal is real.
  # Without this, main can silently break for days when someone bypasses
  # review. (#249)
  push:
    branches: [main]

# Cancel any in-flight CI for the same ref when a new commit is pushed —
# saves runner minutes and keeps the latest commit's status the only one
# anyone reads. `github.ref` is a controlled value (refs/heads/* or
# refs/pull/*/merge), not user-controlled input, so it's safe to interpolate.
concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: true

jobs:
  ci:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: pnpm/action-setup@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: pnpm
          cache-dependency-path: pnpm-lock.yaml

      - name: Install dependencies
        run: pnpm install

      - name: Lint
        run: pnpm lint

      - name: Build core
        run: pnpm --filter @understand-anything/core build

      - name: Build skill
        run: pnpm --filter @understand-anything/skill build

      - name: Test core
        run: pnpm --filter @understand-anything/core test

      - name: Test skill
        run: pnpm test
