UNPKG

@topgroup/diginext

Version:

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

240 lines (239 loc) 10.3 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 runtime_1 = require("@tsoa/runtime"); const lodash_1 = require("lodash"); const entities = __importStar(require("../entities")); const interfaces = __importStar(require("../interfaces")); const ResponseData_1 = require("../interfaces/ResponseData"); const buildModule = __importStar(require("../modules/build")); const plugins_1 = require("../plugins"); const BuildService_1 = require("../services/BuildService"); const BaseController_1 = __importDefault(require("./BaseController")); let BuildController = class BuildController extends BaseController_1.default { constructor() { super(new BuildService_1.BuildService()); } /** * List of builds */ async read(queryParams) { let builds = await this.service.find(this.filter, this.options, this.pagination); if ((0, lodash_1.isEmpty)(builds)) return (0, ResponseData_1.respondSuccess)({ data: [] }); // exclude "logs" when "id" and "slug" query params are not provided if (!this.filter.id && !this.filter.slug) { builds = builds.map((build) => { delete build.logs; return build; }); } return (0, ResponseData_1.respondSuccess)({ data: builds, ...this.pagination }); } create(body, queryParams) { return super.create(body); } update(body, queryParams) { return super.update(body); } delete(queryParams) { return super.delete(); } async getLogs(queryParams) { const { slug } = this.filter; // validation if (!slug) return (0, ResponseData_1.respondFailure)("Build's slug is required."); // Get logs from the database const build = await this.service.findOne({ slug }); if (build === null || build === void 0 ? void 0 : build.logs) return (0, ResponseData_1.respondSuccess)({ data: build === null || build === void 0 ? void 0 : build.logs }); // if no logs in database -> try to fetch in local storage: const logs = plugins_1.Logger.getLogs(slug) || "No data."; return (0, ResponseData_1.respondSuccess)({ data: logs }); } /** * Check status then build container image finish. */ async getStatus(queryParams) { const { slug } = this.filter; // validation if (!slug) return (0, ResponseData_1.respondFailure)("Build's slug is required."); // Attempt [1]: get logs from the database const build = await this.service.findOne({ slug }); if (typeof (build === null || build === void 0 ? void 0 : build.status) !== "undefined") return (0, ResponseData_1.respondSuccess)({ data: build === null || build === void 0 ? void 0 : build.status }); return (0, ResponseData_1.respondFailure)("Unable to get build's status."); } /** * Create a new {Build} instance, then start building container image. */ async startBuild(body) { try { const buildInfo = await this.service.startBuild(body, this.ownership); return (0, ResponseData_1.respondSuccess)({ data: buildInfo, msg: `Building...` }); } catch (e) { return (0, ResponseData_1.respondFailure)(`Unable to start the build process: ${e}`); } } async stopBuild(body) { try { if (typeof body.status === "undefined") body.status = "cancelled"; if (typeof body.deployStatus === "undefined") body.deployStatus = "pending"; const build = await this.service.stopBuild(body.slug, body.status); return (0, ResponseData_1.respondSuccess)({ data: build }); } catch (e) { return (0, ResponseData_1.respondFailure)(`Unable to stop the build process: ${e}`); } } /** * Create a new {Build} instance, then start building container image. */ async rerunBuild(body, queryParams) { console.log("rerunBuild() > this.filter :>> ", this.filter); // validates const build = await this.service.findOne({ $or: [{ _id: this.filter._id }, { slug: this.filter.slug }], workspace: this.workspace._id }); if (!build) return (0, ResponseData_1.respondFailure)(`Unable to rerun building: Build not found.`); // rerun the build try { const buildInfo = await this.service.rerunBuild(build, { ...body }, this.ownership); return (0, ResponseData_1.respondSuccess)({ data: buildInfo, msg: `Building...` }); } catch (e) { return (0, ResponseData_1.respondFailure)(`Unable to re-run the build: ${e}`); } } }; __decorate([ (0, runtime_1.Security)("api_key"), (0, runtime_1.Security)("jwt"), (0, runtime_1.Get)("/"), __param(0, (0, runtime_1.Queries)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], BuildController.prototype, "read", null); __decorate([ (0, runtime_1.Security)("api_key"), (0, runtime_1.Security)("jwt"), (0, runtime_1.Post)("/"), __param(0, (0, runtime_1.Body)()), __param(1, (0, runtime_1.Queries)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", void 0) ], BuildController.prototype, "create", null); __decorate([ (0, runtime_1.Security)("api_key"), (0, runtime_1.Security)("jwt"), (0, runtime_1.Patch)("/"), __param(0, (0, runtime_1.Body)()), __param(1, (0, runtime_1.Queries)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", void 0) ], BuildController.prototype, "update", null); __decorate([ (0, runtime_1.Security)("api_key"), (0, runtime_1.Security)("jwt"), (0, runtime_1.Delete)("/"), __param(0, (0, runtime_1.Queries)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], BuildController.prototype, "delete", null); __decorate([ (0, runtime_1.Security)("api_key"), (0, runtime_1.Security)("jwt"), (0, runtime_1.Get)("/logs"), __param(0, (0, runtime_1.Queries)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], BuildController.prototype, "getLogs", null); __decorate([ (0, runtime_1.Security)("api_key"), (0, runtime_1.Security)("jwt"), (0, runtime_1.Get)("/status"), __param(0, (0, runtime_1.Queries)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], BuildController.prototype, "getStatus", null); __decorate([ (0, runtime_1.Security)("api_key"), (0, runtime_1.Security)("jwt"), (0, runtime_1.Post)("/start"), __param(0, (0, runtime_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], BuildController.prototype, "startBuild", null); __decorate([ (0, runtime_1.Security)("api_key"), (0, runtime_1.Security)("jwt"), (0, runtime_1.Post)("/stop"), __param(0, (0, runtime_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], BuildController.prototype, "stopBuild", null); __decorate([ (0, runtime_1.Security)("api_key"), (0, runtime_1.Security)("jwt"), (0, runtime_1.Post)("/rerun"), __param(0, (0, runtime_1.Body)()), __param(1, (0, runtime_1.Queries)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", Promise) ], BuildController.prototype, "rerunBuild", null); BuildController = __decorate([ (0, runtime_1.Tags)("Build"), (0, runtime_1.Route)("build"), __metadata("design:paramtypes", []) ], BuildController); exports.default = BuildController;