import { spawnSync } from "node:child_process"; import { readdirSync, statSync } from "node:fs"; import { join } from "node:path"; // Test files that fail today. Give each a reason, fix it, then remove it. const knownFailing = new Map([ [ "server/setup/migrationsSqlite.backup.test.ts", "migration 1.24.0 fails: missing resources table in seeded db" ], [ "server/lib/traefik/traefikConfig.test.ts", "config undefined on import (logger circular dependency)" ] ]); const skipDirs = new Set(["node_modules", ".next", "dist", ".git"]); function find(dir) { return readdirSync(dir).flatMap((name) => { if (skipDirs.has(name) || name.startsWith("private")) return []; const p = join(dir, name); if (statSync(p).isDirectory()) return find(p); return p.endsWith(".test.ts") ? [p] : []; }); } const files = find("."); const failed = []; for (const f of files) { if (knownFailing.has(f)) { console.log(`\n== SKIPPED ${f}: ${knownFailing.get(f)}`); continue; } console.log(`\n== ${f}`); const r = spawnSync("npx", ["tsx", f], { stdio: "inherit", shell: true }); if (r.status !== 0) failed.push(f); } const ran = files.length - knownFailing.size; console.log(`\n${ran - failed.length}/${ran} test files passed`); if (failed.length) { console.log("FAILED:\n" + failed.join("\n")); process.exit(1); }