mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-11-09 22:14:29 +09:00
## 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.
56 lines
1.6 KiB
YAML
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 }}"
|