Skip to content

ci(deps): bump the actions group across 1 directory with 9 updates #53

ci(deps): bump the actions group across 1 directory with 9 updates

ci(deps): bump the actions group across 1 directory with 9 updates #53

Workflow file for this run

name: CI

Check failure on line 1 in .github/workflows/ci.yml

View workflow run for this annotation

GitHub Actions / .github/workflows/ci.yml

Invalid workflow file

(Line: 126, Col: 9): Unrecognized function: 'hashFiles'. Located at position 1 within expression: hashFiles('e2e/__screenshots__/**/*-linux.png') != ''
on:
push:
branches: [main]
pull_request:
branches: [main]
# Cancel obsolete runs on the same ref. Keeps queues short and the
# PR feedback loop fast.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
typecheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm run typecheck
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm run lint
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node-version: [20, 22]
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: ${{ matrix.node-version }}
cache: npm
- run: npm ci
# Coverage thresholds live in vitest.config.ts; this command
# fails the job if any file group regresses below floor.
- run: npm run test:coverage
- name: Upload coverage report
if: matrix.node-version == 20
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: coverage-report
path: coverage/
retention-days: 7
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm run build
- name: Bundle-size budget
# Hard ceiling on per-route gzip + brotli weight. Budgets are
# current size + ~3% headroom so a careless dep import fails
# the job before merging instead of being noticed in Lighthouse
# weeks later.
run: npm run size:check
# End-to-end + browser-axe sweep against the real production build.
# Catches regressions JSDOM-axe can't see (focus order in the live ARIA
# tree, computed contrast, route/CSP/hydration glitches). Runs after
# unit/build because it consumes the same artifact.
e2e:
runs-on: ubuntu-latest
needs: [typecheck, lint, test, build]
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 20
cache: npm
- run: npm ci
- name: Install Playwright browsers
# All three desktop engines plus the mobile emulations rely on
# chromium and webkit (firefox is its own bin). Skipping any
# would silently drop projects from playwright.config.ts.
run: npx playwright install --with-deps chromium firefox webkit
- run: npm run test:e2e
- name: Upload Playwright report
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: playwright-report
path: playwright-report/
retention-days: 14
# Visual regression sweep. Pinned-input deterministic build
# (NEXT_PUBLIC_MTG_DETERMINISTIC=1) plus reduced-motion +
# animation-disabled snapshots make the diff a function of layout
# and theme only. Linux baselines are committed under
# e2e/__screenshots__/; first run after baseline drift uploads the
# diff so reviewers can inspect what changed without checking out
# the branch. Trigger workflow_dispatch with refresh_baselines=true
# to overwrite committed baselines, then download + commit the
# uploaded snapshot artifact.
visual:
runs-on: ubuntu-latest
needs: [typecheck, lint, test, build]
# Skip when no Linux baselines are committed yet — first-time
# bootstrapping populates them via the Visual Baseline Refresh
# workflow (workflow_dispatch). After that, this job becomes a
# required check on every push.
if: ${{ hashFiles('e2e/__screenshots__/**/*-linux.png') != '' }}
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version: 20
cache: npm
- run: npm ci
- name: Install Playwright browsers
run: npx playwright install --with-deps chromium
- name: Run visual regression
run: npm run test:visual
- name: Upload diff + report on failure
if: failure()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: visual-report
path: |
playwright-report-visual/
test-results/
e2e/__screenshots__/
retention-days: 14