UNPKG

@topgroup/diginext

Version:

A BUILD SERVER & CLI to deploy apps to any Kubernetes clusters.

57 lines (56 loc) 2.16 kB
"use strict"; 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;