Adding ability to list projects from Azure DevOps organization

Signed-off-by: Callen Barton <7515844+cal5barton@users.noreply.github.com>
This commit is contained in:
Callen Barton
2022-07-07 09:46:31 -06:00
parent 8754ab6fac
commit e67c4b7d5a
5 changed files with 41 additions and 2 deletions
@@ -30,6 +30,7 @@ import {
RepoBuild,
Team,
TeamMember,
Project,
} from '@backstage/plugin-azure-devops-common';
import {
GitPullRequest,
@@ -47,7 +48,10 @@ import { TeamMember as AdoTeamMember } from 'azure-devops-node-api/interfaces/co
import { Logger } from 'winston';
import { PolicyEvaluationRecord } from 'azure-devops-node-api/interfaces/PolicyInterfaces';
import { WebApi } from 'azure-devops-node-api';
import { WebApiTeam } from 'azure-devops-node-api/interfaces/CoreInterfaces';
import {
TeamProjectReference,
WebApiTeam,
} from 'azure-devops-node-api/interfaces/CoreInterfaces';
export class AzureDevOpsApi {
public constructor(
@@ -55,6 +59,22 @@ export class AzureDevOpsApi {
private readonly webApi: WebApi,
) {}
public async getProjects(): Promise<Project[]> {
this.logger?.debug(`Getting all projects.`);
const client = await this.webApi.getCoreApi();
const projectList: TeamProjectReference[] = await client.getProjects();
const projects: Project[] = projectList.map(project => ({
id: project.id,
name: project.name,
description: project.description,
}));
return projects.sort((a, b) =>
a.name && b.name ? a.name.localeCompare(b.name) : 0,
);
}
public async getGitRepository(
projectName: string,
repoName: string,
@@ -63,6 +63,11 @@ export async function createRouter(
res.status(200).json({ status: 'ok' });
});
router.get('/projects', async (_req, res) => {
const projects = await azureDevOpsApi.getProjects();
res.status(200).json(projects);
});
router.get('/repository/:projectName/:repoName', async (req, res) => {
const { projectName, repoName } = req.params;
const gitRepository = await azureDevOpsApi.getGitRepository(