UNPKG

@broadcom/endevor-bridge-for-git-for-zowe-cli

Version:

Endevor Bridge for Git plug-in for Zowe CLI

356 lines 21.4 kB
"use strict"; /* * Copyright (c) 2019 Broadcom. All Rights Reserved. The term * "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. * * This software and all information contained therein is * confidential and proprietary and shall not be duplicated, * used, disclosed, or disseminated in any way except as * authorized by the applicable license agreement, without the * express written permission of Broadcom. All authorized * reproductions must be marked with this language. * * EXCEPT AS SET FORTH IN THE APPLICABLE LICENSE AGREEMENT, TO * THE EXTENT PERMITTED BY APPLICABLE LAW, BROADCOM PROVIDES THIS * SOFTWARE WITHOUT WARRANTY OF ANY KIND, INCLUDING WITHOUT * LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL BROADCOM * BE LIABLE TO THE END USER OR ANY THIRD PARTY FOR ANY LOSS OR * DAMAGE, DIRECT OR INDIRECT, FROM THE USE OF THIS SOFTWARE, * INCLUDING WITHOUT LIMITATION, LOST PROFITS, BUSINESS * INTERRUPTION, GOODWILL, OR LOST DATA, EVEN IF BROADCOM IS * EXPRESSLY ADVISED OF SUCH LOSS OR DAMAGE. */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EndevorService = void 0; const imperative_1 = require("@zowe/imperative"); const object_1 = require("../../utils/object"); const api_1 = require("@broadcom/endevor-for-zowe-cli/lib/api"); const endevor_for_zowe_cli_1 = require("@broadcom/endevor-for-zowe-cli"); const EndevorResponseType_1 = require("../utils/EndevorResponseType"); const EndevorResponseUtils_1 = require("../utils/EndevorResponseUtils"); const path = require("path"); const fs = require("fs"); // tslint:disable: member-ordering /** * Git developer build classes call functions in this class when there's need to interact with rest api. * By default, the functions in this class throws err and log report into traceReportsDir. * For those functions that doesn't do it, specify in the name, for example addElmWithoutThrowingErr * * @export * @class BuildRestActions */ class EndevorService { static checkWrongMainframeCredentials(response) { if (EndevorResponseUtils_1.EndevorResponseUtils.is(response, EndevorResponseType_1.EndevorResponseType.WRONG_MAINFRAME_CREDENTIALS)) { throw new imperative_1.ImperativeError({ msg: `Please check your mainframe credentials\n` + (endevor_for_zowe_cli_1.HandlerUtils.getWarnErrorInfo(response.returnCode, response.reasonCode, response.messages ? [response.messages.toString()] : [""])).join("\n") }); } } static throwUnexpectedResponseError(e) { throw new imperative_1.ImperativeError({ msg: EndevorService.UNEXPECTED_ENDEVOR_RESPONSE, causeErrors: e }); } static printReportLogs(endevorSession, instance, response, extraInfo) { return __awaiter(this, void 0, void 0, function* () { if ((0, object_1.isNotNil)(response.reports)) { const logStack = []; yield api_1.ElementUtils.writeConsoleOutput(endevorSession, instance, response.reports, true, logStack, this.getReportFileName()); if (logStack.length > 0) { let message = (0, object_1.isNil)(extraInfo) ? "" : `${extraInfo}\n`; message = message + logStack.join("\n"); imperative_1.Logger.getAppLogger().trace(message); } } }); } static mkdirSyncRecursive(dirPath) { api_1.WorkspaceUtils.ensureDirectoryExistence(dirPath); if (fs.existsSync(dirPath)) { return; } fs.mkdirSync(dirPath); } static getReportFileName() { if (!EndevorService.traceReportsDirMade) { EndevorService.mkdirSyncRecursive(EndevorService.traceReportsDir); EndevorService.traceReportsDirMade = true; } const now = new Date(); return path.join(this.traceReportsDir, endevor_for_zowe_cli_1.Constants.REPORT_FILE_NAME + api_1.EndevorUtils.formatDate(now, false) + "-" + api_1.EndevorUtils.formatTime(now, true, "") + ".txt"); } static cleanAllReportFiles() { if (fs.existsSync(EndevorService.traceReportsDir)) { fs.readdirSync(EndevorService.traceReportsDir).forEach((file) => { const filePath = path.join(EndevorService.traceReportsDir, file); fs.unlinkSync(filePath); }); } } static addElement(endevorSession, instance, elementSpec, postFormData) { return __awaiter(this, void 0, void 0, function* () { imperative_1.Logger.getAppLogger().trace(`BuildRestActions - add elm: ${JSON.stringify(elementSpec)}\nto session: ${JSON.stringify(endevorSession)}`); let response; try { response = EndevorResponseUtils_1.EndevorResponseUtils.convert(yield api_1.AddUpdElement.addElement(endevorSession, instance, elementSpec, postFormData)); } catch (e) { this.throwUnexpectedResponseError(e); } imperative_1.Logger.getAppLogger().trace(`BuildRestActions - add elm response: ${JSON.stringify(response)}`); if (!EndevorResponseUtils_1.EndevorResponseUtils.is(response, EndevorResponseType_1.EndevorResponseType.SUCCESSFUL)) { yield this.printReportLogs(endevorSession, instance, response); this.checkWrongMainframeCredentials(response); } return response; }); } static deleteElement(endevorSession, instance, deleteEleDef, deleteRequestBody) { return __awaiter(this, void 0, void 0, function* () { const eleDef = deleteEleDef; imperative_1.Logger.getAppLogger().trace(`BuildRestActions - delete elm from sub: ${JSON.stringify(eleDef)} \n` + `to session: ${JSON.stringify(endevorSession)}`); const deleteResult = yield api_1.DeleteElement.deleteElement(endevorSession, instance, eleDef, deleteRequestBody); imperative_1.Logger.getAppLogger().trace(`BuildRestActions - delete elm from sub response: ${JSON.stringify(deleteResult)}`); // tslint:disable-next-line: no-magic-numbers if (Number(deleteResult.body.returnCode) >= 12) { if ((0, object_1.isNotNil)(deleteResult.body.reports)) { const logStack = []; yield api_1.ElementUtils.writeConsoleOutput(endevorSession, instance, deleteResult.body.reports, true, logStack, EndevorService.getReportFileName()); if (logStack.length > 0) { imperative_1.Logger.getAppLogger().trace(`Report of failed delete element is written. \n${logStack.join("\n")}`); } } } return deleteResult; }); } // Used by build static listTypeToGetFileExtension(endevorSession, instance, typeDef) { return __awaiter(this, void 0, void 0, function* () { imperative_1.Logger.getAppLogger().trace(`BuildRestActions - List type: ${JSON.stringify(typeDef)} \n` + `to session: ${JSON.stringify(endevorSession)}`); const listTypeResponse = yield api_1.ListInventories.listType(endevorSession, instance, typeDef, {}); imperative_1.Logger.getAppLogger().trace(`BuildRestActions - List type response: ${JSON.stringify(listTypeResponse)}`); if (Number(listTypeResponse.body.returnCode) === 0) { let listTypeResult = listTypeResponse.body.data; // when it returns only 1 item in data, convert it into array if ((0, object_1.isNotNil)(listTypeResult)) { if ((0, object_1.isNil)(listTypeResult[0])) { listTypeResult = []; listTypeResult[0] = listTypeResponse.body.data; } } return listTypeResult; } else { if ((0, object_1.isNotNil)(listTypeResponse.body.reports)) { const logStack = []; yield api_1.ElementUtils.writeConsoleOutput(endevorSession, instance, listTypeResponse.body.reports, true, logStack, this.getReportFileName()); if (logStack.length > 0) { imperative_1.Logger.getAppLogger().trace(`Report of failed list type is written. \n${logStack.join("\n")}`); } } throw new imperative_1.ImperativeError({ msg: "Error getting type definition for your repository.\n" + (endevor_for_zowe_cli_1.HandlerUtils.getWarnErrorInfo(listTypeResponse.body.returnCode, listTypeResponse.body.reasonCode, (0, object_1.isNil)(listTypeResponse.body.messages) ? [""] : [listTypeResponse.body.messages.toString()])).join("\n"), }); } }); } static getEntryStage(endevorSession, instance, environment) { return __awaiter(this, void 0, void 0, function* () { const stages = yield EndevorService.getStages(endevorSession, instance, environment); const entryStage = stages.find(stage => stage.entryStg && (0, object_1.isNotNil)(stage.stgNum)); if ((0, object_1.isNotNil)(entryStage)) { return entryStage.stgNum; } throw new imperative_1.ImperativeError({ msg: `No entry stage found for environment ${environment}` }); }); } // Used by unreserve and build static getStages(endevorSession, instance, environment) { return __awaiter(this, void 0, void 0, function* () { const stgSpec = { environment, stageNumber: "*", system: "notused", subsystem: "notused", type: "notused", element: "notused", instance, }; imperative_1.Logger.getAppLogger().trace(`BuildRestActions - List stage for entry stage: ${JSON.stringify(stgSpec)} \n` + `to session: ${JSON.stringify(endevorSession)}`); const listStgResponse = yield api_1.ListInventories.listStage(endevorSession, instance, stgSpec, {}); imperative_1.Logger.getAppLogger().trace(`BuildRestActions - List stage from environment ${stgSpec.environment} response: ${JSON.stringify(listStgResponse)}`); if (Number(listStgResponse.body.returnCode) === 0) { let stages = listStgResponse.body.data; // when it returns only 1 item in data, convert it into array if ((0, object_1.isNotNil)(stages)) { if ((0, object_1.isNil)(stages[0])) { stages = []; stages[0] = listStgResponse.body.data; } return stages; } } else { if ((0, object_1.isNotNil)(listStgResponse.body.reports)) { const logStack = []; yield api_1.ElementUtils.writeConsoleOutput(endevorSession, instance, listStgResponse.body.reports, true, logStack, this.getReportFileName()); if (logStack.length > 0) { imperative_1.Logger.getAppLogger().trace(`Report of failed list stage is written. \n${logStack.join("\n")}`); } } throw new imperative_1.ImperativeError({ msg: `Failed to list stages for environment ${environment}\n` + (endevor_for_zowe_cli_1.HandlerUtils.getWarnErrorInfo(listStgResponse.body.returnCode, listStgResponse.body.reasonCode, listStgResponse.body.messages ? [listStgResponse.body.messages.toString()] : [""])).join("\n") }); } }); } // Used by build static listElmFromSub(endevorSession, instance, listEleDef, requestBody) { return __awaiter(this, void 0, void 0, function* () { imperative_1.Logger.getAppLogger().trace(`BuildRestActions - List elm from sub: ${JSON.stringify(listEleDef)} \n` + `to session: ${JSON.stringify(endevorSession)}`); const listElementResponse = yield api_1.ListElement.listElement(endevorSession, instance, listEleDef, requestBody); imperative_1.Logger.getAppLogger().trace(`BuildRestActions - List elm from sub response: ${JSON.stringify(listElementResponse)}`); // tslint:disable-next-line: no-magic-numbers if (Number(listElementResponse.body.returnCode) === 0) { let listElementResult = listElementResponse.body.data; // when it returns only 1 item in data, convert it into array if ((0, object_1.isNotNil)(listElementResult) && (0, object_1.isNil)(listElementResult[0])) { listElementResult = []; listElementResult[0] = listElementResponse.body.data; } return listElementResult; // tslint:disable-next-line: no-magic-numbers } else if (Number(listElementResponse.body.returnCode) < 12) { return []; } else { if ((0, object_1.isNotNil)(listElementResponse.body.reports)) { const logStack = []; yield api_1.ElementUtils.writeConsoleOutput(endevorSession, instance, listElementResponse.body.reports, true, logStack, this.getReportFileName()); if (logStack.length > 0) { imperative_1.Logger.getAppLogger().trace(`Report of failed list element is written. \n${logStack.join("\n")}`); } } throw new imperative_1.ImperativeError({ msg: `Error listing element ${listEleDef.element} from subsystem ${listEleDef.subsystem}.\n` + (endevor_for_zowe_cli_1.HandlerUtils.getWarnErrorInfo(listElementResponse.body.returnCode, listElementResponse.body.reasonCode, (0, object_1.isNil)(listElementResponse.body.messages) ? [""] : [listElementResponse.body.messages.toString()])).join("\n") }); } }); } // Used by build static deleteFromSub(endevorSession, instance, deleteEleDef, deleteRequestBody) { return __awaiter(this, void 0, void 0, function* () { const deleteResult = yield this.deleteElement(endevorSession, instance, deleteEleDef, deleteRequestBody); // tslint:disable-next-line: no-magic-numbers if (Number(deleteResult.body.returnCode) >= 12) { throw new imperative_1.ImperativeError({ msg: `Error deleting element ${deleteEleDef.element} of type ${deleteEleDef.type} from subsystem ${deleteEleDef.subsystem}.\n` + (endevor_for_zowe_cli_1.HandlerUtils.getWarnErrorInfo(deleteResult.body.returnCode, deleteResult.body.reasonCode, (0, object_1.isNil)(deleteResult.body.messages) ? [""] : [deleteResult.body.messages.toString()])).join("\n") }); } return deleteResult; }); } // Used by build static retrieveElm(endevorSession, instance, retrieveEleDef, retrieveRequestBody) { return __awaiter(this, void 0, void 0, function* () { const eleDef = retrieveEleDef; imperative_1.Logger.getAppLogger().trace(`BuildRestActions - retrieve elm: ${JSON.stringify(eleDef)} \n` + `to session: ${JSON.stringify(endevorSession)}`); const retrieveResult = yield api_1.RetrieveElement.retrieveElement(endevorSession, instance, eleDef, retrieveRequestBody); imperative_1.Logger.getAppLogger().trace(`BuildRestActions - retrieve elm response: ${JSON.stringify(retrieveResult)}`); // tslint:disable-next-line: no-magic-numbers if (Number(retrieveResult.body.returnCode) >= 12) { if ((0, object_1.isNotNil)(retrieveResult.body.reports)) { const logStack = []; yield api_1.ElementUtils.writeConsoleOutput(endevorSession, instance, retrieveResult.body.reports, true, logStack, this.getReportFileName()); if (logStack.length > 0) { imperative_1.Logger.getAppLogger().trace(`Report of failed retrieve element is written. \n${logStack.join("\n")}`); } } throw new imperative_1.ImperativeError({ msg: `Error retrieve element ${eleDef.element} type ${eleDef.type} from up the map at ` + `${eleDef.environment}/${eleDef.stageNumber}/${eleDef.system}/${eleDef.subsystem}.\n` + (endevor_for_zowe_cli_1.HandlerUtils.getWarnErrorInfo(retrieveResult.body.returnCode, retrieveResult.body.reasonCode, (0, object_1.isNil)(retrieveResult.body.messages) ? [""] : [retrieveResult.body.messages.toString()])).join("\n") }); } return (0, object_1.isNil)(retrieveResult.body.data) ? "" : retrieveResult.body.data; }); } // Used by build static updateElmWithoutThrowingErrOrLoggingReport(endevorSession, instance, uploadEleDef, putFormData) { return __awaiter(this, void 0, void 0, function* () { const eleDef = uploadEleDef; imperative_1.Logger.getAppLogger().trace(`BuildRestActions - update elm: ${JSON.stringify(eleDef)} \n` + `to session: ${JSON.stringify(endevorSession)}`); const UpdateResult = yield api_1.AddUpdElement.updElement(endevorSession, instance, eleDef, putFormData); imperative_1.Logger.getAppLogger().trace(`BuildRestActions - update elm response: ${JSON.stringify(UpdateResult)}`); return UpdateResult; }); } // Used by build static generateSubWithoutThrowingErrOrLoggingReport(endevorSession, instance, generateEleDef, generateRequestBody) { return __awaiter(this, void 0, void 0, function* () { imperative_1.Logger.getAppLogger().trace(`BuildRestActions - generate sub: ${JSON.stringify(generateEleDef)} \n` + `to session: ${JSON.stringify(endevorSession)}`); const generateResult = yield api_1.GenerateElement.generateElement(endevorSession, instance, generateEleDef, generateRequestBody); imperative_1.Logger.getAppLogger().trace(`BuildRestActions - generate sub response: ${JSON.stringify(generateResult)}`); return generateResult; }); } // Used by build static getC1MSGS1report(endevorSession, instance, resource) { return __awaiter(this, void 0, void 0, function* () { return api_1.EndevorRestClient.getReport(endevorSession, instance, resource); }); } // Used by build and result-build-job static printListingWithoutThrowingErr(endevorSession, instance, printEleDef) { return __awaiter(this, void 0, void 0, function* () { const printRequestBody = { print: "listing" }; imperative_1.Logger.getAppLogger().trace(`BuildRestActions - printListing: ${JSON.stringify(printEleDef)} \n` + `to session: ${JSON.stringify(endevorSession)}`); const printResult = yield api_1.PrintElementComponents.printElementComponents(endevorSession, instance, printEleDef, printRequestBody, false); imperative_1.Logger.getAppLogger().trace(`BuildRestActions - printListing response: ${JSON.stringify(printResult)}`); if (Number(printResult.body.returnCode) > 0) { if ((0, object_1.isNotNil)(printResult.body.reports)) { const logStack = []; yield api_1.ElementUtils.writeConsoleOutput(endevorSession, instance, printResult.body.reports, true, logStack, this.getReportFileName()); if (logStack.length > 0) { imperative_1.Logger.getAppLogger().trace(`Report of failed printListing is written. \n${logStack.join("\n")}`); } } } return printResult; }); } } exports.EndevorService = EndevorService; EndevorService.UNEXPECTED_ENDEVOR_RESPONSE = "Unexpected response from Endevor REST API."; EndevorService.traceReportsDir = path.join(require("os").homedir(), ".endevor", "traceReports"); EndevorService.traceReportsDirMade = false; //# sourceMappingURL=EndevorService.js.map