everything-dev
Version:
A consolidated product package for building Module Federation apps with oRPC APIs.
224 lines (222 loc) • 11.1 kB
JavaScript
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
const require_theme = require('../../utils/theme.cjs');
const require_deploy_train = require('../render/deploy-train.cjs');
const require_exit_codes = require('../exit-codes.cjs');
const require_deploy = require('../render/deploy.cjs');
let _clack_prompts = require("@clack/prompts");
_clack_prompts = require_runtime.__toESM(_clack_prompts, 1);
//#region src/cli/commands/publish.ts
const rollbackPreCall = async (ctx) => {
const input = ctx.input;
const client = ctx.client;
const descriptor = ctx.descriptor;
const rollbackInput = input;
if (descriptor.key === "rollback" && !rollbackInput.listOnly && !rollbackInput.version && !rollbackInput.previous) {
const listing = await client.rollback({
...rollbackInput,
listOnly: true
});
if (listing.status !== "list" || !listing.history?.length) {
console.error(listing.error ?? "No publish history found");
process.exit(1);
}
console.log();
const selection = await _clack_prompts.select({
message: "Roll back to which publish?",
options: listing.history.map((entry) => ({
value: String(entry.blockHeight),
label: `${entry.blockTimestamp} (block ${entry.blockHeight})`,
hint: entry.summary
}))
});
if (_clack_prompts.isCancel(selection)) return;
rollbackInput.version = selection;
}
};
const publishRenderers = {
pluginAdd: async (result, _ctx) => {
console.log();
console.log(require_theme.colors.green(`${require_theme.icons.ok} Added plugin ${result.key}`));
if (result.development) console.log(` ${require_theme.colors.dim("Development:")} ${result.development}`);
if (result.production) console.log(` ${require_theme.colors.dim("Production:")} ${result.production}`);
console.log();
},
pluginRemove: async (result, _ctx) => {
console.log();
console.log(require_theme.colors.green(`${require_theme.icons.ok} Removed plugin ${result.key}`));
console.log();
},
pluginList: async (result, _ctx) => {
console.log();
console.log(require_theme.colors.cyan(require_theme.frames.top(52)));
console.log(` ${require_theme.icons.config} ${require_theme.gradients.cyber("PLUGINS")}`);
console.log(require_theme.colors.cyan(require_theme.frames.bottom(52)));
console.log();
if (result.plugins.length === 0) console.log(require_theme.colors.dim(" No plugins configured"));
else for (const pluginItem of result.plugins) {
console.log(` ${require_theme.colors.cyan(pluginItem.key)}`);
if (pluginItem.development) console.log(` ${require_theme.colors.dim("Development:")} ${pluginItem.development}`);
if (pluginItem.production) console.log(` ${require_theme.colors.dim("Production:")} ${pluginItem.production}`);
}
console.log();
},
pluginPublish: async (result, _ctx) => {
console.log();
console.log(require_theme.colors.green(`${require_theme.icons.ok} Published plugin ${result.key}`));
if (result.path) console.log(` ${require_theme.colors.dim("Path:")} ${result.path}`);
if (result.production) console.log(` ${require_theme.colors.dim("Production:")} ${result.production}`);
if (result.version) console.log(` ${require_theme.colors.dim("Version:")} ${result.version}`);
if (result.fingerprint) console.log(` ${require_theme.colors.dim("Fingerprint:")} ${result.fingerprint}`);
console.log();
},
registryUse: async (result, _ctx) => {
console.log();
if (require_exit_codes.exitCodeFor(result) === 1) {
console.error(require_theme.colors.error(`${require_theme.icons.err} ${result.error || "Unknown error"}`));
process.exit(1);
}
console.log(require_theme.colors.green(`${require_theme.icons.ok} ${result.status === "dry-run" ? "Dry run" : "Composed"} from ${result.from}`));
for (const section of result.applied) console.log(` ${require_theme.colors.green("+")} ${section}`);
if (result.configPath) console.log(` ${require_theme.colors.dim("Config:")} ${result.configPath}`);
if (result.status === "updated") console.log(require_theme.colors.dim(" Run bos types gen to refresh generated types."));
console.log();
},
publish: async (result, _ctx) => {
if (result.status === "dry-run") {
console.log();
console.log(require_theme.colors.cyan(`${require_theme.icons.ok} Dry run complete`));
console.log(` ${require_theme.colors.dim("Registry URL:")} ${result.registryUrl}`);
console.log();
return;
}
if (require_exit_codes.exitCodeFor(result) === 1) {
console.log();
console.log(require_theme.colors.error(`${require_theme.icons.err} Publish failed`));
if (result.error) console.log(` ${require_theme.colors.dim("Error:")} ${result.error}`);
if (result.deployResults && result.deployResults.length > 0) {
const failures = result.deployResults.filter((r) => !r.success);
if (failures.length > 0) {
console.log();
for (const f of failures) {
const errorLine = (f.error ?? "Failed").split("\n")[0];
console.log(` ${require_theme.colors.error(require_theme.icons.err)} ${f.key}: ${errorLine}`);
}
}
}
console.log();
process.exit(1);
}
if (result.status === "published") {
console.log();
console.log(require_theme.colors.green(`${require_theme.icons.ok} Published successfully`));
console.log(` ${require_theme.colors.dim("Registry URL:")} ${result.registryUrl}`);
if (result.txHash) console.log(` ${require_theme.colors.dim("Transaction:")} ${result.txHash}`);
if (result.built && result.built.length > 0) console.log(` ${require_theme.colors.dim("Built:")} ${result.built.join(", ")}`);
if (result.skipped && result.skipped.length > 0) console.log(` ${require_theme.colors.dim("Skipped:")} ${result.skipped.join(", ")}`);
if (result.deployResults) {
const warnings = result.deployResults.flatMap((r) => r.warnings ?? []);
if (warnings.length > 0) {
console.log();
console.log(` ${require_theme.colors.yellow("⚠")} Build warnings:`);
for (const w of warnings) console.log(` ${require_theme.colors.dim(w)}`);
}
}
console.log();
return;
}
},
rollback: async (result, _ctx) => {
const rollbackResult = result;
if (rollbackResult.status === "error") {
console.log();
console.log(require_theme.colors.error(`${require_theme.icons.err} Roll back failed`));
if (rollbackResult.error) console.log(` ${require_theme.colors.dim("Error:")} ${rollbackResult.error}`);
if (rollbackResult.verification) {
console.log();
for (const check of rollbackResult.verification) {
const mark = check.ok ? require_theme.colors.green(require_theme.icons.ok) : require_theme.colors.error(require_theme.icons.err);
const reason = check.reason ? require_theme.colors.dim(` — ${check.reason}`) : "";
console.log(` ${mark} ${check.slot}${reason}`);
}
}
console.log();
process.exit(1);
}
if (rollbackResult.status === "dry-run") {
console.log();
console.log(require_theme.colors.cyan(`${require_theme.icons.ok} Rollback dry run complete`));
console.log(` ${require_theme.colors.dim("Registry URL:")} ${rollbackResult.registryUrl}`);
console.log();
return;
}
console.log();
console.log(require_theme.colors.green(`${require_theme.icons.ok} Rolled back`));
console.log(` ${require_theme.colors.dim("Registry URL:")} ${rollbackResult.registryUrl}`);
if (rollbackResult.txHash) console.log(` ${require_theme.colors.dim("Transaction:")} ${rollbackResult.txHash}`);
console.log();
},
deploy: async (result, _ctx) => {
const deployResult = result;
if (deployResult.status === "list") {
console.log();
console.log(require_theme.colors.cyan("Recent publishes (audit trail)"));
for (const entry of deployResult.history ?? []) console.log(` ${entry.blockTimestamp} ${require_theme.colors.dim(`block ${entry.blockHeight}`)}${entry.publishedAt ? require_theme.colors.dim(` ${entry.publishedAt}`) : ""}`);
console.log();
return;
}
if (deployResult.fingerprint) console.log(` ${require_theme.colors.dim("Fingerprint:")} ${deployResult.fingerprint}`);
if (deployResult.status === "dry-run") {
console.log();
console.log(require_theme.colors.cyan(`${require_theme.icons.ok} Dry run complete`));
console.log(` ${require_theme.colors.dim("Registry URL:")} ${deployResult.registryUrl}`);
console.log();
return;
}
if (deployResult.status === "error") {
console.log();
console.log(require_theme.colors.error(`${require_theme.icons.err} Deploy failed`));
if (deployResult.error) console.log(` ${require_theme.colors.dim("Error:")} ${deployResult.error}`);
if (deployResult.deployResults && deployResult.deployResults.length > 0) {
const failures = deployResult.deployResults.filter((r) => !r.success);
if (failures.length > 0) {
console.log();
for (const f of failures) {
const errorLine = (f.error ?? "Failed").split("\n")[0];
console.log(` ${require_theme.colors.error(require_theme.icons.err)} ${f.key}: ${errorLine}`);
}
}
}
console.log();
process.exit(1);
}
if (deployResult.status === "deployed") {
console.log();
console.log(require_theme.colors.green(`${require_theme.icons.ok} Deployed successfully`));
console.log(` ${require_theme.colors.dim("Registry URL:")} ${deployResult.registryUrl}`);
if (deployResult.txHash) console.log(` ${require_theme.colors.dim("Transaction:")} ${deployResult.txHash}`);
if (deployResult.built && deployResult.built.length > 0) console.log(` ${require_theme.colors.dim("Built:")} ${deployResult.built.join(", ")}`);
if (deployResult.skipped && deployResult.skipped.length > 0) console.log(` ${require_theme.colors.dim("Skipped:")} ${deployResult.skipped.join(", ")}`);
if (deployResult.deployResults) require_deploy_train.renderBuildWarnings(deployResult.deployResults);
if (deployResult.image) console.log(` ${require_theme.colors.dim("Image:")} ${deployResult.image}`);
if (deployResult.service) console.log(` ${require_theme.colors.dim("Railway:")} deployed ${deployResult.service}`);
require_deploy.renderDeployLegs(deployResult.legs);
console.log();
return;
}
if (deployResult.status === "published") {
const failedLegs = require_deploy.failedDeployLegs(deployResult.legs);
console.log();
console.log(require_theme.colors.yellow(failedLegs.length > 0 ? `${require_theme.icons.err} Config published, but the ${failedLegs.join(" and ")} leg(s) failed` : `${require_theme.icons.err} Config published, but a deploy leg failed`));
console.log(` ${require_theme.colors.dim("Registry URL:")} ${deployResult.registryUrl}`);
if (deployResult.txHash) console.log(` ${require_theme.colors.dim("Transaction:")} ${deployResult.txHash}`);
if (deployResult.error) console.log(` ${require_theme.colors.dim("Error:")} ${deployResult.error}`);
require_deploy.renderDeployLegs(deployResult.legs);
console.log();
process.exit(1);
}
}
};
//#endregion
exports.publishRenderers = publishRenderers;
exports.rollbackPreCall = rollbackPreCall;
//# sourceMappingURL=publish.cjs.map