name: CI on: push: branches: [main] pull_request: branches: [main] jobs: backend: name: Backend runs-on: ubuntu-latest defaults: run: working-directory: backend steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" cache: "pip" - name: Install dependencies run: pip install -e ".[dev]" - name: Lint run: | ruff check . ruff format --check . - name: Type check run: mypy src/ - name: Test env: DATABASE_URL: "sqlite+aiosqlite:///:memory:" run: pytest --cov=src --cov-report=term-missing --cov-fail-under=80 frontend: name: Frontend runs-on: ubuntu-latest defaults: run: working-directory: frontend steps: - uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: "20" cache: "npm" cache-dependency-path: frontend/package-lock.json - name: Install dependencies run: npm ci - name: Lint run: npm run lint - name: Type check run: npx tsc --noEmit - name: Test run: npm test - name: Build run: npm run build docker: name: Docker Build runs-on: ubuntu-latest needs: [backend, frontend] steps: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build backend image uses: docker/build-push-action@v5 with: context: ./backend push: false tags: codetutor-backend:test - name: Build frontend image uses: docker/build-push-action@v5 with: context: ./frontend push: false tags: codetutor-frontend:test