UNPKG

everything-dev

Version:

A consolidated product package for building Module Federation apps with oRPC APIs.

1 lines • 18.6 kB
{"version":3,"file":"publish.mjs","names":[],"sources":["../../../src/cli/commands/publish.ts"],"sourcesContent":["import * as p from \"@clack/prompts\";\nimport { colors, frames, gradients, icons } from \"../../utils/theme\";\nimport { exitCodeFor } from \"../exit-codes\";\nimport { failedDeployLegs, renderDeployLegs } from \"../render/deploy\";\nimport { renderBuildWarnings } from \"../render/deploy-train\";\nimport type { CommandContext, ResultRenderer } from \"./context\";\n\nexport const rollbackPreCall = async (ctx: CommandContext): Promise<void> => {\n const input = ctx.input;\n const client = ctx.client;\n const descriptor = ctx.descriptor;\n const rollbackInput = input as {\n listOnly?: boolean;\n version?: string;\n previous?: boolean;\n [key: string]: unknown;\n };\n if (\n descriptor.key === \"rollback\" &&\n !rollbackInput.listOnly &&\n !rollbackInput.version &&\n !rollbackInput.previous\n ) {\n const listing = await (client as any).rollback({ ...rollbackInput, listOnly: true });\n if (listing.status !== \"list\" || !listing.history?.length) {\n console.error(listing.error ?? \"No publish history found\");\n process.exit(1);\n }\n console.log();\n const selection = await p.select({\n message: \"Roll back to which publish?\",\n options: listing.history.map(\n (entry: {\n blockHeight: number;\n blockTimestamp: string;\n txHash?: string;\n summary: string;\n }) => ({\n value: String(entry.blockHeight),\n label: `${entry.blockTimestamp} (block ${entry.blockHeight})`,\n hint: entry.summary,\n }),\n ),\n });\n if (p.isCancel(selection)) {\n return;\n }\n rollbackInput.version = selection as string;\n }\n};\n\nexport const publishRenderers: Record<string, ResultRenderer> = {\n pluginAdd: async (result, _ctx) => {\n console.log();\n console.log(colors.green(`${icons.ok} Added plugin ${result.key}`));\n if (result.development) console.log(` ${colors.dim(\"Development:\")} ${result.development}`);\n if (result.production) console.log(` ${colors.dim(\"Production:\")} ${result.production}`);\n console.log();\n return;\n },\n\n pluginRemove: async (result, _ctx) => {\n console.log();\n console.log(colors.green(`${icons.ok} Removed plugin ${result.key}`));\n console.log();\n return;\n },\n\n pluginList: async (result, _ctx) => {\n console.log();\n console.log(colors.cyan(frames.top(52)));\n console.log(` ${icons.config} ${gradients.cyber(\"PLUGINS\")}`);\n console.log(colors.cyan(frames.bottom(52)));\n console.log();\n if (result.plugins.length === 0) {\n console.log(colors.dim(\" No plugins configured\"));\n } else {\n for (const pluginItem of result.plugins) {\n console.log(` ${colors.cyan(pluginItem.key)}`);\n if (pluginItem.development)\n console.log(` ${colors.dim(\"Development:\")} ${pluginItem.development}`);\n if (pluginItem.production)\n console.log(` ${colors.dim(\"Production:\")} ${pluginItem.production}`);\n }\n }\n console.log();\n return;\n },\n\n pluginPublish: async (result, _ctx) => {\n console.log();\n console.log(colors.green(`${icons.ok} Published plugin ${result.key}`));\n if (result.path) console.log(` ${colors.dim(\"Path:\")} ${result.path}`);\n if (result.production) console.log(` ${colors.dim(\"Production:\")} ${result.production}`);\n if (result.version) console.log(` ${colors.dim(\"Version:\")} ${result.version}`);\n if (result.fingerprint) console.log(` ${colors.dim(\"Fingerprint:\")} ${result.fingerprint}`);\n console.log();\n return;\n },\n\n registryUse: async (result, _ctx) => {\n console.log();\n if (exitCodeFor(result) === 1) {\n console.error(colors.error(`${icons.err} ${result.error || \"Unknown error\"}`));\n process.exit(1);\n }\n console.log(\n colors.green(\n `${icons.ok} ${result.status === \"dry-run\" ? \"Dry run\" : \"Composed\"} from ${result.from}`,\n ),\n );\n for (const section of result.applied) {\n console.log(` ${colors.green(\"+\")} ${section}`);\n }\n if (result.configPath) {\n console.log(` ${colors.dim(\"Config:\")} ${result.configPath}`);\n }\n if (result.status === \"updated\") {\n console.log(colors.dim(\" Run bos types gen to refresh generated types.\"));\n }\n console.log();\n return;\n },\n\n publish: async (result, _ctx) => {\n if (result.status === \"dry-run\") {\n console.log();\n console.log(colors.cyan(`${icons.ok} Dry run complete`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${result.registryUrl}`);\n console.log();\n return;\n }\n\n if (exitCodeFor(result) === 1) {\n console.log();\n console.log(colors.error(`${icons.err} Publish failed`));\n if (result.error) {\n console.log(` ${colors.dim(\"Error:\")} ${result.error}`);\n }\n if (result.deployResults && result.deployResults.length > 0) {\n const failures = result.deployResults.filter((r: any) => !r.success);\n if (failures.length > 0) {\n console.log();\n for (const f of failures) {\n const errorLine = (f.error ?? \"Failed\").split(\"\\n\")[0];\n console.log(` ${colors.error(icons.err)} ${f.key}: ${errorLine}`);\n }\n }\n }\n console.log();\n process.exit(1);\n }\n\n if (result.status === \"published\") {\n console.log();\n console.log(colors.green(`${icons.ok} Published successfully`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${result.registryUrl}`);\n if (result.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${result.txHash}`);\n }\n if (result.built && result.built.length > 0) {\n console.log(` ${colors.dim(\"Built:\")} ${result.built.join(\", \")}`);\n }\n if (result.skipped && result.skipped.length > 0) {\n console.log(` ${colors.dim(\"Skipped:\")} ${result.skipped.join(\", \")}`);\n }\n if (result.deployResults) {\n const warnings = result.deployResults.flatMap((r: any) => r.warnings ?? []);\n if (warnings.length > 0) {\n console.log();\n console.log(` ${colors.yellow(\"⚠\")} Build warnings:`);\n for (const w of warnings) {\n console.log(` ${colors.dim(w)}`);\n }\n }\n }\n console.log();\n return;\n }\n },\n\n rollback: async (result, _ctx) => {\n const rollbackResult = result as any;\n if (rollbackResult.status === \"error\") {\n console.log();\n console.log(colors.error(`${icons.err} Roll back failed`));\n if (rollbackResult.error) {\n console.log(` ${colors.dim(\"Error:\")} ${rollbackResult.error}`);\n }\n if (rollbackResult.verification) {\n console.log();\n for (const check of rollbackResult.verification) {\n const mark = check.ok ? colors.green(icons.ok) : colors.error(icons.err);\n const reason = check.reason ? colors.dim(` — ${check.reason}`) : \"\";\n console.log(` ${mark} ${check.slot}${reason}`);\n }\n }\n console.log();\n process.exit(1);\n }\n\n if (rollbackResult.status === \"dry-run\") {\n console.log();\n console.log(colors.cyan(`${icons.ok} Rollback dry run complete`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${rollbackResult.registryUrl}`);\n console.log();\n return;\n }\n\n console.log();\n console.log(colors.green(`${icons.ok} Rolled back`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${rollbackResult.registryUrl}`);\n if (rollbackResult.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${rollbackResult.txHash}`);\n }\n console.log();\n return;\n },\n\n deploy: async (result, _ctx) => {\n const deployResult = result as any;\n if (deployResult.status === \"list\") {\n console.log();\n console.log(colors.cyan(\"Recent publishes (audit trail)\"));\n for (const entry of deployResult.history ?? []) {\n console.log(\n ` ${entry.blockTimestamp} ${colors.dim(`block ${entry.blockHeight}`)}${entry.publishedAt ? colors.dim(` ${entry.publishedAt}`) : \"\"}`,\n );\n }\n console.log();\n return;\n }\n if (deployResult.fingerprint) {\n console.log(` ${colors.dim(\"Fingerprint:\")} ${deployResult.fingerprint}`);\n }\n if (deployResult.status === \"dry-run\") {\n console.log();\n console.log(colors.cyan(`${icons.ok} Dry run complete`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n console.log();\n return;\n }\n\n if (deployResult.status === \"error\") {\n console.log();\n console.log(colors.error(`${icons.err} Deploy failed`));\n if (deployResult.error) {\n console.log(` ${colors.dim(\"Error:\")} ${deployResult.error}`);\n }\n if (deployResult.deployResults && deployResult.deployResults.length > 0) {\n const failures = deployResult.deployResults.filter((r: any) => !r.success);\n if (failures.length > 0) {\n console.log();\n for (const f of failures) {\n const errorLine = (f.error ?? \"Failed\").split(\"\\n\")[0];\n console.log(` ${colors.error(icons.err)} ${f.key}: ${errorLine}`);\n }\n }\n }\n console.log();\n process.exit(1);\n }\n\n if (deployResult.status === \"deployed\") {\n console.log();\n console.log(colors.green(`${icons.ok} Deployed successfully`));\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n if (deployResult.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${deployResult.txHash}`);\n }\n if (deployResult.built && deployResult.built.length > 0) {\n console.log(` ${colors.dim(\"Built:\")} ${deployResult.built.join(\", \")}`);\n }\n if (deployResult.skipped && deployResult.skipped.length > 0) {\n console.log(` ${colors.dim(\"Skipped:\")} ${deployResult.skipped.join(\", \")}`);\n }\n if (deployResult.deployResults) {\n renderBuildWarnings(\n deployResult.deployResults as Array<{ key: string; warnings?: string[] }>,\n );\n }\n if (deployResult.image) {\n console.log(` ${colors.dim(\"Image:\")} ${deployResult.image}`);\n }\n if (deployResult.service) {\n console.log(` ${colors.dim(\"Railway:\")} deployed ${deployResult.service}`);\n }\n renderDeployLegs(deployResult.legs);\n console.log();\n return;\n }\n\n if (deployResult.status === \"published\") {\n const failedLegs = failedDeployLegs(deployResult.legs);\n console.log();\n console.log(\n colors.yellow(\n failedLegs.length > 0\n ? `${icons.err} Config published, but the ${failedLegs.join(\" and \")} leg(s) failed`\n : `${icons.err} Config published, but a deploy leg failed`,\n ),\n );\n console.log(` ${colors.dim(\"Registry URL:\")} ${deployResult.registryUrl}`);\n if (deployResult.txHash) {\n console.log(` ${colors.dim(\"Transaction:\")} ${deployResult.txHash}`);\n }\n if (deployResult.error) {\n console.log(` ${colors.dim(\"Error:\")} ${deployResult.error}`);\n }\n renderDeployLegs(deployResult.legs);\n console.log();\n process.exit(1);\n }\n },\n};\n"],"mappings":"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"}