Skip to content

updating ci workflow #28

updating ci workflow

updating ci workflow #28

Workflow file for this run

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 run test:core
# ===========================================================================
# 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
- name: Upload Report on Failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: playwright-report-visual
path: playwright-report/
retention-days: 5