name: CI on: push: branches: [main] pull_request: workflow_dispatch: concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: backend: name: Backend tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.12" # matches the Dockerfile cache: pip cache-dependency-path: | backend/requirements.txt backend/requirements-dev.txt - name: Install dependencies working-directory: backend run: | python -m pip install --upgrade pip pip install -r requirements.txt -r requirements-dev.txt - name: Run tests working-directory: backend run: python -m pytest tests/ -q frontend: name: Frontend lint + build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "24" # matches the Dockerfile cache: npm cache-dependency-path: frontend/package-lock.json - name: Install dependencies working-directory: frontend run: npm ci - name: Lint working-directory: frontend run: npm run lint - name: Build working-directory: frontend run: npm run build docker: name: Docker image builds runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: docker/setup-buildx-action@v3 - name: Build image uses: docker/build-push-action@v6 with: context: . push: false cache-from: type=gha cache-to: type=gha,mode=max