name: ci on: push: branches: [master] pull_request: jobs: # Domain schemas + deterministic services (TS side of the contract pipeline). typescript: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 24 cache: npm - run: npm ci - run: npm run typecheck # ADR-0002: contracts/ is generated from packages/domain and committed. # A dirty tree here means someone changed a zod schema without # re-exporting, or hand-edited a generated file. - run: npm run export:schemas && npm run make:fixtures - run: git diff --exit-code -- contracts/ - run: npm test # Generated pydantic models must accept/reject the same golden fixtures the # TS side does (docs/11 §3.2 dual-side contract test). python: runs-on: ubuntu-latest defaults: run: working-directory: skills-py steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version-file: skills-py/.python-version cache: pip cache-dependency-path: skills-py/requirements.txt - run: pip install -r requirements.txt # Generated models are committed but never hand-edited: regenerate and # require a clean tree. - run: bash scripts/generate_models.sh - run: git diff --exit-code -- vpp_contracts/ - run: python -m pytest -q # L2 eval harness end-to-end (docs/12): TS harness ↔ live Python skill # service on the committed synthetic dataset. The run must reproduce the # committed baseline digest exactly — a skill change that moves a metric # must come with a reviewed baseline update (docs/12 §3 gate). evals: runs-on: ubuntu-latest needs: [typescript, python] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 24 cache: npm - uses: actions/setup-python@v5 with: python-version-file: skills-py/.python-version cache: pip cache-dependency-path: skills-py/requirements.txt - run: npm ci - run: pip install -r skills-py/requirements.txt - name: start skill service working-directory: skills-py run: | python -m uvicorn vpp_skills.app:app --port 8000 --log-level warning & for i in $(seq 1 40); do curl -sf http://127.0.0.1:8000/health && break; sleep 0.5; done - run: npm run eval -w @vpp/evals -- --check