name: CI/CD Pipeline on: push: branches: [main, develop, '**'] pull_request: branches: [main, develop] jobs: backend-tests: name: Backend Tests runs-on: ubuntu-latest services: postgres: image: postgres:16 env: POSTGRES_DB: webref_test POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 steps: - uses: actions/checkout@v4 - name: Install Nix uses: cachix/install-nix-action@v27 with: nix_path: nixpkgs=channel:nixos-unstable - name: Setup Python dependencies run: | cd backend python -m pip install --upgrade pip pip install -e ".[dev]" - name: Run Ruff linter run: | cd backend ruff check app/ - name: Run Ruff formatter check run: | cd backend ruff format --check app/ - name: Run tests with coverage env: DATABASE_URL: postgresql://postgres:postgres@localhost:5432/webref_test run: | cd backend pytest --cov=app --cov-report=xml --cov-report=term - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 with: file: ./backend/coverage.xml flags: backend name: backend-coverage frontend-tests: name: Frontend Tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' cache-dependency-path: frontend/package-lock.json - name: Install dependencies run: | cd frontend npm ci - name: Run ESLint run: | cd frontend npm run lint - name: Run Prettier check run: | cd frontend npx prettier --check . - name: Run Svelte check run: | cd frontend npm run check - name: Run tests with coverage run: | cd frontend npm run test:coverage - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 with: file: ./frontend/coverage/coverage-final.json flags: frontend name: frontend-coverage integration-tests: name: Integration Tests runs-on: ubuntu-latest needs: [backend-tests, frontend-tests] services: postgres: image: postgres:16 env: POSTGRES_DB: webref_test POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 minio: image: minio/minio env: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin ports: - 9000:9000 options: >- --health-cmd "curl -f http://localhost:9000/minio/health/live" --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v4 - name: Install Nix uses: cachix/install-nix-action@v27 with: nix_path: nixpkgs=channel:nixos-unstable - name: Run integration tests env: DATABASE_URL: postgresql://postgres:postgres@localhost:5432/webref_test MINIO_ENDPOINT: localhost:9000 MINIO_ACCESS_KEY: minioadmin MINIO_SECRET_KEY: minioadmin run: | cd backend pytest tests/integration/ nix-build: name: Nix Build Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install Nix uses: cachix/install-nix-action@v27 with: nix_path: nixpkgs=channel:nixos-unstable - name: Check flake run: nix flake check - name: Build dev shell run: nix develop --command echo "Dev shell OK"