mirror of
https://github.com/webstudio-is/webstudio.git
synced 2026-10-30 08:37:56 +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.
39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import { execFile } from "node:child_process";
|
|
import { promisify } from "node:util";
|
|
|
|
const execFileAsync = promisify(execFile);
|
|
|
|
const fixtureLimits = [
|
|
["./fixtures/ssg-cloudflare-pages/dist/client", 356],
|
|
["./fixtures/react-router-netlify/build/client", 376],
|
|
["./fixtures/webstudio-features/build/client", 3684],
|
|
] as const;
|
|
|
|
const results = await Promise.all(
|
|
fixtureLimits.map(async ([directory, maxSize]) => {
|
|
const { stdout } = await execFileAsync("du", ["-sk", directory]);
|
|
const size = Number.parseInt(stdout, 10);
|
|
return {
|
|
directory,
|
|
size,
|
|
diff: size - maxSize,
|
|
passed: size <= maxSize,
|
|
};
|
|
})
|
|
);
|
|
|
|
for (const result of results) {
|
|
const difference = result.diff > 0 ? `+${result.diff}` : result.diff;
|
|
const message = `${result.directory}: ${result.size}kB (${difference}kB)`;
|
|
if (result.passed) {
|
|
console.info(message);
|
|
} else {
|
|
console.error(`\n${message}`);
|
|
}
|
|
}
|
|
|
|
if (results.some((result) => result.passed === false)) {
|
|
console.error("Some fixtures exceeded limits");
|
|
process.exitCode = 1;
|
|
}
|