name: CI on: push: pull_request: jobs: unified-api: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install shared and API packages run: python -m pip install -e ".[dev]" -e "./shared" -e "./interpreter[dev]" - name: Scriber and combined-app tests run: pytest - name: Shared normalization characterization run: python -m pytest shared/tests - name: Regenerate term artifacts without drift run: python scripts/build_term_artifacts.py && git diff --exit-code -- data/medical_lexicon.json interpreter/app/glossary/data/seed_glossary.csv - name: Enforce serving/training import boundary run: if rg -l 'from gec|import gec' scribe/carepath/; then exit 1; fi - name: Scriber smoke test (mock ASR + offline LLM) run: python scripts/smoke_backend.py training-governance: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install CPU-only training proof dependencies run: python -m pip install -e ".[dev]" -e "./shared" - name: Test training governance and export smoke run: python -m pytest scribe/training/tests - name: Verify the committed frozen baseline report run: python scribe/training/scripts/baseline_report.py interpreter: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install shared and interpreter run: python -m pip install -e "./shared" -e "./interpreter[dev]" - name: Lint interpreter working-directory: interpreter run: ruff check . - name: Test interpreter working-directory: interpreter run: pytest - name: Eval regression run: python interpreter/eval/run_eval.py --set interpreter/eval/fixtures/eval_starter.tsv --providers mock frontend: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "22" cache: npm cache-dependency-path: interpreter/frontend/package-lock.json - name: Install frontend working-directory: interpreter/frontend run: npm ci - name: Lint frontend working-directory: interpreter/frontend run: npm run lint - name: Test frontend working-directory: interpreter/frontend run: npm test - name: Build frontend working-directory: interpreter/frontend run: npm run build e2e: runs-on: ubuntu-latest needs: [interpreter, frontend] env: PROVIDER_MODE: mock steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" - uses: actions/setup-node@v4 with: node-version: "22" cache: npm cache-dependency-path: interpreter/frontend/package-lock.json - name: Install shared and interpreter run: python -m pip install -e "./shared" -e "./interpreter[dev]" - name: Install frontend working-directory: interpreter/frontend run: npm ci - name: Install Playwright browser working-directory: interpreter/frontend run: npx playwright install --with-deps chromium - name: Run Playwright e2e working-directory: interpreter/frontend run: npx playwright test site: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "22" cache: npm cache-dependency-path: scribe/frontend/package-lock.json - name: Install demo site working-directory: scribe/frontend run: npm ci - name: Lint demo site working-directory: scribe/frontend run: npm run lint - name: Test demo site working-directory: scribe/frontend run: npm test - name: Test Vercel environment validation working-directory: scribe/frontend run: npm run test:deploy-env - name: Build demo site working-directory: scribe/frontend run: npm run build - name: Install Playwright browser working-directory: scribe/frontend run: npx playwright install --with-deps chromium - name: Run demo site e2e working-directory: scribe/frontend run: npm run e2e - name: Rebuild production demo site working-directory: scribe/frontend run: npm run build - name: Audit demo site working-directory: scribe/frontend run: npm audit - name: Run Lighthouse gates working-directory: scribe/frontend run: npm run lighthouse