Files
pleno-vue/scripts/release/deploy-cpanel.mjs
T
Jeppe B a930bd35a5 Add atomic cPanel frontend deployment (#178)
Build and archive the tested frontend, upload it through dedicated FTPS credentials, and atomically activate it through cPanel after CI succeeds.
2026-07-20 13:53:49 +02:00

41 lines
1.3 KiB
JavaScript

#!/usr/bin/env node
import { DeploymentError, deployRelease, readDeploymentConfig, rollbackRelease } from "./cpanel-deploy-lib.mjs";
async function main() {
const mode = process.argv[2] || "deploy";
if (!new Set(["deploy", "--rollback"]).has(mode) || process.argv.length > 3) {
throw new DeploymentError("Usage: deploy-cpanel.mjs [--rollback]");
}
const config = readDeploymentConfig(process.env);
if (mode === "--rollback") {
const target = process.env.RELEASE_ROLLBACK_TARGET;
if (!target) {
throw new DeploymentError("RELEASE_ROLLBACK_TARGET is required for --rollback.");
}
const result = await rollbackRelease(config, target);
console.log(`Frontend rollback completed: active release ${result.activeTarget.split("/")[1]}.`);
return;
}
const result = await deployRelease(config);
console.log(
`Frontend deployment completed: active release ${config.releaseId}; retained rollback release ${
result.previousTarget.split("/")[1]
}.`
);
if (result.removed.length > 0) {
console.log(`Pruned ${result.removed.length} inactive release(s).`);
}
if (result.retentionWarning) {
console.warn(result.retentionWarning);
}
}
main().catch((error) => {
const message = error instanceof Error ? error.message : "Unknown deployment failure.";
console.error(message);
process.exit(1);
});