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