@broadcom/endevor-bridge-for-git-for-zowe-cli
Version:
Endevor Bridge for Git plug-in for Zowe CLI
356 lines • 21.4 kB
JavaScript
;
/*
* 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