Files
edentext/.github/workflows/ci.yml
T
Steffen Becker d156482a3f test: LibreOffice, the layout lint and a monkey read the editor's work back
lo-fuzz.test.ts hands every fuzz seed to LibreOffice as .odt and .docx and
compares what comes back, listing the differences LibreOffice makes by design.
test:layout opens the corpus, the showcase and fuzz seeds in the browser, holds
the page count against LibreOffice and checks the lines for overlap, margin
escapes and stranded headings. test:monkey types at random on corpus documents
and asserts the schema, undo to the start, redo, and that both saved formats
read back. browser.mjs now carries the dev server and the settle helper.
2026-09-06 19:07:16 +02:00

79 lines
2.8 KiB
YAML

name: CI
on:
push:
branches: [main]
pull_request:
jobs:
check-and-test:
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
# CLAUDE.md is read at every session start; detail belongs in the nested files.
- run: test "$(wc -l < CLAUDE.md)" -le 120 || { echo "CLAUDE.md over its 120-line budget"; exit 1; }
# The corpus is gitignored, so a test reading it would name a document and fail here.
- run: |
! git grep -l "render-parity/fixtures" -- src tests ':!tests/render-parity' \
|| { echo "a test reads the gitignored parity corpus"; exit 1; }
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm run check
# xmllint drives the schema-validation leg (it self-skips without it).
- run: sudo apt-get install -y --no-install-recommends libxml2-utils
# LibreOffice is not installed here, so the lo-roundtrip suite self-skips
# (the lo-roundtrip job below runs that leg).
- run: npm test
# The LibreOffice legs (self-skipping everywhere soffice is absent) and the layout run,
# which holds the editor's page counts against LibreOffice's PDFs in Chromium.
lo-roundtrip:
runs-on: ubuntu-latest
timeout-minutes: 40
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
# poppler-utils rasterizes the PDFs the render-consistency leg compares.
- run: sudo apt-get update && sudo apt-get install -y --no-install-recommends libreoffice-writer fonts-liberation poppler-utils
- run: npm ci
- run: npm run test:lo
- run: npx playwright-core install --with-deps chromium
- run: npm run test:layout
# Production build booted in the three engines behind the supported browsers
# (vite build.target). WebKit runs on macOS: its text shaping there is Safari's.
browser:
strategy:
fail-fast: false
matrix:
include:
- { browser: chromium, os: ubuntu-latest }
- { browser: firefox, os: ubuntu-latest }
- { browser: webkit, os: macos-latest }
runs-on: ${{ matrix.os }}
timeout-minutes: 30
env:
BROWSER: ${{ matrix.browser }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npx playwright-core install --with-deps ${{ matrix.browser }}
- run: npm run build
- run: npm run test:smoke
- run: npm run test:dom
# xmllint validates the files the monkey saves (macOS ships it).
- if: runner.os == 'Linux'
run: sudo apt-get install -y --no-install-recommends libxml2-utils
- run: npm run test:monkey