diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..1e9d59f --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,54 @@ +name: CI + +on: + pull_request: + push: + branches: [master] + +jobs: + backend: + name: Backend (pytest, Python 3.12) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + cache: pip + cache-dependency-path: pyproject.toml + + # Only what the backend tests import. The ML stack (torch, cleanlab, sentence-transformers, + # bertopic, scikit-learn) is not needed: no backend module imports it at import time. + - name: Install test dependencies + run: | + python -m pip install --upgrade pip + python -m pip install \ + "fastapi>=0.115.0" "uvicorn[standard]>=0.30.0" \ + "sqlalchemy[asyncio]>=2.0.0" "aiosqlite>=0.20.0" "alembic>=1.13.0" \ + "pydantic>=2.0.0" "pydantic-settings>=2.0.0" "python-multipart>=0.0.9" \ + "aiofiles>=24.0.0" "numpy>=1.26.0" "pandas>=2.2.0" \ + "pytest>=8.0.0" "pytest-asyncio>=0.23.0" "httpx>=0.27.0" + + - name: pytest + run: python -m pytest -q + + frontend: + name: Frontend (npm ci, test, build) + runs-on: ubuntu-latest + defaults: + run: + working-directory: frontend + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + # the node --test files are TypeScript, which Node runs directly from 23.6 + node-version: "24" + cache: npm + cache-dependency-path: frontend/package-lock.json + + - run: npm ci + - run: npm test + - run: npm run build