UNPKG

azdev-automation

Version:

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

76 lines (75 loc) 3.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProjectUpdater = void 0; const CoreInterfaces_1 = require("azure-devops-node-api/interfaces/CoreInterfaces"); class ProjectUpdater { constructor(projectHelper, securityHelper, commonHelper, logger) { this.logger = logger; this.debugLogger = logger.extend(this.constructor.name); this.projectHelper = projectHelper; this.securityHelper = securityHelper; this.commonHelper = commonHelper; } async getProject(name) { const debug = this.debugLogger.extend(this.getProject.name); const targetProject = await this.projectHelper.findProject(name); return targetProject; } async getProjects(name) { const debug = this.debugLogger.extend(this.getProject.name); const targetProjects = await this.projectHelper.findProjects(name); return targetProjects; } async createProject(project) { this.logger.log(`Creating new <${project.name}> team project`); const sourceControlType = "Git"; const projectVisibility = CoreInterfaces_1.ProjectVisibility.Private; const processTemplate = await this.projectHelper.getDefaultTemplate(); const result = await this.projectHelper.createProject(project.name, project.description, processTemplate, sourceControlType, projectVisibility); await this.commonHelper.wait(5000, 5000); const targetProject = await this.projectHelper.findProject(project.name); return targetProject; } async updateProject(project) { this.logger.log(`Updating existing <${project.name}> team project`); const targetProject = await this.projectHelper.findProject(project.name); if (!targetProject) { throw new Error(`Project <${project.name}> not found`); } targetProject.description = project.description; // Update settings await this.projectHelper.updateProject(targetProject); return targetProject; } async updatePermissions(project, policy) { const debug = this.debugLogger.extend(this.updatePermissions.name); this.logger.log(`Applying <${policy.name}> project permissions policy`); await Promise.all(policy.definition.map(async (group) => { const groupName = `[${project.name}]\\${group.name}`; debug(`Updating <${groupName}> group configuration`); // Slow down parallel calls to address // Intermittent API connectivity issues await this.commonHelper.wait(500, 3000); let targetGroup = await this.projectHelper.getProjectGroup(groupName, project.id); // Create group if (!targetGroup) { this.logger.log(`Creating new <${groupName}> group`); targetGroup = await this.projectHelper.createProjectGroup(group.name, "Members of this group have custom access to the project.", project.id); // It may take up to a few seconds before // New group identity becomes available await this.commonHelper.wait(5000, 5000); } // Update permissions if (group.permissions && group.permissions.length) { this.logger.log(`Updating <${groupName}> group permissions`); await this.securityHelper.updateGroupPermissions(project.name, targetGroup, group.permissions); } // Update members if (group.members && group.members.length) { this.logger.log(`Updating <${groupName}> group members`); await this.securityHelper.updateGroupMembers(group.members, targetGroup); } })); } } exports.ProjectUpdater = ProjectUpdater;