UNPKG

@digital-ai/plugin-dai-release-backend

Version:

Backend functionalities for the dai-release backstage plugin

136 lines (132 loc) 4.53 kB
'use strict'; var apiConfig = require('./apiConfig.cjs.js'); var responseUtil = require('./responseUtil.cjs.js'); class WorkflowsOverviewApi { logger; config; constructor(logger, config) { this.logger = logger; this.config = config; } static fromConfig(config, logger) { return new WorkflowsOverviewApi(logger, config); } async redirectToWorkflowRunPage(instanceName, templateId, releaseTitle, folderId) { this.logger?.debug( `Redirecting to Workflows Run Page, instance: ${instanceName}` ); const instanceConfig = this.config.getInstanceConfig(instanceName); const accessToken = apiConfig.getCredentials(instanceConfig); const apiUrl = apiConfig.getReleaseApiHost(instanceConfig); function convertIdPath(unconvertedId) { const parts = unconvertedId.split("/"); return parts.slice(1).join("-"); } function getReleaseId(fullTemplateId) { const parts = fullTemplateId.split("/"); return parts[parts.length - 1]; } const workflow = await this.startRelease( accessToken, apiUrl, getReleaseId(templateId), releaseTitle, folderId ); const templateIdConverted = convertIdPath(workflow?.id); const redirectUrl = `${apiUrl}${apiConfig.RELEASE_WORKFLOW_TRIGGER_WORKFLOW_PATH}/${templateIdConverted}`; return redirectUrl; } async getWorkflowsOverviewApi(instanceName, pageNumber, resultsPerPage, searchInput, categories, author) { this.logger?.debug(`Calling Workflows List api, instance: ${instanceName}`); const instanceConfig = this.config.getInstanceConfig(instanceName); const accessToken = apiConfig.getCredentials(instanceConfig); const apiUrl = apiConfig.getReleaseApiHost(instanceConfig); const workflows = await this.getWorkflowsList( accessToken, apiUrl, pageNumber, resultsPerPage, searchInput, categories, author ); function getRepoLink(repoRemoteLink, commitId) { return `${repoRemoteLink}/commit/${commitId}`; } function getImageLink(logo) { if (logo?.id) return `${apiUrl}${apiConfig.RELEASE_WORKFLOW_LOGO_API_PATH}/${logo?.id}`; return ""; } const workflowDetails = workflows.content.map((d) => ({ title: d.title, id: d.id, description: d.description, logoLink: getImageLink(d.logo), author: d.author, folderTitle: d.folderTitle, defaultTargetFolder: d.defaultTargetFolder ? d.defaultTargetFolder : "", categories: Array.isArray(d.categories) ? d.categories : [d.categories], git: { commitId: d.scmTraceabilityData?.commit?.substring(0, 8), repoLink: getRepoLink( d.scmTraceabilityData.remote, d.scmTraceabilityData.commit ) } })); return { workflows: workflowDetails, totalPages: workflows.totalPages, totalElements: workflows.totalElements }; } async getWorkflowsList(accessToken, apiUrl, pageNumber, resultsPerPage, searchInput, categories, author) { const body = JSON.stringify({ ...searchInput && { searchInput }, ...categories.length && { categories }, ...author && { author } }); const response = await fetch( `${apiUrl}${apiConfig.RELEASE_WORKFLOW_LIST_API_PATH}?page=${pageNumber}&resultsPerPage=${resultsPerPage}`, { method: "POST", headers: { "x-release-personal-token": `${accessToken}`, "Content-Type": "application/json", Accept: "application/json" }, body } ); if (!response.ok) { await responseUtil.parseErrorResponse(this.logger, response); } return await response.json(); } async startRelease(accessToken, apiUrl, templateId, releaseTitle, folderId) { const body = JSON.stringify({ ...releaseTitle && { releaseTitle }, ...folderId && { folderId } }); const response = await fetch( `${apiUrl}${apiConfig.RELEASE_WORKFLOW_CREATE_RELEASE_API_PATH}/${templateId}/start`, { method: "POST", headers: { "x-release-personal-token": `${accessToken}`, "Content-Type": "application/json", Accept: "application/json" }, body } ); if (!response.ok) { await responseUtil.parseErrorResponse(this.logger, response); } return await response.json(); } } exports.WorkflowsOverviewApi = WorkflowsOverviewApi; //# sourceMappingURL=WorkflowsOverviewApi.cjs.js.map