UNPKG

@topgroup/diginext

Version:

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

252 lines (251 loc) 11.1 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const log_1 = require("diginext-utils/dist/xconsole/log"); const dist_1 = require("tsoa/dist"); const entities = __importStar(require("../entities")); const interfaces = __importStar(require("../interfaces")); const ResponseData_1 = require("../interfaces/ResponseData"); const create_release_from_app_1 = require("../modules/build/create-release-from-app"); const create_release_from_build_1 = require("../modules/build/create-release-from-build"); const k8s_1 = __importDefault(require("../modules/k8s")); const mongodb_1 = require("../plugins/mongodb"); const BuildService_1 = require("../services/BuildService"); const ReleaseService_1 = require("../services/ReleaseService"); const BaseController_1 = __importDefault(require("./BaseController")); let ReleaseController = class ReleaseController extends BaseController_1.default { constructor() { super(new ReleaseService_1.ReleaseService()); } /** * List of releases */ read(queryParams) { return super.read(); } create(body, queryParams) { // TODO: validate body and check for required params return super.create(body); } update(body, queryParams) { return super.update(body); } delete(queryParams) { return super.delete(); } async createFromApp(body) { const { DB } = await Promise.resolve().then(() => __importStar(require("../modules/api/DB"))); if (!body.env) return (0, ResponseData_1.respondFailure)({ msg: `Param "env" (deploy environment code) is required.` }); if (!body.buildTag) return (0, ResponseData_1.respondFailure)({ msg: `Param "buildTag" (image's tag) is required.` }); const { app: appSlug, buildTag } = body; const app = await DB.findOne("app", { slug: appSlug }, { ignorable: true }); if (!app) return (0, ResponseData_1.respondFailure)(`App "${appSlug}" not found.`); const newRelease = await (0, create_release_from_app_1.createReleaseFromApp)(app, body.env, buildTag, { author: this.user, workspace: this.workspace }); if (!newRelease) return (0, ResponseData_1.respondFailure)({ msg: `Failed to create new release from build data.` }); return (0, ResponseData_1.respondSuccess)({ data: newRelease }); } async createFromBuild(body) { if (!body.env) return (0, ResponseData_1.respondFailure)({ msg: `Param "env" (deploy environment code) is required.` }); const { build: buildId } = body; if (!buildId) return (0, ResponseData_1.respondFailure)({ msg: `Param "build" (ID) is required.` }); const buildSvc = new BuildService_1.BuildService(); const build = await buildSvc.findOne({ _id: buildId }); if (!build) return (0, ResponseData_1.respondFailure)({ msg: `Build (${buildId}) not found.` }); const newRelease = await (0, create_release_from_build_1.createReleaseFromBuild)(build, body.env, { author: this.user }); if (!newRelease) return (0, ResponseData_1.respondFailure)({ msg: `Failed to create new release from build data.` }); return (0, ResponseData_1.respondSuccess)({ data: newRelease }); } async rollout(data) { const { id: idInFilter } = this.filter; const { id } = data; const releaseId = id || idInFilter; // console.log("controller > rollout > id :>> ", id); if (!releaseId) return (0, ResponseData_1.respondFailure)({ msg: `Release ID is required.` }); try { const rolloutResult = await k8s_1.default.rollout(mongodb_1.MongoDB.toString(id)); if (rolloutResult.error) { return (0, ResponseData_1.respondFailure)({ msg: rolloutResult.error }); } return (0, ResponseData_1.respondSuccess)({ data: rolloutResult.data }); } catch (e) { return (0, ResponseData_1.respondFailure)({ msg: e.toString() }); } } async rolloutV2(data) { const { id: idInFilter } = this.filter; const { id } = data; const releaseId = id || idInFilter; // console.log("controller > rollout > id :>> ", id); if (!releaseId) return (0, ResponseData_1.respondFailure)({ msg: `Release ID is required.` }); try { const rolloutResult = await k8s_1.default.rolloutV2(mongodb_1.MongoDB.toString(releaseId)); if (rolloutResult.error) { return (0, ResponseData_1.respondFailure)({ msg: rolloutResult.error }); } return (0, ResponseData_1.respondSuccess)({ data: rolloutResult.data }); } catch (e) { return (0, ResponseData_1.respondFailure)({ msg: e.toString() }); } } async previewPrerelease(data) { const { id: idInFilter } = this.filter; const { id } = data; const releaseId = id || idInFilter; if (!releaseId) return (0, ResponseData_1.respondFailure)({ msg: `Release ID is required.` }); try { const previewRes = await k8s_1.default.previewPrerelease(mongodb_1.MongoDB.toString(id)); if (previewRes.error) { return (0, ResponseData_1.respondFailure)({ msg: previewRes.error }); } return (0, ResponseData_1.respondSuccess)({ data: previewRes.data }); } catch (e) { return (0, ResponseData_1.respondFailure)({ msg: e.toString() }); } } /** * @deprecated */ async migrate() { (0, log_1.logError)(`This function was deprecated.`); } }; __decorate([ (0, dist_1.Security)("api_key"), (0, dist_1.Security)("jwt"), (0, dist_1.Get)("/"), __param(0, (0, dist_1.Queries)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], ReleaseController.prototype, "read", null); __decorate([ (0, dist_1.Security)("api_key"), (0, dist_1.Security)("jwt"), (0, dist_1.Post)("/"), __param(0, (0, dist_1.Body)()), __param(1, (0, dist_1.Queries)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", void 0) ], ReleaseController.prototype, "create", null); __decorate([ (0, dist_1.Security)("api_key"), (0, dist_1.Security)("jwt"), (0, dist_1.Patch)("/"), __param(0, (0, dist_1.Body)()), __param(1, (0, dist_1.Queries)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", void 0) ], ReleaseController.prototype, "update", null); __decorate([ (0, dist_1.Security)("api_key"), (0, dist_1.Security)("jwt"), (0, dist_1.Delete)("/"), __param(0, (0, dist_1.Queries)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], ReleaseController.prototype, "delete", null); __decorate([ (0, dist_1.Security)("api_key"), (0, dist_1.Security)("jwt"), (0, dist_1.Post)("/from-app"), __param(0, (0, dist_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], ReleaseController.prototype, "createFromApp", null); __decorate([ (0, dist_1.Security)("api_key"), (0, dist_1.Security)("jwt"), (0, dist_1.Post)("/from-build"), __param(0, (0, dist_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], ReleaseController.prototype, "createFromBuild", null); __decorate([ (0, dist_1.Security)("api_key"), (0, dist_1.Security)("jwt"), (0, dist_1.Patch)("/rollout"), __param(0, (0, dist_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], ReleaseController.prototype, "rollout", null); __decorate([ (0, dist_1.Security)("api_key"), (0, dist_1.Security)("jwt"), (0, dist_1.Patch)("/rollout-v2"), __param(0, (0, dist_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], ReleaseController.prototype, "rolloutV2", null); __decorate([ (0, dist_1.Security)("api_key"), (0, dist_1.Security)("jwt"), (0, dist_1.Patch)("/preview"), __param(0, (0, dist_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], ReleaseController.prototype, "previewPrerelease", null); ReleaseController = __decorate([ (0, dist_1.Tags)("Release"), (0, dist_1.Route)("release"), __metadata("design:paramtypes", []) ], ReleaseController); exports.default = ReleaseController;