@topgroup/diginext
Version:
A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.
57 lines (56 loc) • 2.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DeploymentErrorHandler = void 0;
const log_1 = require("diginext-utils/dist/xconsole/log");
const mongodb_1 = require("../../../plugins/mongodb");
const services_1 = require("../../../services");
class DeploymentErrorHandler {
constructor(db) {
this.webhookService = new services_1.WebhookService();
this.db = db;
}
async handleDeploymentError(error, context, onUpdate) {
const errorMessage = typeof error === "string" ? error : error.message;
// Log error
(0, log_1.logError)(`Deployment Error: ${errorMessage}`);
// Trigger webhook if exists
await this.triggerWebhook(context, "failed");
// Update release status
await this.updateReleaseStatus(context, "failed");
// Update build status
await this.updateBuildStatus(context, "failed");
// Notify update callback
if (onUpdate) {
onUpdate(errorMessage);
}
return { error: errorMessage };
}
async triggerWebhook(context, status) {
try {
const webhook = await this.db.findOne("webhook", { release: context.releaseId });
if (webhook) {
this.webhookService.trigger(mongodb_1.MongoDB.toString(webhook._id), status);
}
}
catch (e) {
(0, log_1.logError)(`Webhook trigger failed: ${e.message}`);
}
}
async updateReleaseStatus(context, status) {
try {
await this.db.update("release", { _id: context.releaseId }, { status }, { select: ["_id", "status"] });
}
catch (e) {
(0, log_1.logError)(`Release status update failed: ${e.message}`);
}
}
async updateBuildStatus(context, status) {
try {
await this.db.update("build", { _id: context.buildId }, { deployStatus: status }, { select: ["_id", "deployStatus"] });
}
catch (e) {
(0, log_1.logError)(`Build status update failed: ${e.message}`);
}
}
}
exports.DeploymentErrorHandler = DeploymentErrorHandler;