35 lines
1.2 KiB
JavaScript
35 lines
1.2 KiB
JavaScript
#!/usr/bin/env node
|
|
import path from 'node:path';
|
|
|
|
import { loadScenarioCatalog } from '../release-gate/catalog.mjs';
|
|
import { loadActiveRegressionCorpus } from '../release-gate/regression-corpus.mjs';
|
|
import { runCommand } from '../release-gate/runner.mjs';
|
|
|
|
const root = path.resolve(new URL('..', import.meta.url).pathname);
|
|
const catalog = await loadScenarioCatalog({ root });
|
|
const corpus = await loadActiveRegressionCorpus({ root, catalog });
|
|
|
|
if (corpus.status !== 'ready') {
|
|
console.error(
|
|
`COMP-09 blocked: regression corpus is ${corpus.status}; `
|
|
+ `${corpus.errors.join('; ') || 'no active privacy-reviewed manifest'}`,
|
|
);
|
|
process.exit(1);
|
|
}
|
|
|
|
for (const fixture of corpus.fixtures) {
|
|
const [command, ...args] = fixture.automation.command;
|
|
const result = await runCommand(command, args, {
|
|
cwd: root,
|
|
timeoutMs: Number(process.env.RELEASE_GATE_CORPUS_CASE_TIMEOUT_MS ?? 60_000),
|
|
});
|
|
if (result.code !== 0 || result.timedOut) {
|
|
console.error(`COMP-09 fixture failed: ${fixture.id}`);
|
|
console.error(result.stderr || result.stdout);
|
|
process.exit(1);
|
|
}
|
|
console.log(`PASS ${fixture.id} ${fixture.scenario_ids.join(',')}`);
|
|
}
|
|
|
|
console.log(`PASS COMP-09 fixtures=${corpus.fixtures.length} production_connected=false`);
|