@broadcom/endevor-bridge-for-git-for-zowe-cli
Version:
Endevor Bridge for Git plug-in for Zowe CLI
220 lines • 13.4 kB
JavaScript
"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 });
const BaseHandler_1 = require("../../BaseHandler");
const api_1 = require("../../../api");
const EndevorSession_1 = require("../../sessions/EndevorSession");
const imperative_1 = require("@zowe/imperative");
const fs_1 = require("fs");
const object_1 = require("../../../utils/object");
const EBGConnectionService_1 = require("../../../api/service/EBGConnectionService");
const endevor_bridge_for_git_rest_api_1 = require("@broadcom/endevor-bridge-for-git-rest-api");
const MappingOptions_1 = require("../MappingOptions");
class MappingCreateHandler extends BaseHandler_1.BaseHandler {
processWithSession() {
return __awaiter(this, void 0, void 0, function* () {
const task = {
percentComplete: imperative_1.TaskProgress.ZERO_PERCENT,
statusMessage: "Validate options",
stageName: imperative_1.TaskStage.IN_PROGRESS
};
this.progress.startBar({ task });
let payload;
const mappingFile = this.getOption(MappingOptions_1.MappingOptions.CREATE_MAPPING_JSON_FILE, false);
if (mappingFile !== undefined) {
const contents = (0, fs_1.readFileSync)(mappingFile);
payload = JSON.parse(contents.toLocaleString());
if ((0, object_1.isNotNil)(payload.endevor.connection)) {
const endevorConnectionDetails = yield EBGConnectionService_1.EBGConnectionService
.getConnection(this.ebgService, payload.endevor.connection);
payload.endevor.baseUrl = endevorConnectionDetails[0].baseUrl;
payload.endevor.configuration = endevorConnectionDetails[0].configuration;
}
else {
if ((0, object_1.isNil)(payload.endevor.baseUrl)) {
payload.endevor.baseUrl = this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_PROTOCOL)
.concat("://")
.concat(this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_HOST))
.concat(":")
.concat(this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_PORT))
.concat("/")
.concat(this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_BASE_PATH));
}
if ((0, object_1.isNil)(payload.endevor.configuration)) {
payload.endevor.configuration = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_INSTANCE, false);
}
}
if ((0, object_1.isNil)(payload.endevor.username)) {
payload.endevor.username = this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_USER);
}
if ((0, object_1.isNil)(payload.endevor.password)) {
payload.endevor.password = this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_PASSWORD);
}
this.validateRequiredOptions();
}
else {
// Mapping with single system/subsystem
const cloneUrl = this.getOption(MappingOptions_1.MappingOptions.GIT_REMOTE_URL);
const repositoryCheck = String(this.getOption(MappingOptions_1.MappingOptions.REPOSITORY_CHECK));
const splittedGitRemoteUrl = yield this.validateGitRemoteUrl(cloneUrl, this.ebgService, repositoryCheck);
let context = splittedGitRemoteUrl[MappingCreateHandler.CONTEXT_REGEX_INDEX];
let repoName = splittedGitRemoteUrl[MappingCreateHandler.REPOSITORY_REGEX_INDEX];
if (MappingCreateHandler.REMOTE_AZURE_URL_REGEX.test(cloneUrl)) {
context = splittedGitRemoteUrl[MappingCreateHandler.AZURE_COLLECTION_INDEX] + "/" +
decodeURI(splittedGitRemoteUrl[MappingCreateHandler.AZURE_PROJECT_INDEX]);
repoName = splittedGitRemoteUrl[MappingCreateHandler.AZURE_REPOSITORY_REGEX_INDEX];
}
// if connection is passed get baseUrl and configuration from connection
const connection = this.getOption(MappingOptions_1.MappingOptions.CONNECTION_NAME, false);
let baseUrl;
let configuration;
if ((0, object_1.isNotNil)(connection)) {
const endevorConnectionDetails = yield EBGConnectionService_1.EBGConnectionService.getConnection(this.ebgService, connection);
baseUrl = endevorConnectionDetails[0].baseUrl;
configuration = endevorConnectionDetails[0].configuration;
}
else {
baseUrl = this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_PROTOCOL)
.concat("://")
.concat(this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_HOST))
.concat(":")
.concat(this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_PORT))
.concat("/")
.concat(this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_BASE_PATH));
configuration = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_INSTANCE, false);
}
const mainframeUsername = this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_USER);
const mainframePassword = this.getEndevorSessionOption(EndevorSession_1.EndevorSession.ENDEVOR_OPTION_PASSWORD);
const system = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_SYSTEM);
const systemAlias = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_SYSTEM_ALIAS);
const subsystem = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_SUBSYSTEM, true);
const subsystemAlias = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_SUBSYSTEM_ALIAS);
const mappingMode = this.getOption(MappingOptions_1.MappingOptions.MAPPING_MODE);
const branchId = this.getOption(MappingOptions_1.MappingOptions.BRANCH_ID);
const environment = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_ENVIRONMENT);
const readOnly = Boolean(this.getOption(MappingOptions_1.MappingOptions.READ_ONLY));
let stageNumber;
const typeFilter = this.getOption(MappingOptions_1.MappingOptions.TYPE_FILTERS);
const nameFilter = this.getOption(MappingOptions_1.MappingOptions.NAME_FILTERS);
const filter = {
elements: (0, object_1.isNil)(nameFilter) ? [] : nameFilter,
types: (0, object_1.isNil)(typeFilter) ? [] : typeFilter
};
if (readOnly) {
stageNumber = this.getOption(MappingOptions_1.MappingOptions.ENDEVOR_STAGE_NUMBER);
// Validate after reading of the options
this.validateRequiredOptions();
}
else {
const endevorSession = this.createEndevorSession();
// Validate before making any API call
this.validateRequiredOptions();
task.statusMessage = "Get entry stage";
task.percentComplete = imperative_1.TaskProgress.TEN_PERCENT;
stageNumber = String(yield api_1.EndevorService.getEntryStage(endevorSession, configuration, environment));
}
payload = {
git: {
context,
repository: repoName,
cloneUrl,
repositoryCheck: (0, object_1.isNil)(repositoryCheck) ? endevor_bridge_for_git_rest_api_1.RepositoryCheck.requireEmpty : repositoryCheck
},
endevor: {
connection,
baseUrl,
configuration,
username: mainframeUsername,
password: mainframePassword
},
branches: [{
name: branchId,
environment,
stageNumber: Number(stageNumber),
systems: [{
name: system,
alias: systemAlias,
subsystems: [{
name: subsystem,
alias: subsystemAlias,
filter
}],
}],
mappingMode,
readOnly
}]
};
}
yield api_1.EBGMappingService.createMapping(this.ebgService, payload);
task.percentComplete = imperative_1.TaskProgress.ONE_HUNDRED_PERCENT;
this.console.log(`The mapping ${payload.git.context}/${payload.git.repository} will be initialized in background. You will be notified once this operation is completed`);
});
}
/**
* Validates the Git remote URL and returns it slitted as an array
* @param mirrorRepoUrl Git remote URL
* @param ebgService
* @param repositoryCheck
*/
validateGitRemoteUrl(mirrorRepoUrl, ebgService, repositoryCheck) {
return __awaiter(this, void 0, void 0, function* () {
let results;
// Validates remote url
if (MappingCreateHandler.REMOTE_GH_GL_URL_REGEX.test(mirrorRepoUrl)) {
results = MappingCreateHandler.REMOTE_GH_GL_URL_REGEX.exec(mirrorRepoUrl.trim());
}
else if (MappingCreateHandler.REMOTE_BB_URL_REGEX.test(mirrorRepoUrl)) {
results = MappingCreateHandler.REMOTE_BB_URL_REGEX.exec(mirrorRepoUrl.trim());
}
else if (MappingCreateHandler.REMOTE_AZURE_URL_REGEX.test(mirrorRepoUrl)) {
results = MappingCreateHandler.REMOTE_AZURE_URL_REGEX.exec(mirrorRepoUrl.trim());
}
else {
this.fail({ msg: "Invalid remote URL" });
}
this.validateRequiredOptions();
yield api_1.EBGMappingService.validateGitRemoteUrl(ebgService, { mirrorRepoUrl, repositoryCheck });
return results;
});
}
}
exports.default = MappingCreateHandler;
MappingCreateHandler.REMOTE_GH_GL_URL_REGEX = /(http(s)?):\/\/([\w.@:\-~]*)\/([\w.@:\-~]*)\/([\w.@:\-~]*)(\.git)(\/)?/;
MappingCreateHandler.REMOTE_BB_URL_REGEX = /(http(s)?):\/\/([\w.@:\-~\/]*)\/([\w.@:\-~]*)\/([\w.@:\-~]*)(\.git)(\/)?/;
MappingCreateHandler.REMOTE_AZURE_URL_REGEX = /(http(s)?):\/\/([\w.@:\-~\/]*)\/([\w.\-]*)\/([\w.%!\-]*)\/_git\/([\w.%\-]*)(\/)?/;
MappingCreateHandler.CONTEXT_REGEX_INDEX = 4;
MappingCreateHandler.REPOSITORY_REGEX_INDEX = 5;
MappingCreateHandler.AZURE_COLLECTION_INDEX = 4;
MappingCreateHandler.AZURE_PROJECT_INDEX = 5;
MappingCreateHandler.AZURE_REPOSITORY_REGEX_INDEX = 6;
//# sourceMappingURL=MappingCreate.handler.js.map