From 4ceedafe9fad5a866dd7e1ee6094bb6f113578dd Mon Sep 17 00:00:00 2001 From: Tom Boucher Date: Mon, 6 Jul 2026 08:31:51 -0400 Subject: [PATCH] chore(#1925): generalize golden-install-parity generator to all runtimes + args Support regenerating a single runtime (node scripts/gen-golden-install-parity-zcode.cjs zcode) or all runtimes (no args). Needed when a shared payload file changes and every fixture must be recaptured. --- scripts/gen-golden-install-parity-zcode.cjs | 36 ++++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/scripts/gen-golden-install-parity-zcode.cjs b/scripts/gen-golden-install-parity-zcode.cjs index 4ffd68e23..9a421d285 100644 --- a/scripts/gen-golden-install-parity-zcode.cjs +++ b/scripts/gen-golden-install-parity-zcode.cjs @@ -16,7 +16,7 @@ const path = require('node:path'); const crypto = require('node:crypto'); const ROOT = path.resolve(__dirname, '..'); -const { walk, runMinimalInstall } = require(path.join(ROOT, 'tests', 'helpers', 'install-shared.cjs')); +const { walk, runMinimalInstall, RUNTIME_META } = require(path.join(ROOT, 'tests', 'helpers', 'install-shared.cjs')); const PKG_VERSION = require(path.join(ROOT, 'package.json')).version; const FIXTURE_DIR = path.join(ROOT, 'tests', 'fixtures', 'golden-install-parity'); @@ -51,15 +51,27 @@ function cleanup(root) { try { fs.rmSync(root, { recursive: true, force: true }); } catch { /* best effort */ } } -const runtime = 'zcode'; -const { configDir, root } = runMinimalInstall({ runtime, scope: 'global' }); -let actual; -try { - actual = buildParityManifest(configDir, root); -} finally { - cleanup(root); -} +// Regenerate the fixture for every runtime in RUNTIME_META. Needed when a +// SHARED gsd-core payload file (e.g. model-catalog.json, capability-registry) +// changes content — its hash appears in every runtime's manifest, so all +// fixtures must be recaptured together. Usage: +// node scripts/gen-golden-install-parity-zcode.cjs [runtime ...] +// With no args, regenerates ALL runtimes. With args, only the named runtimes. +const targets = process.argv.slice(2).length > 0 ? process.argv.slice(2) : Object.keys(RUNTIME_META); fs.mkdirSync(FIXTURE_DIR, { recursive: true }); -const fixturePath = path.join(FIXTURE_DIR, `${runtime}.json`); -fs.writeFileSync(fixturePath, JSON.stringify(actual, null, 2) + '\n', 'utf8'); -process.stdout.write(`[gen] ${runtime}: wrote ${Object.keys(actual).length} file hashes -> ${fixturePath}\n`); +for (const runtime of targets) { + if (!Object.prototype.hasOwnProperty.call(RUNTIME_META, runtime)) { + process.stderr.write(`[gen] unknown runtime '${runtime}' (not in RUNTIME_META) — skipping\n`); + continue; + } + const { configDir, root } = runMinimalInstall({ runtime, scope: 'global' }); + let actual; + try { + actual = buildParityManifest(configDir, root); + } finally { + cleanup(root); + } + const fixturePath = path.join(FIXTURE_DIR, `${runtime}.json`); + fs.writeFileSync(fixturePath, JSON.stringify(actual, null, 2) + '\n', 'utf8'); + process.stdout.write(`[gen] ${runtime}: wrote ${Object.keys(actual).length} file hashes -> ${fixturePath}\n`); +}