name: CI Pipeline run-name: ${{ gitea.actor }} triggered CI pipeline on: push: branches: [main, develop, adilallo/enhancement/TestingFramework] pull_request: branches: [main, develop] jobs: # Unit and Integration Tests test: runs-on: macos-latest strategy: matrix: node-version: [18, 20] steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: "npm" - name: Install dependencies run: npm ci - name: Run unit and integration tests run: npm test - name: Upload coverage reports uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }} file: ./coverage/lcov.info flags: unittests name: codecov-umbrella # E2E Tests e2e: runs-on: macos-latest strategy: matrix: browser: [chromium, firefox, webkit] steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 20 cache: "npm" - name: Install dependencies run: npm ci - name: Install Playwright browsers run: npx playwright install --with-deps ${{ matrix.browser }} - name: Build application run: npm run build - name: Start application run: npm run preview & env: CI: true - name: Wait for application to be ready run: npx wait-on http://localhost:3000 - name: Run E2E tests run: npx playwright test --project=${{ matrix.browser }} env: CI: true - name: Upload test results uses: actions/upload-artifact@v4 if: always() with: name: playwright-results-${{ matrix.browser }} path: | test-results/ playwright-report/ retention-days: 30 # Visual Regression Tests visual-regression: runs-on: macos-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 20 cache: "npm" - name: Install dependencies run: npm ci - name: Install Playwright browsers run: npx playwright install --with-deps - name: Build application run: npm run build - name: Start application run: npm run preview & env: CI: true - name: Wait for application to be ready run: npx wait-on http://localhost:3000 - name: Run visual regression tests run: npx playwright test tests/e2e/visual-regression.spec.ts env: CI: true - name: Upload visual regression results uses: actions/upload-artifact@v4 if: always() with: name: visual-regression-results path: | test-results/ tests/e2e/visual-regression.spec.ts-snapshots/ retention-days: 30 # Performance Tests performance: runs-on: macos-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 20 cache: "npm" - name: Install dependencies run: npm ci - name: Build application run: npm run build - name: Start application run: npm run preview & env: CI: true - name: Wait for application to be ready run: npx wait-on http://localhost:3000 - name: Run Lighthouse CI run: npm run lhci env: CI: true # Storybook Tests storybook: runs-on: macos-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 20 cache: "npm" - name: Install dependencies run: npm ci - name: Build Storybook run: npm run build-storybook - name: Run Storybook tests run: npm run test:sb env: CI: true # Lint and Format lint: runs-on: macos-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 20 cache: "npm" - name: Install dependencies run: npm ci - name: Run ESLint run: npm run lint - name: Check formatting run: npx prettier --check "**/*.{js,jsx,ts,tsx,json,css,md}" # Build Verification build: runs-on: macos-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 20 cache: "npm" - name: Install dependencies run: npm ci - name: Build application run: npm run build - name: Build Storybook run: npm run build-storybook