73 lines
3.1 KiB
JavaScript
73 lines
3.1 KiB
JavaScript
import { spawnSync } from "node:child_process";
|
|
|
|
const baseUrl = process.env.PROJECTBRAIN_SMOKE_URL ?? "http://127.0.0.1:1209";
|
|
const projectId = process.env.PROJECTBRAIN_SMOKE_PROJECT ?? "widefrog";
|
|
const archiveOut = process.env.PROJECTBRAIN_PROOF_OUT;
|
|
const skipSmokes = process.argv.includes("--skip-smokes") || process.env.PROJECTBRAIN_RELEASE_SKIP_SMOKES === "1";
|
|
const includeDeploymentProof = process.argv.includes("--deployment-proof") || process.env.PROJECTBRAIN_RELEASE_DEPLOYMENT_PROOF === "1";
|
|
const includeDossier = process.argv.includes("--dossier") || process.env.PROJECTBRAIN_RELEASE_DOSSIER === "1";
|
|
|
|
const run = (label, command, args, env = {}) => {
|
|
console.log(`\n[release-bundle] ${label}`);
|
|
const result = spawnSync(command, args, {
|
|
env: { ...process.env, ...env },
|
|
shell: process.platform === "win32",
|
|
stdio: "inherit",
|
|
});
|
|
|
|
if (result.status !== 0) {
|
|
throw new Error(`${label} failed with exit code ${result.status}`);
|
|
}
|
|
};
|
|
|
|
try {
|
|
console.log("ProjectBrain release command bundle");
|
|
console.log(`Base URL: ${baseUrl}`);
|
|
console.log(`Project: ${projectId}`);
|
|
console.log(`Smoke mode: ${skipSmokes ? "skipped" : "enabled"}`);
|
|
console.log(`Deployment proof: ${includeDeploymentProof ? "enabled" : "skipped"}`);
|
|
console.log(`Evidence dossier: ${includeDossier ? "enabled" : "skipped"}`);
|
|
|
|
const proofEnv = {
|
|
PROJECTBRAIN_SMOKE_URL: baseUrl,
|
|
PROJECTBRAIN_SMOKE_PROJECT: projectId,
|
|
PROJECTBRAIN_PROOF_WRITE: "1",
|
|
PROJECTBRAIN_PROOF_RUN_SMOKES: skipSmokes ? "0" : "1",
|
|
};
|
|
if (archiveOut) proofEnv.PROJECTBRAIN_PROOF_OUT = archiveOut;
|
|
|
|
run("Create release proof snapshot", "pnpm", ["run", "release:proof-report"], proofEnv);
|
|
run("Index release proof snapshots", "pnpm", ["run", "release:proof-index", "--", "--limit=5"], {
|
|
PROJECTBRAIN_SMOKE_PROJECT: projectId,
|
|
});
|
|
run("Verify release proof freshness", "pnpm", ["run", "release:proof-freshness"], {
|
|
PROJECTBRAIN_SMOKE_PROJECT: projectId,
|
|
});
|
|
run("Create release signoff file", "pnpm", ["run", "release:signoff-file"], {
|
|
PROJECTBRAIN_SMOKE_PROJECT: projectId,
|
|
});
|
|
if (includeDeploymentProof) {
|
|
run("Create remote deployment proof", "pnpm", ["run", "release:deployment-proof"], {
|
|
PROJECTBRAIN_DEPLOY_URL: baseUrl,
|
|
PROJECTBRAIN_DEPLOY_PROOF_WRITE: "1",
|
|
});
|
|
}
|
|
if (includeDossier) {
|
|
run("Create release evidence dossier", "pnpm", ["run", "release:dossier"], {
|
|
PROJECTBRAIN_SMOKE_PROJECT: projectId,
|
|
});
|
|
}
|
|
|
|
console.log("\nRelease command bundle passed.");
|
|
console.log(includeDossier
|
|
? "Release proof is fresh, signoff and deployment proof passed, and a release evidence dossier was written."
|
|
: includeDeploymentProof
|
|
? "Release proof is fresh, a signoff file was written and remote deployment proof passed."
|
|
: "Release proof is fresh for the current commit and a signoff file was written.");
|
|
} catch (error) {
|
|
console.error("\nRelease command bundle failed:");
|
|
console.error(error instanceof Error ? error.message : String(error));
|
|
console.error("\nNext step: rerun with live URL and smokes enabled, then inspect the proof report above.");
|
|
process.exitCode = 1;
|
|
}
|