name: CI/CD on: push: branches: [ main, master, develop ] pull_request: branches: [ main, master, develop ] jobs: prisma-check: name: Validate Prisma setup runs-on: ubuntu-latest defaults: run: working-directory: frontends/nextjs steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup Node.js uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: '20' - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install - name: Generate Prisma Client run: bun run db:generate env: DATABASE_URL: file:./dev.db - name: Validate Prisma Schema run: bunx prisma validate env: DATABASE_URL: file:./dev.db typecheck: name: TypeScript Type Check runs-on: ubuntu-latest needs: prisma-check defaults: run: working-directory: frontends/nextjs steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup Node.js uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: '20' - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install - name: Generate Prisma Client run: bun run db:generate env: DATABASE_URL: file:./dev.db - name: Run TypeScript type check run: bun run typecheck lint: name: Lint Code runs-on: ubuntu-latest needs: prisma-check defaults: run: working-directory: frontends/nextjs steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup Node.js uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: '20' - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install - name: Generate Prisma Client run: bun run db:generate env: DATABASE_URL: file:./dev.db - name: Run ESLint run: bun run lint test-unit: name: Unit Tests runs-on: ubuntu-latest needs: [typecheck, lint] defaults: run: working-directory: frontends/nextjs steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup Node.js uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: '20' - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install - name: Generate Prisma Client run: bun run db:generate env: DATABASE_URL: file:./dev.db - name: Run unit tests run: bun run test:unit env: DATABASE_URL: file:./dev.db - name: Upload coverage report if: always() uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: coverage-report path: frontends/nextjs/coverage/ retention-days: 7 build: name: Build Application runs-on: ubuntu-latest needs: test-unit defaults: run: working-directory: frontends/nextjs steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup Node.js uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: '20' - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install - name: Generate Prisma Client run: bun run db:generate env: DATABASE_URL: file:./dev.db - name: Build run: bun run build env: DATABASE_URL: file:./dev.db - name: Upload build artifacts uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: dist path: frontends/nextjs/.next/ retention-days: 7 test-e2e: name: E2E Tests runs-on: ubuntu-latest needs: [typecheck, lint] defaults: run: working-directory: frontends/nextjs steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup Node.js uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: '20' - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install - name: Generate Prisma Client run: bun run db:generate env: DATABASE_URL: file:./dev.db - name: Install Playwright Browsers run: bunx playwright install --with-deps chromium - name: Run Playwright tests run: bun run test:e2e env: DATABASE_URL: file:./dev.db - name: Upload test results if: always() uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: playwright-report path: frontends/nextjs/playwright-report/ retention-days: 7 quality-check: name: Code Quality Check runs-on: ubuntu-latest if: github.event_name == 'pull_request' defaults: run: working-directory: frontends/nextjs steps: - name: Checkout code uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version: '20' - name: Setup Bun uses: oven-sh/setup-bun@v2 with: bun-version: latest - name: Install dependencies run: bun install - name: Generate Prisma Client run: bun run db:generate env: DATABASE_URL: file:./dev.db - name: Check for console.log statements run: | if git diff origin/${{ github.base_ref }}...HEAD -- '*.ts' '*.tsx' '*.js' '*.jsx' | grep -E '^\+.*console\.(log|debug|info)'; then echo "⚠️ Found console.log statements in the changes" echo "Please remove console.log statements before merging" exit 1 fi continue-on-error: true - name: Check for TODO comments run: | TODO_COUNT=$(git diff origin/${{ github.base_ref }}...HEAD -- '*.ts' '*.tsx' '*.js' '*.jsx' | grep -E '^\+.*TODO|FIXME' | wc -l) if [ $TODO_COUNT -gt 0 ]; then echo "⚠️ Found $TODO_COUNT TODO/FIXME comments in the changes" echo "Please address TODO comments before merging or create issues for them" fi continue-on-error: true