name: CI/CD Pipeline on: push: branches: [master, main] pull_request: branches: [master, main] jobs: lint-and-test: name: Lint and Test runs-on: ubuntu-latest defaults: run: working-directory: maternal-web steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' cache-dependency-path: maternal-web/package-lock.json - name: Install dependencies run: npm ci - name: Run linter run: npm run lint - name: Run unit tests run: npm run test -- --ci --coverage - name: Upload coverage reports uses: codecov/codecov-action@v4 with: directory: maternal-web/coverage flags: frontend fail_ci_if_error: false e2e-tests: name: E2E Tests runs-on: ubuntu-latest needs: lint-and-test defaults: run: working-directory: maternal-web steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' cache-dependency-path: maternal-web/package-lock.json - name: Install dependencies run: npm ci - name: Install Playwright browsers run: npx playwright install --with-deps chromium - name: Run E2E tests run: npm run test:e2e -- --project=chromium env: CI: true - name: Upload Playwright report uses: actions/upload-artifact@v4 if: always() with: name: playwright-report path: maternal-web/playwright-report/ retention-days: 30 build: name: Build Application runs-on: ubuntu-latest needs: lint-and-test defaults: run: working-directory: maternal-web steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' cache-dependency-path: maternal-web/package-lock.json - name: Install dependencies run: npm ci - name: Build application run: npm run build - name: Upload build artifacts uses: actions/upload-artifact@v4 with: name: build path: maternal-web/.next/ retention-days: 7