Files
webstudio/.github/actions/test-suite/action.yml
Oleg Isonen 4273b7001f refactor: Organize Builder development and test tooling (#6285)
## Outcome

Builder development, backend, E2E, and CI tooling now share one
ownership model: Builder defines named commands and backend modes, while
CI only schedules those commands.

## Technical choices

- Group shared Compose files, PostgreSQL initialization, and backend
helpers under `apps/builder/backend`.
- Resolve `compose.<mode>.yaml` by convention instead of maintaining
Compose filename lists in scripts and workflows.
- Keep persistent development and disposable test Compose projects
separate by default, while allowing the standard `COMPOSE_PROJECT_NAME`
override.
- Make schema snapshots invalidate from discovered migration sources and
backend files.
- Move E2E behavior recipes into named Builder commands; retain concise
root proxies for developer entry points.
- Let Vitest allocate available browser ports instead of maintaining a
cross-package port registry.
- Keep test-suite scheduling explicit in `main.yml`, but move executable
test commands to root package scripts.
- Move fixture-size enforcement from inline GitHub JavaScript into a
locally runnable repository script.

## Todo

- [x] Consolidate Builder backend and Compose ownership.
- [x] Add named development, E2E, schema-cache, Supabase, and CI-shard
commands.
- [x] Remove Compose topology and behavior flags from CI.
- [x] Remove the static Vitest browser-port registry.
- [x] Extract fixture-size checking from the workflow.
- [x] Verify migration bootstrap, snapshot-backed E2E, tests, builds,
types, formatting, lint, generated contracts, and workflow syntax.
- [x] Review documentation impact: updated the E2E developer guide; no
user-facing `docs/` content is affected.

## Verification

- Full package, CLI, Builder core, and Builder app test suites
- Full workspace typecheck
- Builder production build
- Schema-cache generation through the complete migration history
- Supabase migration compatibility
- Snapshot-backed Playwright animation workflow
- Backend regression tests, including demonstrated fail/pass coverage
- All four Compose mode configurations
- `oxfmt`, `oxlint`, package boundaries, generated API, and generated
docs checks
- `actionlint` and Bash syntax checks

The fixture-size checker preserves the existing Linux `du` thresholds.
Its three inputs build locally; macOS allocation sizes are not directly
comparable to the Linux CI thresholds, so CI remains the authoritative
size result.
2026-08-31 21:09:54 +02:00

56 lines
1.6 KiB
YAML

name: Test suite
description: Prepare browsers and run one repository test script.
inputs:
submodules-ssh-key:
description: SSH key for private test dependencies.
required: false
script:
description: Root package script to run.
required: true
browsers:
description: Browsers required by the test script.
default: none
required: false
runs:
using: composite
steps:
- uses: ./.github/actions/submodules-checkout
with:
submodules-ssh-key: ${{ inputs.submodules-ssh-key }}
- uses: ./.github/actions/ci-setup
- name: Cache Playwright Chromium
if: inputs.browsers != 'none'
uses: actions/cache@v5
with:
path: |
~/.cache/ms-playwright/chromium-*
~/.cache/ms-playwright/chromium_headless_shell-*
~/.cache/ms-playwright/ffmpeg-*
key: playwright-chromium-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
- name: Cache Playwright Firefox
if: inputs.browsers == 'chromium-firefox'
uses: actions/cache@v5
with:
path: ~/.cache/ms-playwright/firefox-*
key: playwright-firefox-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
- name: Install package test browsers
if: inputs.browsers == 'chromium-firefox'
shell: bash
run: pnpm --filter @webstudio-is/sdk-components-animation exec playwright install chromium firefox
- name: Install Builder test browser
if: inputs.browsers == 'chromium'
shell: bash
run: pnpm --filter @webstudio-is/builder exec playwright install chromium
- name: Run test suite
shell: bash
run: pnpm run "${{ inputs.script }}"