Skip to content

Feat/v06 enhancements #40

Feat/v06 enhancements

Feat/v06 enhancements #40

Workflow file for this run

name: CI
on:
pull_request:
branches: [main]
paths:
- 'src/**'
- 'public/**'
- 'e2e/**'
- 'package.json'
- 'package-lock.json'
- 'vite.config.*'
- 'tsconfig.*'
- 'playwright.config.*'
- 'index.html'
- 'env.d.ts'
- '.eslintrc.*'
- '.prettier*'
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
# Cancel in-progress runs on same branch
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
# Build once, use everywhere
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm ci --prefer-offline
- name: Build application
run: npm run build
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
retention-days: 1
# Fast quality checks in parallel
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm ci --prefer-offline --ignore-scripts
- name: Run ESLint
run: npm run lint
typecheck:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm ci --prefer-offline --ignore-scripts
- name: Run TypeScript type check
run: npm run type-check
unit-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm ci --prefer-offline --ignore-scripts
- name: Run unit tests
run: npm run test:unit:run
# Quick smoke test on PR (Chromium only, single worker for speed)
e2e-smoke:
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'npm'
- name: Install dependencies
run: npm ci --prefer-offline --ignore-scripts
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: dist
path: dist/
- name: Get Playwright version
id: playwright-version
run: echo "version=$(node -p "require('./package-lock.json').packages['node_modules/@playwright/test'].version")" >> $GITHUB_OUTPUT
- name: Cache Playwright browsers
uses: actions/cache@v4
id: playwright-cache
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ steps.playwright-version.outputs.version }}
- name: Install Playwright browsers
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: npx playwright install --with-deps chromium
- name: Install Playwright dependencies only
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: npx playwright install-deps chromium
- name: Run smoke tests (Chromium, accessibility + installation)
run: npx playwright test e2e/accessibility.spec.ts e2e/installation.spec.ts --project=chromium
env:
CI: true
- name: Upload test results
if: failure()
uses: actions/upload-artifact@v4
with:
name: smoke-test-results
path: playwright-report/
retention-days: 7