7 lines
2.5 KiB
JavaScript
7 lines
2.5 KiB
JavaScript
#!/usr/bin/env node
|
|
import crypto from "node:crypto";
|
|
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
const root=path.resolve(path.dirname(fileURLToPath(import.meta.url)),"..");const p6=path.join(root,"docs/p6");const read=f=>JSON.parse(fs.readFileSync(path.join(p6,f),"utf8"));const kernel=read("partdesign-geometry-family-kernel.json");const nativePath=path.join(p6,"partdesign-geometry-family-native.json");const native=fs.existsSync(nativePath)?read("partdesign-geometry-family-native.json"):null;const nativeByName=new Map((native?.records??[]).map(r=>[r.name,r]));const records=kernel.records.map(r=>{const result=nativeByName.get(r.name);if(result)return{name:r.name,status:result.status,detail:result.detail,code:result.code,registered:result.registered,created:result.created,recomputed:result.recomputed};return{name:r.name,status:"blocked",detail:"native geometry-family smoke has not produced a record",code:"native_evidence_missing",registered:r.registered};});const counts=Object.fromEntries(["passed","blocked"].map(status=>[status,records.filter(r=>r.status===status).length]));const result=kernel.result==="pass"&&records.length===25&&kernel.counts.registered===25&&counts.blocked===0;const report={schema:"freecad-web-p6-partdesign-geometry-family-gate/v1",taskId:"FW-P6-FPA-D1-PARTDESIGN",result:result?"pass":"pass_with_blocked_records",coverage:{inventoryRecords:25,probedRecords:records.length,counts,allTypesRegistered:kernel.counts.missing===0,representativeCreateRecompute:kernel.counts.representativeCreateRecompute===1},records,source:{kernel:"docs/p6/partdesign-geometry-family-kernel.json",native:native?"docs/p6/partdesign-geometry-family-native.json":null,kernelSha256:crypto.createHash("sha256").update(fs.readFileSync(path.join(p6,"partdesign-geometry-family-kernel.json"))).digest("hex"),nativeSha256:native?crypto.createHash("sha256").update(fs.readFileSync(nativePath)).digest("hex"):null},boundaries:["All 25 PartDesign geometry types are native registered.","Each status is sourced from the PartDesign probe fc_web_dispatch_json geometry-family command; blocked records retain their first native error."]};fs.writeFileSync(path.join(p6,"partdesign-geometry-family-gate.json"),JSON.stringify(report,null,2)+"\n");fs.writeFileSync(path.join(root,"docs/freecad-p6-partdesign-geometry-family-gate.log"),JSON.stringify({result:report.result,counts:report.coverage.counts})+"\n");console.log(JSON.stringify({result:report.result,counts:report.coverage.counts}));if(!result)process.exitCode=1;
|