UNPKG

azdev-automation

Version:

Azure DevOps automation framework enables access control automation of projects, pipelines and repositories configuration in Azure DevOps Services

100 lines (99 loc) 4.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProjectHelper = void 0; const iazdevclient_1 = require("../common/iazdevclient"); class ProjectHelper { constructor(coreApi, azdevClient, logger) { this.debugLogger = logger.extend(this.constructor.name); this.azdevClient = azdevClient; this.coreApi = coreApi; } async createProject(name, description, processTemplate, sourceControlType, visibility) { const debug = this.debugLogger.extend(this.createProject.name); const projectRequest = { name, description, visibility, capabilities: { versioncontrol: { sourceControlType, }, processTemplate: { templateTypeId: processTemplate.id, }, }, }; debug(projectRequest); const result = await this.coreApi.queueCreateProject(projectRequest); return result; } async updateProject(project) { const debug = this.debugLogger.extend(this.updateProject.name); const updatedProject = { description: project.description, }; debug(updatedProject); const result = await this.coreApi.updateProject(updatedProject, project.id); } async findProject(name) { const debug = this.debugLogger.extend(this.findProject.name); const result = await this.coreApi.getProject(name); debug(result); return result; } async findProjects(nameFilter) { const debug = this.debugLogger.extend(this.findProjects.name); let result = []; const availableProjects = await this.coreApi.getProjects(); debug(`Found ${availableProjects.length} total projects`); if (nameFilter) { debug(`Using ${nameFilter} project name filter`); result = availableProjects.filter((i) => i.name.match(nameFilter)); debug(`Found ${result.length} filtered projects`); } else { result = availableProjects; } return result; } async getProjectGroup(name, projectId) { const debug = this.debugLogger.extend(this.getProjectGroup.name); const descriptor = await this.azdevClient.get(`_apis/graph/descriptors/${projectId}`, iazdevclient_1.AzDevApiType.Graph); const descriptorId = descriptor.value; const groups = await this.azdevClient.get(`_apis/graph/groups?scopeDescriptor=${descriptorId}`, iazdevclient_1.AzDevApiType.Graph); const allGroups = groups.value; const filteredGroup = allGroups.find((g) => g.origin === "vsts" && g.principalName === name); if (filteredGroup) { debug(filteredGroup); } return filteredGroup; } async getProjectGroups(projectId) { const debug = this.debugLogger.extend(this.getProjectGroups.name); const descriptor = await this.azdevClient.get(`_apis/graph/descriptors/${projectId}`, iazdevclient_1.AzDevApiType.Graph); const descriptorId = descriptor.value; const groups = await this.azdevClient.get(`_apis/graph/groups?scopeDescriptor=${descriptorId}`, iazdevclient_1.AzDevApiType.Graph); const allGroups = groups.value; const filteredGroups = allGroups.filter((g) => g.origin === "vsts"); debug(`Found <${filteredGroups.length}> filtered groups`); return filteredGroups; } async createProjectGroup(name, description, projectId) { const debug = this.debugLogger.extend(this.createProjectGroup.name); const descriptor = await this.azdevClient.get(`_apis/graph/descriptors/${projectId}`, iazdevclient_1.AzDevApiType.Graph); const descriptorId = descriptor.value; const body = { displayName: name, description, }; const group = await this.azdevClient.post(`_apis/graph/groups?scopeDescriptor=${descriptorId}`, "5.1-preview.1", body, iazdevclient_1.AzDevApiType.Graph); debug(group); return group; } async getDefaultTemplate() { const allTemplates = await this.coreApi.getProcesses(); const defaultTemplate = allTemplates.filter((p) => p.isDefault === true)[0]; return defaultTemplate; } } exports.ProjectHelper = ProjectHelper;