Files
FreeCADWasmDev/tools/replay_mesh_scheduler_failures.mjs
wangdequan 9a7c4f0335 Save FreeCAD Web workspace sources and user validation evidence
IFC native binding remains incomplete; preserve accurate test results.
2026-09-15 22:01:58 +08:00

59 lines
2.9 KiB
JavaScript

#!/usr/bin/env node
import fs from "node:fs";
import path from "node:path";
import { createRequire } from "node:module";
import { pathToFileURL } from "node:url";
const root = "/home/mes123456/FreeCADWasmDev/working/FreeCAD";
const build = path.join(root, "freecad-source/build-web/configure/bin");
const mode = process.argv[2] ?? "defects";
const groups = {
defects: [
["Mesh::Curvature", "src/Mod/Mesh/App/FeatureMeshCurvature.h"],
["Mesh::FixDefects", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
["Mesh::HarmonizeNormals", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
["Mesh::FlipNormals", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
["Mesh::FixNonManifolds", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
["Mesh::FixDuplicatedFaces", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
["Mesh::FixDuplicatedPoints", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
["Mesh::FixDegenerations", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
],
second: [
["Mesh::FixDeformations", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
["Mesh::FixIndices", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
["Mesh::FillHoles", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
["Mesh::RemoveComponents", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
["Mesh::Export", "src/Mod/Mesh/App/FeatureMeshExport.h"],
["Mesh::Import", "src/Mod/Mesh/App/FeatureMeshImport.h"],
["Mesh::SegmentByMesh", "src/Mod/Mesh/App/FeatureMeshSegmentByMesh.h"],
["Mesh::SetOperations", "src/Mod/Mesh/App/FeatureMeshSetOperations.h"],
],
};
const rows = groups[mode];
if (!rows) throw new Error(`unknown replay mode: ${mode}`);
globalThis.__dirname = `${build}${path.sep}`;
globalThis.require = createRequire(import.meta.url);
const workerJs = path.join(build, "FreeCADWebMeshRuntimeProbe.worker.js");
const workerCjs = path.join(build, "FreeCADWebMeshRuntimeProbe.worker.cjs");
if (!fs.existsSync(workerCjs) && fs.existsSync(workerJs)) fs.copyFileSync(workerJs, workerCjs);
const loader = await import(pathToFileURL(path.join(build, "FreeCADWebMeshRuntimeProbe.js")));
const kernel = await loader.default({
wasmBinary: fs.readFileSync(path.join(build, "FreeCADWebMeshRuntimeProbe.wasm")),
locateFile: file => file.endsWith(".worker.js") ? workerCjs : path.join(build, file),
print: () => {},
printErr: () => {},
});
const records = rows.map(([name, sourcePath]) => ({
apiId: `obj:Mesh:${name}`,
name,
family: "geometry-recompute",
kind: "object",
sourcePath,
disposition: "planned",
}));
const request = { cmd: "mesh.pythonFamilyBatch", args: { tier: "object-contract", records } };
const result = JSON.parse(String(kernel.ccall("fc_web_dispatch_json", "string", ["string"], [JSON.stringify(request)])));
if (!result.ok || result.count !== records.length || result.resourcesReleased !== true) throw new Error(JSON.stringify(result));
console.log(JSON.stringify({ mode, count: result.count, statuses: result.records.map(record => record.status), resourcesReleased: result.resourcesReleased }));
process.exit(0);