name: CI on: push: branches: [main, develop] pull_request: branches: [main] env: PYTHON_VERSION: "3.12" NODE_VERSION: "20" POSTGRES_USER: test POSTGRES_PASSWORD: test POSTGRES_DB: jobportal_test jobs: backend-lint: name: Backend Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: ${{ env.PYTHON_VERSION }} - run: pip install ruff - run: cd backend && ruff check . - run: cd backend && ruff format --check . backend-test: name: Backend Tests runs-on: ubuntu-latest services: postgres: image: pgvector/pgvector:pg17 env: POSTGRES_USER: ${{ env.POSTGRES_USER }} POSTGRES_PASSWORD: ${{ env.POSTGRES_PASSWORD }} POSTGRES_DB: ${{ env.POSTGRES_DB }} ports: ["5432:5432"] options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 redis: image: redis:7-alpine ports: ["6379:6379"] options: --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5 env: POSTGRES_SERVER: localhost POSTGRES_PORT: 5432 POSTGRES_USER: test POSTGRES_PASSWORD: test POSTGRES_DB: jobportal_test REDIS_URL: redis://localhost:6379/0 SECRET_KEY: test-secret-key-for-ci-minimum-32-chars APP_ENV: testing steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: ${{ env.PYTHON_VERSION }} - run: pip install uv - run: cd backend && uv sync - run: cd backend && uv run pytest -v --cov=app frontend-typecheck: name: Frontend Type Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - uses: pnpm/action-setup@v4 with: version: 9 - run: cd frontend && pnpm install - run: cd frontend && pnpm tsc --noEmit frontend-build: name: Frontend Build runs-on: ubuntu-latest needs: frontend-typecheck steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - uses: pnpm/action-setup@v4 with: version: 9 - run: cd frontend && pnpm install - run: cd frontend && NEXT_PUBLIC_API_URL= pnpm build docker-build: name: Docker Build runs-on: ubuntu-latest needs: [backend-test, frontend-build] if: github.ref == 'refs/heads/main' steps: - uses: actions/checkout@v4 - uses: docker/setup-buildx-action@v3 - run: docker build ./backend -t jobportal-backend:ci - run: docker build ./frontend -t jobportal-frontend:ci