test: complete WP4-07 visual and performance budgets
Dada P0-A isolated Windows CI / validate-and-package (push) Failing after 2m34s

This commit is contained in:
suyx
2026-08-04 12:55:25 +08:00
parent 15f7afbe4d
commit c0a8bd6d43
23 changed files with 516 additions and 122 deletions
+32 -7
View File
@@ -9,6 +9,35 @@ import { readWp5RemoteGate, validateWp407FrozenInputs } from "./lib/wp4-07-gate.
const phaseIndex = process.argv.indexOf("--phase");
const phase = phaseIndex >= 0 ? process.argv[phaseIndex + 1] : "green";
if (!["red", "green"].includes(phase)) throw new Error(`Unsupported phase: ${phase}`);
if (phase === "green") {
const commands = [
["visual", "pnpm test:visual"],
["performance", "pnpm test:performance"],
["tdd-trace", "pnpm validate:tdd-trace"],
].map(([name, command]) => {
const started_at = new Date().toISOString();
const result = spawnSync(process.env.ComSpec ?? "cmd.exe", ["/d", "/s", "/c", command], {
encoding: "utf8",
env: process.env,
maxBuffer: 64 * 1024 * 1024,
});
if (result.stdout) process.stdout.write(result.stdout);
if (result.stderr) process.stderr.write(result.stderr);
return {
command,
exit_code: result.status ?? 1,
finished_at: new Date().toISOString(),
name,
started_at,
};
});
const status = commands.every((command) => command.exit_code === 0) ? "automated_green_pending_manual" : "failed";
console.log(JSON.stringify({ commands, phase, status }, null, 2));
if (status === "failed") process.exit(1);
process.exit(0);
}
const runId = process.env.DADA_TDD_RUN_ID ?? `wp4-07-${phase}-${new Date().toISOString().replace(/[^0-9]/g, "")}`;
const runDirectory = resolve("artifacts", "tdd", runId);
const casesDirectory = resolve(runDirectory, "cases");
@@ -66,8 +95,7 @@ function runDirect(name, executable, args, expected) {
};
}
const commands = phase === "red"
? [
const commands = [
run("fixture-contract", "node --test tests/visual-performance/wp4-07-fixture.test.mjs tests/visual-performance/wp4-07-gate.test.mjs", "zero"),
run("build-browser-dependencies", "pnpm --filter @dada/shared-contracts build && pnpm --filter @dada/static-sticker-catalog build && pnpm --filter @dada/template-registry build && pnpm --filter @dada/asset-renderer build", "zero"),
run("browser-harness", "pnpm exec playwright test --config playwright.wp4-07.config.ts", "zero"),
@@ -76,11 +104,6 @@ const commands = phase === "red"
run("visual-green-gate", "pnpm test:visual", "nonzero_wp5_gate"),
run("performance-green-gate", "pnpm test:performance", "nonzero_wp5_gate"),
run("tdd-trace", "pnpm validate:tdd-trace", "zero"),
]
: [
run("visual", "pnpm test:visual", "zero"),
run("performance", "pnpm test:performance", "zero"),
run("tdd-trace", "pnpm validate:tdd-trace", "zero"),
];
function findFiles(directory, name) {
@@ -95,6 +118,8 @@ if (phase === "red") {
const traces = findFiles(resolve(runDirectory, "playwright-output"), "trace.zip");
for (const [caseDirectory, familyNeedle] of [[visualDirectory, "editor-export-evidence"], [performanceDirectory, "budget-without-dilution"]]) {
for (const browser of ["chrome", "edge"]) {
const evidenceTrace = resolve(caseDirectory, browser, "trace.zip");
if (existsSync(evidenceTrace)) continue;
const trace = traces.find((path) => path.toLowerCase().includes(familyNeedle) && path.toLowerCase().includes(browser));
if (trace) {
mkdirSync(resolve(caseDirectory, browser), { recursive: true });