name: CI on: push: branches: [main, develop] pull_request: branches: [main] env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true jobs: lint: name: Lint (ruff) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.13" cache: pip - name: Install ruff run: pip install ruff - name: Run ruff run: ruff check src/ tests/ typecheck: name: Type check (mypy) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.13" cache: pip - name: Install dependencies run: pip install -r requirements/base.txt mypy types-PyYAML types-beautifulsoup4 types-requests - name: Run mypy run: mypy src/ --ignore-missing-imports test: name: Unit tests (pytest) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.13" cache: pip - name: Install dependencies run: pip install -r requirements/base.txt pytest pytest-cov - name: Run tests run: pytest tests/unit/ -v --cov=src --cov-report=term-missing integration: name: Integration tests (pytest) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.13" cache: pip - name: Install dependencies run: pip install -r requirements/base.txt pytest - name: Run integration tests run: pytest tests/integration/ -v evals-smoke: name: Eval smoke test (mock pipeline) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.13" cache: pip - name: Install dependencies run: pip install -r requirements/base.txt - name: Run smoke evals (mock, no LLM required) run: | PYTHONPATH=. python -m evals.run_evals \ --dataset evals/datasets/smoke.jsonl \ --mock \ --no-nli \ --output evals/reports/ \ --correctness-threshold 0.0 \ --faithfulness-threshold 0.0 - name: Upload eval report if: always() uses: actions/upload-artifact@v4 with: name: eval-report path: evals/reports/ evals-golden: name: Golden evals (Anthropic Haiku) if: ${{ secrets.ANTHROPIC_API_KEY != '' }} runs-on: ubuntu-latest env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.13" cache: pip - name: Install dependencies run: pip install -r requirements/base.txt - name: Run golden evals (live pipeline, Anthropic Haiku) run: | PYTHONPATH=. python -m evals.run_evals \ --dataset evals/datasets/golden_ci.jsonl \ --judge-provider anthropic \ --judge-model claude-haiku-4-5 \ --output evals/reports/ \ --faithfulness-threshold 0.7 \ --correctness-threshold 0.2 - name: Upload golden eval report if: always() uses: actions/upload-artifact@v4 with: name: eval-report-golden path: evals/reports/