Improved Azure DevOps support for mono-repos
Signed-off-by: R-Beck-2020 <78100403+R-Beck-2020@users.noreply.github.com>
This commit is contained in:
@@ -99,7 +99,7 @@ describe('useBuildRuns', () => {
|
||||
renderHook(() => useBuildRuns(entity), {
|
||||
wrapper: Wrapper,
|
||||
}),
|
||||
).toThrow('Value for annotation "dev.azure.com/project" was not found');
|
||||
).toThrow('"dev.azure.com" annotations are missing');
|
||||
});
|
||||
|
||||
it('should return throw when annotation invalid', async () => {
|
||||
|
||||
@@ -103,7 +103,7 @@ describe('useGitTags', () => {
|
||||
renderHook(() => useGitTags(entity), {
|
||||
wrapper: Wrapper,
|
||||
}),
|
||||
).toThrow('Value for annotation "dev.azure.com/project" was not found');
|
||||
).toThrow('"dev.azure.com" annotations are missing');
|
||||
});
|
||||
|
||||
it('should return throw when annotation invalid', async () => {
|
||||
|
||||
@@ -102,7 +102,7 @@ describe('usePullRequests', () => {
|
||||
renderHook(() => usePullRequests(entity), {
|
||||
wrapper: Wrapper,
|
||||
}),
|
||||
).toThrow('Value for annotation "dev.azure.com/project" was not found');
|
||||
).toThrow('"dev.azure.com" annotations are missing');
|
||||
});
|
||||
|
||||
it('should return throw when annotation invalid', async () => {
|
||||
|
||||
@@ -81,7 +81,7 @@ describe('useReadme', () => {
|
||||
renderHook(() => useReadme(entity), {
|
||||
wrapper: Wrapper,
|
||||
}),
|
||||
).toThrow('Value for annotation "dev.azure.com/project" was not found');
|
||||
).toThrow('"dev.azure.com" annotations are missing');
|
||||
});
|
||||
|
||||
it('should return throw when annotation invalid', async () => {
|
||||
|
||||
@@ -140,7 +140,7 @@ describe('getAnnotationValuesFromEntity', () => {
|
||||
});
|
||||
|
||||
describe('with only project annotation', () => {
|
||||
it('should should throw annotation not found error', () => {
|
||||
it('should throw annotation not found error', () => {
|
||||
const entity: Entity = {
|
||||
apiVersion: 'backstage.io/v1alpha1',
|
||||
kind: 'Component',
|
||||
@@ -163,7 +163,7 @@ describe('getAnnotationValuesFromEntity', () => {
|
||||
});
|
||||
|
||||
describe('with only build-definition annotation', () => {
|
||||
it('should should throw annotation not found error', () => {
|
||||
it('should throw annotation not found error', () => {
|
||||
const entity: Entity = {
|
||||
apiVersion: 'backstage.io/v1alpha1',
|
||||
kind: 'Component',
|
||||
@@ -381,4 +381,55 @@ describe('getAnnotationValuesFromEntity', () => {
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('projectRepo and buildDefinition are provided', () => {
|
||||
it('should return project, repo and buildDefinition', () => {
|
||||
const entity: Entity = {
|
||||
apiVersion: 'backstage.io/v1alpha1',
|
||||
kind: 'Component',
|
||||
metadata: {
|
||||
namespace: 'default',
|
||||
name: 'project-repo',
|
||||
annotations: {
|
||||
'dev.azure.com/build-definition': 'buildDefinitionName',
|
||||
'dev.azure.com/project-repo': 'projectName/repoName',
|
||||
},
|
||||
},
|
||||
};
|
||||
const values = getAnnotationValuesFromEntity(entity);
|
||||
expect(values).toEqual({
|
||||
project: 'projectName',
|
||||
repo: 'repoName',
|
||||
definition: 'buildDefinitionName',
|
||||
host: undefined,
|
||||
org: undefined,
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('project, projectRepo and buildDefinition are provided', () => {
|
||||
it('should prefer project over project-repo.project and return no repo', () => {
|
||||
const entity: Entity = {
|
||||
apiVersion: 'backstage.io/v1alpha1',
|
||||
kind: 'Component',
|
||||
metadata: {
|
||||
namespace: 'default',
|
||||
name: 'project-repo',
|
||||
annotations: {
|
||||
'dev.azure.com/project': 'projectName',
|
||||
'dev.azure.com/build-definition': 'buildDefinitionName',
|
||||
'dev.azure.com/project-repo': 'ignoredProject/repoName',
|
||||
},
|
||||
},
|
||||
};
|
||||
const values = getAnnotationValuesFromEntity(entity);
|
||||
expect(values).toEqual({
|
||||
project: 'projectName',
|
||||
repo: undefined,
|
||||
definition: 'buildDefinitionName',
|
||||
host: undefined,
|
||||
org: undefined,
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -29,34 +29,49 @@ export function getAnnotationValuesFromEntity(entity: Entity): {
|
||||
host?: string;
|
||||
org?: string;
|
||||
} {
|
||||
const { host, org } = getHostOrg(entity.metadata.annotations);
|
||||
|
||||
const projectRepoValues = getProjectRepo(entity.metadata.annotations);
|
||||
if (projectRepoValues.project && projectRepoValues.repo) {
|
||||
return {
|
||||
project: projectRepoValues.project,
|
||||
repo: projectRepoValues.repo,
|
||||
host,
|
||||
org,
|
||||
};
|
||||
}
|
||||
|
||||
const hostOrg = getHostOrg(entity.metadata.annotations);
|
||||
const projectRepo = getProjectRepo(entity.metadata.annotations);
|
||||
const project =
|
||||
entity.metadata.annotations?.[AZURE_DEVOPS_PROJECT_ANNOTATION];
|
||||
if (!project) {
|
||||
const definition =
|
||||
entity.metadata.annotations?.[AZURE_DEVOPS_BUILD_DEFINITION_ANNOTATION];
|
||||
|
||||
if (definition) {
|
||||
if (project) {
|
||||
return {
|
||||
project,
|
||||
definition,
|
||||
...hostOrg,
|
||||
};
|
||||
}
|
||||
if (projectRepo.project) {
|
||||
return {
|
||||
project: projectRepo.project,
|
||||
repo: projectRepo.repo,
|
||||
definition,
|
||||
...hostOrg,
|
||||
};
|
||||
}
|
||||
throw new Error(
|
||||
`Value for annotation "${AZURE_DEVOPS_PROJECT_ANNOTATION}" was not found`,
|
||||
);
|
||||
} else {
|
||||
if (projectRepo.project) {
|
||||
return {
|
||||
project: projectRepo.project,
|
||||
repo: projectRepo.repo,
|
||||
...hostOrg,
|
||||
};
|
||||
}
|
||||
|
||||
if (project) {
|
||||
throw new Error(
|
||||
`Value for annotation "${AZURE_DEVOPS_BUILD_DEFINITION_ANNOTATION}" was not found`,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const definition =
|
||||
entity.metadata.annotations?.[AZURE_DEVOPS_BUILD_DEFINITION_ANNOTATION];
|
||||
if (!definition) {
|
||||
throw new Error(
|
||||
`Value for annotation "${AZURE_DEVOPS_BUILD_DEFINITION_ANNOTATION}" was not found`,
|
||||
);
|
||||
}
|
||||
return { project, definition, host, org };
|
||||
throw new Error('"dev.azure.com" annotations are missing');
|
||||
}
|
||||
|
||||
function getProjectRepo(annotations?: Record<string, string>): {
|
||||
|
||||
Reference in New Issue
Block a user