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
JavaScript
;
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;