updating ci workflow #27
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: PR Quality Gate | |
| on: | |
| pull_request: | |
| branches: [ "leader" ] | |
| workflow_dispatch: | |
| inputs: | |
| branch: | |
| description: 'Branch to check' | |
| required: true | |
| default: 'leader' | |
| env: | |
| FORCE_COLOR: 1 | |
| PLAYWRIGHT_BROWSERS_PATH: ${{ github.workspace }}/.cache/ms-playwright | |
| jobs: | |
| # =========================================================================== | |
| # JOB 1: INFRASTRUCTURE SETUP (Cache Warmer) | |
| # Installs dependencies & browsers so they are cached for subsequent jobs. | |
| # =========================================================================== | |
| infra-setup: | |
| name: 🏗️ Infra Setup | |
| runs-on: self-hosted | |
| timeout-minutes: 10 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ inputs.branch || github.ref }} | |
| fetch-depth: 0 | |
| clean: true | |
| # --- SETUP & CACHING --- | |
| - name: Install pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| run_install: false | |
| - name: Get pnpm store directory | |
| id: pnpm-cache | |
| shell: bash | |
| run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT | |
| - name: Setup pnpm cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
| key: ${{ runner.os }}-pnpm-store-${{ hashFiles('pnpm-lock.yaml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-pnpm-store- | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20.x" | |
| cache-dependency-path: pnpm-lock.yaml | |
| - name: Cache Playwright Browsers | |
| id: playwright-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }} | |
| key: ${{ runner.os }}-playwright-${{ hashFiles('pnpm-lock.yaml') }} | |
| restore-keys: ${{ runner.os }}-playwright- | |
| # ----------------------- | |
| - name: Configure pnpm settings | |
| run: pnpm config set side-effects-cache true | |
| - name: Run Setup Script | |
| run: | | |
| chmod +x ./scripts/setup.sh | |
| ./scripts/setup.sh | |
| # Handles pnpm install and .env.local creation | |
| - name: Install Playwright (Binary Only) | |
| if: steps.playwright-cache.outputs.cache-hit != 'true' | |
| run: pnpm exec playwright install chromium | |
| # =========================================================================== | |
| # JOB 2: QUALITY CHECKS & CORE TESTS | |
| # Runs Lint, Build, and Functional Logic Tests | |
| # DEPENDS ON: infra-setup | |
| # =========================================================================== | |
| quality-and-core: | |
| name: 🛡️ Quality & Core | |
| needs: infra-setup | |
| runs-on: self-hosted | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ inputs.branch || github.ref }} | |
| fetch-depth: 0 | |
| clean: true | |
| # --- RESTORE CACHE --- | |
| - name: Install pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| run_install: false | |
| - name: Get pnpm store directory | |
| id: pnpm-cache | |
| shell: bash | |
| run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT | |
| - name: Setup pnpm cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
| key: ${{ runner.os }}-pnpm-store-${{ hashFiles('pnpm-lock.yaml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-pnpm-store- | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20.x" | |
| cache-dependency-path: pnpm-lock.yaml | |
| - name: Cache Playwright Browsers | |
| id: playwright-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }} | |
| key: ${{ runner.os }}-playwright-${{ hashFiles('pnpm-lock.yaml') }} | |
| restore-keys: ${{ runner.os }}-playwright- | |
| # --------------------- | |
| - name: Fast Install (Restore from Cache) | |
| run: | | |
| pnpm config set side-effects-cache true | |
| chmod +x ./scripts/setup.sh | |
| ./scripts/setup.sh | |
| - name: Ensure Browsers Present | |
| if: steps.playwright-cache.outputs.cache-hit != 'true' | |
| run: pnpm exec playwright install chromium | |
| - name: Lint Code | |
| run: pnpm run lint | |
| - name: Verify Build | |
| run: pnpm run build | |
| - name: Run Core Tests (Skip Visuals) | |
| run: pnpm exec playwright test --project=chromium --grep-invert "@visual" | |
| # =========================================================================== | |
| # JOB 3: VISUAL REGRESSION TESTS | |
| # Runs Screenshot Comparisons | |
| # DEPENDS ON: quality-and-core | |
| # =========================================================================== | |
| visual-tests: | |
| name: 🎨 Visual Regression | |
| needs: quality-and-core | |
| runs-on: self-hosted | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ inputs.branch || github.ref }} | |
| fetch-depth: 0 | |
| clean: true | |
| # --- RESTORE CACHE --- | |
| - name: Install pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| run_install: false | |
| - name: Get pnpm store directory | |
| id: pnpm-cache | |
| shell: bash | |
| run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT | |
| - name: Setup pnpm cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} | |
| key: ${{ runner.os }}-pnpm-store-${{ hashFiles('pnpm-lock.yaml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-pnpm-store- | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20.x" | |
| cache-dependency-path: pnpm-lock.yaml | |
| - name: Cache Playwright Browsers | |
| id: playwright-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }} | |
| key: ${{ runner.os }}-playwright-${{ hashFiles('pnpm-lock.yaml') }} | |
| restore-keys: ${{ runner.os }}-playwright- | |
| # --------------------- | |
| - name: Fast Install (Restore from Cache) | |
| run: | | |
| pnpm config set side-effects-cache true | |
| chmod +x ./scripts/setup.sh | |
| ./scripts/setup.sh | |
| - name: Ensure Browsers Present | |
| if: steps.playwright-cache.outputs.cache-hit != 'true' | |
| run: pnpm exec playwright install chromium | |
| - name: Run Visual Tests | |
| run: pnpm exec playwright test --project=chromium --grep "@visual" | |
| - name: Upload Report on Failure | |
| if: failure() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: playwright-report-visual | |
| path: playwright-report/ | |
| retention-days: 5 |