UNPKG

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

Version:

Endevor Bridge for Git plug-in for Zowe CLI

178 lines (173 loc) 8.69 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var BaseHandler = require('../../../BaseHandler.js'); var imperative = require('@zowe/imperative'); var fs = require('fs'); var object = require('../../../../utils/object.js'); var EBGConnectionService = require('../../../../api/service/EBGConnectionService.js'); var MappingOptions = require('../../../options/MappingOptions.js'); var index = require('../../../../node_modules/@broadcom/bridge-for-git-zowe-client/dist/index.js'); require('path'); require('../../../../api/doc/ebg/IMappingView.js'); var EBGMappingService = require('../../../../api/service/EBGMappingService.js'); var EBGEndevorService = require('../../../../api/service/EBGEndevorService.js'); require('../../../../api/doc/IBranchMetadata.js'); require('child_process'); require('../../../../api/utils/ChangeValidator.js'); require('lodash'); /* * Copyright (c) 2026 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. * */ class CreateMappingHandler extends BaseHandler.BaseHandler { async processWithSession() { const task = { percentComplete: imperative.TaskProgress.ZERO_PERCENT, statusMessage: "Validate options", stageName: imperative.TaskStage.IN_PROGRESS, }; this.progress.startBar({ task }); const mappingFile = this.getOption(MappingOptions.MappingOptions.CREATE_MAPPING_JSON_FILE, false); // TODO revisit how payload is being populated const payload = object.isNotNil(mappingFile) ? await this.getPayloadFromFile(mappingFile) : await this.getPayloadFromArguments(task); await EBGMappingService.EBGMappingService.createMapping(this.apiClient, payload); this.completeProgressTask(task); this.console.log(`The mapping with git URL ${payload.git.cloneUrl} will be initialized in background. You will be notified once this operation is completed`); } async getPayloadFromFile(mappingFile) { const contents = fs.readFileSync(mappingFile); const payload = JSON.parse(contents.toLocaleString()); const mappingMode = this.getOption(MappingOptions.MappingOptions.MAPPING_MODE) ?? index.MappingModeE.FULL; this.validateRequiredOptions(); if (object.isNil(payload?.endevor?.connection) || object.isNil(payload?.endevor?.configuration)) { throw new imperative.ImperativeError({ msg: `Provided file has to define Endevor Connection and Endevor Environment`, }); } const endevorConnectionDetails = await EBGConnectionService.EBGConnectionService.getConnection(this.apiClient, payload.endevor.connection); payload.endevor.baseUrl = endevorConnectionDetails[0].baseUrl; payload.endevor.configuration = endevorConnectionDetails[0].config; payload.branches.forEach((branch) => { if (branch.defaultBranch === undefined) { branch.defaultBranch = false; } if (branch.synchronizeListings === undefined) { branch.synchronizeListings = false; } if (!branch.mappingMode) { branch.mappingMode = mappingMode; } }); return payload; } async getPayloadFromArguments(task) { const mappingMode = this.getOption(MappingOptions.MappingOptions.MAPPING_MODE) ?? index.MappingModeE.FULL; // Mapping with single system/subsystem const cloneUrl = this.getOption(MappingOptions.MappingOptions.GIT_REMOTE_URL, true); const repositoryCheck = String(this.getOption(MappingOptions.MappingOptions.REPOSITORY_CHECK)); const system = this.getOption(MappingOptions.MappingOptions.ENDEVOR_SYSTEM); const systemAlias = this.getOption(MappingOptions.MappingOptions.ENDEVOR_SYSTEM_ALIAS); const subsystem = this.getOption(MappingOptions.MappingOptions.ENDEVOR_SUBSYSTEM, true); const subsystemAlias = this.getOption(MappingOptions.MappingOptions.ENDEVOR_SUBSYSTEM_ALIAS); const branchId = this.getOption(MappingOptions.MappingOptions.BRANCH_ID); const environment = this.getOption(MappingOptions.MappingOptions.ENDEVOR_ENVIRONMENT); const readOnly = Boolean(this.getOption(MappingOptions.MappingOptions.READ_ONLY)); const typeFilter = this.getOption(MappingOptions.MappingOptions.TYPE_FILTERS); const nameFilter = this.getOption(MappingOptions.MappingOptions.NAME_FILTERS); const connection = this.getOption(MappingOptions.MappingOptions.CONNECTION_NAME, true); this.validateRequiredOptions(); task.statusMessage = "Get Endevor Connection Status"; task.percentComplete = imperative.TaskProgress.TEN_PERCENT; const endevorConnectionDetails = (await EBGConnectionService.EBGConnectionService.getConnection(this.apiClient, connection))[0]; task.percentComplete = imperative.TaskProgress.TWENTY_PERCENT; const stageNumber = await this.getStageNumber({ task, endevorConnectionDetails, readOnly, environment, }); return { git: { cloneUrl: cloneUrl, repositoryCheck: object.isNil(repositoryCheck) ? index.RepositoryCheckE.REQUIRE_EMPTY : repositoryCheck, }, endevor: { connection: endevorConnectionDetails.name, baseUrl: endevorConnectionDetails.baseUrl, configuration: endevorConnectionDetails.config, }, branches: [ { name: branchId, environment, stageNumber: Number(stageNumber), systems: [ { name: system, alias: systemAlias, subsystems: [ { name: subsystem, alias: subsystemAlias, filter: [ { elements: object.isNil(nameFilter) ? [] : nameFilter, types: object.isNil(typeFilter) ? [] : typeFilter, }, ], }, ], }, ], mappingMode: mappingMode, readOnly, synchronizeListings: false, // TODO add to parameters defaultBranch: false, // TODO add to parameters }, ], }; } async getStageNumber({ task, endevorConnectionDetails, readOnly, environment, }) { let stageNumber; if (readOnly) { stageNumber = this.getOption(MappingOptions.MappingOptions.ENDEVOR_STAGE_NUMBER); // Validate after reading of the options this.validateRequiredOptions(); } else { // Validate before making any API call this.validateRequiredOptions(); task.statusMessage = "Get entry stage"; stageNumber = await EBGEndevorService.EBGEndevorService.getEntryStage({ api: this.apiClient, connectionName: endevorConnectionDetails.name, environment, }); } return stageNumber; } } exports.default = CreateMappingHandler;