Files
Juan Denis fd8abdda47 Ignore stale folder listings in the File Manager
Opening a folder while the previous listing was still loading let the
slow answer land last and set the current path back, pulling the user
into the folder they had just left. Only the newest browse may now
write.
2026-10-10 14:20:41 -04:00

90 lines
3.1 KiB
YAML

name: Frontend CI
# Run the warning ratchet, repository integrity checks, unit tests and browser
# regressions. Release Build Smoke Test separately compiles the production app.
#
# backend/app/** is in the paths because check-html-sinks scans it too (for
# `|safe`, `Markup(`, `render_template_string`), so a backend-only commit can
# introduce a sink this must catch.
on:
push:
branches: [dev]
paths:
- 'frontend/**'
- 'backend/app/**'
- 'scripts/check-html-sinks.mjs'
- '.github/workflows/frontend-ci.yml'
pull_request:
branches: [main, dev]
paths:
- 'frontend/**'
- 'backend/app/**'
- 'scripts/check-html-sinks.mjs'
- '.github/workflows/frontend-ci.yml'
workflow_call:
jobs:
lint:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
cache: npm
cache-dependency-path: frontend/package-lock.json
- name: Install dependencies
working-directory: frontend
run: npm ci
- name: Lint
# Reject errors and warning growth by file/rule, then run all integrity
# checks chained by package.json. Keep the baseline reviewed in Git.
working-directory: frontend
run: npm run lint
- name: Unit tests
# node --test over src/**/__tests__ — pure-logic modules, no jsdom.
working-directory: frontend
run: npm test
- name: Install browser for regressions
working-directory: frontend
run: npx playwright install --with-deps chromium
- name: Settings browser regressions
working-directory: frontend
run: npm run test:browser
- name: Settings surfaces and assistant browser regressions
working-directory: frontend
run: npm run test:settings-ui
- name: Shared controls browser regressions
working-directory: frontend
run: npm run test:controls
- name: Metrics and widget browser regressions
working-directory: frontend
run: npm run test:metrics
- name: Authentication and layout hooks browser regressions
working-directory: frontend
run: npm run test:hooks
- name: Backup request and form browser regressions
working-directory: frontend
run: npm run test:backups
- name: SVG sanitizer browser regressions
working-directory: frontend
run: npm run test:sanitize-svg
- name: Terminal log viewer browser regressions
working-directory: frontend
run: npm run test:terminal-logs
- name: Docker tabs browser regressions
working-directory: frontend
run: npm run test:docker-tabs
- name: File Manager browser regressions
working-directory: frontend
run: npm run test:file-manager
- name: Upload Settings screenshots
if: always()
uses: actions/upload-artifact@v4
with:
name: settings-browser-screenshots
path: frontend/test-results/
if-no-files-found: ignore