Spaces:
Sleeping
Sleeping
Jose Salazar
Merge pull request #4 from josesalazar2025/refactor/ajustes-clinicos-en-json
142a8d4 unverified | name: ci | |
| # Puerta de calidad del CÓDIGO (rápida). La puerta clínica —motor determinista y evals— vive | |
| # en `evals.yml`, que sí filtra por rutas porque su coste es otro. | |
| # | |
| # Este workflow NO lleva filtro `paths` a propósito: antes, un PR que tocara sólo | |
| # `backend/app/security/` o `backend/app/routers/` no disparaba NINGÚN workflow, así que toda | |
| # la superficie de autenticación, sesiones, CSRF y ingesta de laboratorio se fusionaba sin que | |
| # nadie ejecutara `backend/tests/`. Cualquier PR corre esto. | |
| on: | |
| pull_request: | |
| push: | |
| branches: [main] | |
| # Disparo manual desde la pestaña Actions ("Run workflow"). Existe porque una cola atascada | |
| # NO se puede relanzar: GitHub sólo ofrece "Re-run jobs" sobre ejecuciones TERMINADAS, así | |
| # que tras la caída de Actions del 2026-08-06 (runs creados y nunca recogidos por un runner) | |
| # la única forma de volver a probar era abrir otro PR. Con esto se relanza a voluntad. | |
| # Requiere que el workflow esté en la rama por defecto para aparecer en la UI. | |
| workflow_dispatch: | |
| jobs: | |
| backend: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: astral-sh/setup-uv@v5 | |
| with: | |
| enable-cache: true | |
| # Node aquí no es para el frontend: `test_paridad_motor.py` ejecuta el motor TS real | |
| # (evals/engine_runner.ts) y lo compara con el puerto Python del suelo de seguridad. Sin | |
| # Node esa prueba se OMITE en silencio, que es justo como se pierden las dos | |
| # implementaciones de vista. | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: "22" | |
| - name: Sincronizar backend | |
| working-directory: backend | |
| # Sin `--group rag`: los grupos pesados son opt-in (ver pyproject) y las dos suites que | |
| # dependen de LanceDB/sentence-transformers ya se auto-omiten | |
| # (`test_retriever_integracion.py`, `test_alcance_corpus.py`). Instalarlos aquí añadiría | |
| # GBs y minutos a cambio de una prueba de integración sintética. Si algún día la | |
| # recuperación regresa sin que nadie se entere, ese es el momento de añadirlos. | |
| run: uv sync | |
| - name: Ruff (backend + scripts) | |
| working-directory: backend | |
| # Mismo alcance que `make lint`: evals/ y bridge/ quedan fuera a propósito, aún no | |
| # están saneados bajo estas reglas. | |
| run: uv run ruff check . ../scripts | |
| - name: Pruebas del backend | |
| working-directory: backend | |
| run: uv run pytest -q | |
| frontend: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: "22" | |
| cache: npm | |
| cache-dependency-path: frontend/package-lock.json | |
| - name: Instalar frontend | |
| working-directory: frontend | |
| run: npm ci | |
| - name: Tipos (tsc --noEmit) | |
| working-directory: frontend | |
| # `npm run build` ya lo corría, pero nada ejecutaba el build en CI. | |
| run: npm run typecheck | |
| - name: ESLint | |
| working-directory: frontend | |
| run: npm run lint | |