Files
memind/scripts/run-release-gate-artifact-repro.mjs
T

34 lines
1.1 KiB
JavaScript
Raw Normal View History

2026-07-26 14:32:01 +08:00
#!/usr/bin/env node
import { spawn } from 'node:child_process';
import path from 'node:path';
import { assertPortalRuntimePath, hashArtifact } from '../release-gate/artifact.mjs';
const root = path.resolve(new URL('..', import.meta.url).pathname);
const runtime = assertPortalRuntimePath(path.join(root, '.runtime', 'portal'), { repoRoot: root });
async function buildRuntime() {
const code = await new Promise((resolve, reject) => {
const child = spawn('npm', ['run', 'build:portal-runtime'], {
cwd: root,
env: process.env,
stdio: 'inherit',
});
child.once('error', reject);
child.once('close', (status) => resolve(status ?? 1));
});
if (code !== 0) throw new Error(`runtime rebuild failed with code ${code}`);
}
await buildRuntime();
const firstRebuild = await hashArtifact(runtime);
await buildRuntime();
const secondRebuild = await hashArtifact(runtime);
if (firstRebuild.sha256 !== secondRebuild.sha256) {
throw new Error(
`runtime is not reproducible: ${firstRebuild.sha256} != ${secondRebuild.sha256}`,
);
2026-07-26 14:32:01 +08:00
}
console.log(`PASS REL-03 reproducible runtime sha256=${firstRebuild.sha256}`);