mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-10-27 15:16:53 +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.
50 lines
1.2 KiB
Bash
50 lines
1.2 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
run_step() {
|
|
local name="$1"
|
|
local timeout_seconds="$2"
|
|
shift 2
|
|
|
|
echo "▶ $name"
|
|
local started_at
|
|
started_at="$(date +%s)"
|
|
|
|
# Monitor mode gives the background command its own process group. Killing
|
|
# that group also stops descendants such as apt-get before a workflow retry.
|
|
local restore_monitor_mode=false
|
|
if [[ "$-" != *m* ]]; then
|
|
set -m
|
|
restore_monitor_mode=true
|
|
fi
|
|
"$@" </dev/null &
|
|
local pid="$!"
|
|
if [ "$restore_monitor_mode" = "true" ]; then
|
|
set +m
|
|
fi
|
|
|
|
local timeout_at
|
|
timeout_at="$(($(date +%s) + timeout_seconds))"
|
|
while kill -0 "$pid" 2>/dev/null; do
|
|
if [ "$(date +%s)" -ge "$timeout_at" ]; then
|
|
echo "Timed out after ${timeout_seconds}s: $name" >&2
|
|
kill -TERM -- "-$pid" 2>/dev/null || true
|
|
sleep "${RUN_STEP_TERMINATION_GRACE_SECONDS:-10}"
|
|
kill -KILL -- "-$pid" 2>/dev/null || true
|
|
wait "$pid" || true
|
|
return 124
|
|
fi
|
|
sleep 0.1
|
|
done
|
|
local status=0
|
|
wait "$pid" || status="$?"
|
|
if [ "$status" -ne 0 ]; then
|
|
local duration
|
|
duration="$(($(date +%s) - started_at))"
|
|
echo "✗ $name (${duration}s)" >&2
|
|
return "$status"
|
|
fi
|
|
local duration
|
|
duration="$(($(date +%s) - started_at))"
|
|
echo "✓ $name (${duration}s)"
|
|
}
|