updating ci workflow #26
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: Create Runtime Envs | |
| run: | | |
| mkdir -p logs | |
| echo "NEXTAUTH_URL=http://127.0.0.1:3000" > .env.local | |
| echo "NEXTAUTH_SECRET=ci-secret" >> .env.local | |
| - name: Run Setup Script (Install Deps) | |
| run: | | |
| chmod +x ./scripts/setup.sh | |
| ./scripts/setup.sh | |
| # Critical: We install browsers here so they get saved to the cache | |
| # for Job 2 and Job 3 to use instantly. | |
| - 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: | |
| - uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ inputs.branch || github.ref }} | |
| clean: true | |
| # --- FAST RESTORE --- | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| run_install: false | |
| - id: pnpm-cache | |
| run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT | |
| - 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- | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20.x" | |
| cache-dependency-path: pnpm-lock.yaml | |
| - uses: actions/cache@v4 | |
| id: playwright-cache | |
| with: | |
| path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }} | |
| key: ${{ runner.os }}-playwright-${{ hashFiles('pnpm-lock.yaml') }} | |
| restore-keys: ${{ runner.os }}-playwright- | |
| # -------------------- | |
| - name: Configure Envs | |
| run: | | |
| echo "NEXTAUTH_URL=http://127.0.0.1:3000" > .env.local | |
| echo "NEXTAUTH_SECRET=ci-secret" >> .env.local | |
| - 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 | |
| # Moved here from Job 1 | |
| - name: Lint Code | |
| run: pnpm run lint | |
| # Moved here from Job 1 | |
| - 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: | |
| - uses: actions/checkout@v4 | |
| with: | |
| ref: ${{ inputs.branch || github.ref }} | |
| clean: true | |
| # --- FAST RESTORE --- | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| run_install: false | |
| - id: pnpm-cache | |
| run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT | |
| - 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- | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20.x" | |
| cache-dependency-path: pnpm-lock.yaml | |
| - uses: actions/cache@v4 | |
| id: playwright-cache | |
| with: | |
| path: ${{ env.PLAYWRIGHT_BROWSERS_PATH }} | |
| key: ${{ runner.os }}-playwright-${{ hashFiles('pnpm-lock.yaml') }} | |
| restore-keys: ${{ runner.os }}-playwright- | |
| # -------------------- | |
| - name: Configure Envs | |
| run: | | |
| echo "NEXTAUTH_URL=http://127.0.0.1:3000" > .env.local | |
| echo "NEXTAUTH_SECRET=ci-secret" >> .env.local | |
| - 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 |