feat(jenkins-backend): add multiple branch support

Signed-off-by: planeiii <planeiii@thousandeyes.com>
This commit is contained in:
planeiii
2022-06-16 14:49:36 -05:00
parent fe391c8bb4
commit 8747824221
4 changed files with 49 additions and 7 deletions
@@ -134,6 +134,34 @@ describe('JenkinsApi', () => {
});
expect(result).toHaveLength(1);
});
it('supports multiple branches', async () => {
mockedJenkinsClient.job.get.mockResolvedValue(project);
const result = await jenkinsApi.getProjects(
jenkinsInfo,
'foo,bar,catpants',
);
expect(mockedJenkins).toHaveBeenCalledWith({
baseUrl: jenkinsInfo.baseUrl,
headers: jenkinsInfo.headers,
promisify: true,
});
expect(mockedJenkinsClient.job.get).toBeCalledWith({
name: `${jenkinsInfo.jobFullName}/foo`,
tree: expect.anything(),
});
expect(mockedJenkinsClient.job.get).toBeCalledWith({
name: `${jenkinsInfo.jobFullName}/bar`,
tree: expect.anything(),
});
expect(mockedJenkinsClient.job.get).toBeCalledWith({
name: `${jenkinsInfo.jobFullName}/catpants`,
tree: expect.anything(),
});
expect(result).toHaveLength(1);
});
});
describe('augmented', () => {
const projectWithScmActions: JenkinsProject = {
@@ -75,13 +75,16 @@ export class JenkinsApiImpl {
const projects: BackstageProject[] = [];
if (branch) {
// we have been asked to filter to a single branch.
// Assume jenkinsInfo.jobFullName is a folder which contains one job per branch.
// TODO: extract a strategy interface for this
const job = await client.job.get({
name: `${jenkinsInfo.jobFullName}/${branch}`,
tree: JenkinsApiImpl.jobTreeSpec.replace(/\s/g, ''),
});
const job = await Promise.any(
branch.split(/,/g).map(name =>
client.job.get({
name: `${jenkinsInfo.jobFullName}/${name}`,
tree: JenkinsApiImpl.jobTreeSpec.replace(/\s/g, ''),
}),
),
);
projects.push(this.augmentProject(job));
} else {
// We aren't filtering