name: CI

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

jobs:
  pr-title:
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-latest
    permissions:
      pull-requests: read

    steps:
      - name: Validate PR title
        uses: amannn/action-semantic-pull-request@v6.1.1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          requireScope: false
          types: |
            feat
            fix
            docs
            refactor
            chore
            test
            ci
            build
            perf
            revert

  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v6
        # Full history so release:validate can read the base-branch (origin/main)
        # release-please manifest when checking release-as pins for staleness.
        with:
          fetch-depth: 0

      - name: Setup Bun
        uses: oven-sh/setup-bun@v2
        with:
          bun-version: latest

      - name: Install dependencies
        run: bun install

      - name: Validate release metadata
        run: bun run release:validate

      # Canonical schema check: runs `claude plugin validate` against the
      # marketplace catalog and each plugin directory (blocking, non-strict).
      # The CLI must be installed via npm, not bun: `bun x` cannot run this
      # package (bun blocks its required postinstall and cannot resolve its
      # `claude` bin name), and `bun run` rewrites `npx` in package.json
      # scripts to the broken `bun x`, so the script invokes a `claude`
      # already on PATH instead.
      #
      # The validator version is pinned deliberately for reproducible CI: a
      # floating @latest would track new upstream validation rules
      # automatically but could break CI without any repo change. Bump the
      # pin intentionally to adopt new `claude plugin validate` rules (and
      # revisit --strict below when doing so).
      #
      # --strict (warnings-as-errors) should be enabled once this known
      # warning is fixed:
      #   . -- 1 warning:
      #     "root: CLAUDE.md at the plugin root is not loaded as project context. To ship context with your plugin, use a skill (skills/<name>/SKILL.md) instead."
      - name: Validate plugin schema (claude plugin validate)
        run: |
          npm install -g @anthropic-ai/claude-code@2.1.175
          bun run plugin:validate

      - name: Run tests
        run: bun test
