From 8ad26ad1ec42c18e63e0fec38f072907ed36a3f6 Mon Sep 17 00:00:00 2001 From: Matt Davis Date: Sun, 8 Nov 2026 19:22:46 -0500 Subject: [PATCH 1/2] Apply suggested fix to scripts/contracts/generate.mjs from Copilot Autofix Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com> --- scripts/contracts/generate.mjs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/scripts/contracts/generate.mjs b/scripts/contracts/generate.mjs index 2ce4a8f31..7cd786827 100644 --- a/scripts/contracts/generate.mjs +++ b/scripts/contracts/generate.mjs @@ -1,8 +1,7 @@ -import {readFile, writeFile, mkdir, readdir, mkdtemp, rm} from 'node:fs/promises'; +import {readFile, writeFile, mkdir, readdir, rm} from 'node:fs/promises'; import {execFileSync} from 'node:child_process'; import {fileURLToPath} from 'node:url'; import path from 'node:path'; -import os from 'node:os'; import openapiTS, {astToString} from 'openapi-typescript'; import Ajv2020 from 'ajv/dist/2020.js'; import addFormats from 'ajv-formats'; @@ -145,9 +144,7 @@ async function main() { } const files = await generateArtifacts(source, target); if (check) { - const temp = await mkdtemp(path.join(os.tmpdir(), 'lightnvr-contract-check-')); - try { await writeArtifacts(files, temp); await checkArtifacts(files, outputRoot); } - finally { await rm(temp, {recursive: true, force: true}); } + await checkArtifacts(files, outputRoot); } else await writeArtifacts(files, outputRoot); console.log(`${check ? 'Checked' : 'Generated'} ${files.size} contract artifacts (${target})`); } From daea05b0f18c4c7b26be63e5fff06d03b49bfb1f Mon Sep 17 00:00:00 2001 From: Matt Davis Date: Sun, 8 Nov 2026 20:42:34 -0500 Subject: [PATCH 2/2] fix(contracts): retain temporary file imports for native generation --- scripts/contracts/generate.mjs | 3 ++- tests/contracts/tooling/generator.test.mjs | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/contracts/generate.mjs b/scripts/contracts/generate.mjs index 7cd786827..fa5c98396 100644 --- a/scripts/contracts/generate.mjs +++ b/scripts/contracts/generate.mjs @@ -1,7 +1,8 @@ -import {readFile, writeFile, mkdir, readdir, rm} from 'node:fs/promises'; +import {readFile, writeFile, mkdir, readdir, mkdtemp, rm} from 'node:fs/promises'; import {execFileSync} from 'node:child_process'; import {fileURLToPath} from 'node:url'; import path from 'node:path'; +import os from 'node:os'; import openapiTS, {astToString} from 'openapi-typescript'; import Ajv2020 from 'ajv/dist/2020.js'; import addFormats from 'ajv-formats'; diff --git a/tests/contracts/tooling/generator.test.mjs b/tests/contracts/tooling/generator.test.mjs index 247e40987..90a14e356 100644 --- a/tests/contracts/tooling/generator.test.mjs +++ b/tests/contracts/tooling/generator.test.mjs @@ -56,6 +56,13 @@ test('native Python and web generation are deterministic; drift check fails with execFileSync('python3',[path.join(root,'scripts/contracts/generate_native.py'),'--source',source,'--output',path.join(directory,'direct.h')]); assert.equal(await readFile(path.join(directory,'direct.h'),'utf8'),artifacts.get(nativePath)); await checkArtifacts(again,directory); + for(const [target,count] of [['all',4],['native',1],['web',3]]) { + const checked=spawnSync(process.execPath,[path.join(root,'scripts/contracts/generate.mjs'), + '--check',`--target=${target}`,'--source',source,'--output-root',directory],{encoding:'utf8'}); + assert.equal(checked.status,0,checked.stderr); + assert.match(checked.stdout,new RegExp(`Checked ${count} contract artifacts`)); + await checkArtifacts(artifacts,directory); + } const corrupt = path.join(directory,webPaths[0]); await writeFile(corrupt,'deliberate drift\n'); const result=spawnSync(process.execPath,[path.join(root,'scripts/contracts/generate.mjs'),'--check','--source',source,'--output-root',directory],{encoding:'utf8'});