name: CI

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

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - name: Set up Python 3.11
        uses: actions/setup-python@v5
        with:
          python-version: "3.11"

      - name: Install dependencies
        run: pip install ".[dev]"

      - name: Session handover gate
        run: python3 scripts/session_handover_check.py --strict --ci

      - name: Validate governance assets
        env:
          GOVERNANCE_PR_TITLE: ${{ github.event.pull_request.title }}
          GOVERNANCE_PR_BODY: ${{ github.event.pull_request.body }}
        run: |
          RANGE=""
          if [ "${{ github.event_name }}" = "pull_request" ]; then
            RANGE="${{ github.event.pull_request.base.sha }}...${{ github.sha }}"
          elif [ "${{ github.event_name }}" = "push" ] && [ "${{ github.event.before }}" != "0000000000000000000000000000000000000000" ]; then
            RANGE="${{ github.event.before }}...${{ github.sha }}"
          fi
          if [ -n "$RANGE" ]; then
            python3 scripts/validate_governance_assets.py "$RANGE"
          else
            python3 scripts/validate_governance_assets.py
          fi

      - name: Validate Ouroboros docs
        run: python3 scripts/validate_ouroboros_docs.py

      - name: Validate docs sync
        run: python3 scripts/validate_docs_sync.py

      - name: Lint
        run: ruff check src/ tests/

      - name: Type check
        run: mypy src/ --strict
        continue-on-error: true

      - name: Run tests with coverage
        run: pytest -v --cov=src --cov-report=term-missing --cov-fail-under=80

      - name: Upload coverage
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: coverage-report
          path: htmlcov/
