Files
tyx_AI_xhs/scripts/run-wp0-01-validation.mjs

80 lines
2.9 KiB
JavaScript

import { createHash } from "node:crypto";
import { spawnSync } from "node:child_process";
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
import { resolve } from "node:path";
const runId = process.env.DADA_TDD_RUN_ID ?? `wp0-01-green-${new Date().toISOString().replace(/[^0-9]/g, "")}`;
const caseId = "TDD-WP0-DEP-001-frozen-toolchain";
const evidenceDirectory = resolve("artifacts", "tdd", runId, "cases", caseId);
if (existsSync(evidenceDirectory)) {
throw new Error(`Evidence run already exists: ${runId}`);
}
mkdirSync(evidenceDirectory, { recursive: true });
const commandDefinitions = [
{ command: "pnpm install --frozen-lockfile --offline", args: ["install", "--frozen-lockfile", "--offline"] },
{ command: "pnpm test:unit", args: ["test:unit"] },
{ command: "pnpm test:security", args: ["test:security"] },
{ command: "pnpm test:package", args: ["test:package"] },
{ command: "pnpm validate:tdd-trace", args: ["validate:tdd-trace"] },
];
const startedAt = new Date().toISOString();
const commands = [];
for (const definition of commandDefinitions) {
const commandStartedAt = new Date().toISOString();
const executable = process.platform === "win32" ? (process.env.ComSpec ?? "cmd.exe") : "pnpm";
const args = process.platform === "win32"
? ["/d", "/s", "/c", `pnpm ${definition.args.join(" ")}`]
: definition.args;
const result = spawnSync(executable, args, {
env: { ...process.env, DADA_EVIDENCE_DIR: evidenceDirectory },
stdio: "inherit",
});
commands.push({
command: definition.command,
exit_code: result.status ?? 1,
finished_at: new Date().toISOString(),
started_at: commandStartedAt,
});
}
const allPassed = commands.every((command) => command.exit_code === 0);
const requiredEvidence = ["dependency-tree.json", "native-smoke.json"];
const missingEvidence = requiredEvidence.filter((path) => !existsSync(resolve(evidenceDirectory, path)));
const passed = allPassed && missingEvidence.length === 0;
writeFileSync(
resolve(evidenceDirectory, "commands.json"),
`${JSON.stringify({ schema_version: "1.0", run_id: runId, phase: "green", commands }, null, 2)}\n`,
);
const manifestBytes = readFileSync("tasks.manifest.json");
const result = {
schema_version: "1.0",
run_id: runId,
task_id: "TASK-WP0-01",
case_id: caseId,
parent_family: "TDD-WP0-DEP-001",
phase: "green",
status: passed ? "passed" : "failed",
manifest: {
path: "tasks.manifest.json",
sha256: createHash("sha256").update(manifestBytes).digest("hex").toUpperCase(),
},
environment: {
arch: process.arch,
node: process.version.slice(1),
os: process.platform,
},
evidence_files: ["commands.json", ...requiredEvidence],
missing_evidence: missingEvidence,
started_at: startedAt,
finished_at: new Date().toISOString(),
};
writeFileSync(resolve(evidenceDirectory, "result.json"), `${JSON.stringify(result, null, 2)}\n`);
console.log(JSON.stringify(result, null, 2));
if (!passed) process.exit(1);