#!/usr/bin/env node import { executeReleaseGate, parseRunnerArgs } from '../release-gate/runner.mjs'; function usage() { console.log(`Usage: node scripts/run-release-gate.mjs --mode --artifact .runtime/portal [--suite-concurrency 4] The runner always fails closed. Unknown, skipped, blocked, failed, or unimplemented scenarios make the command exit non-zero. Production hosts are rejected in code.`); } try { const options = parseRunnerArgs(process.argv); if (options.help) { usage(); process.exit(0); } const { report, outputDir } = await executeReleaseGate(options); const summary = report.summary; console.log(`Release gate report: ${outputDir}`); console.log(JSON.stringify(summary)); const passed = summary.failed === 0 && summary.skipped === 0 && summary.blocked === 0 && summary.unknown === 0 && summary.cleanup_failed === 0 && summary.passed + summary.not_applicable === summary.required; process.exit(passed ? 0 : 1); } catch (error) { console.error(`Release gate failed: ${error.message}`); process.exit(1); }