Files
projectbrain-Public/scripts/release-command-bundle.mjs
T

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;
}