Merge pull request #7998 from awanlin/topic/improve-azure-devops-date-handling
Improved Azure DevOps Date Handling
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
---
|
||||
'@backstage/plugin-azure-devops': patch
|
||||
'@backstage/plugin-azure-devops-backend': patch
|
||||
'@backstage/plugin-azure-devops-common': minor
|
||||
---
|
||||
|
||||
Improved Date handling for the Azure DevOps set of plugins by using strings and letting the frontend handle the conversion to DateTime
|
||||
@@ -48,7 +48,7 @@ describe('AzureDevOpsApi', () => {
|
||||
|
||||
const inputIdentityRef: IdentityRef = {
|
||||
displayName: 'Jane Doe',
|
||||
uniqueName: 'DOMAINjdoe',
|
||||
uniqueName: 'DOMAIN\\jdoe',
|
||||
};
|
||||
|
||||
const inputBuild: Build = {
|
||||
@@ -56,9 +56,9 @@ describe('AzureDevOpsApi', () => {
|
||||
buildNumber: 'Build-1',
|
||||
status: BuildStatus.Completed,
|
||||
result: BuildResult.Succeeded,
|
||||
queueTime: new Date('2020-09-12T06:10:23.9325232Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.9325232Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.9325232Z'),
|
||||
queueTime: new Date('2020-09-12T06:10:23.932Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.932Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.932Z'),
|
||||
sourceBranch: 'refs/heads/develop',
|
||||
sourceVersion: 'f4f78b3100b2923982bdf60c89c57ce6fd2d9a1c',
|
||||
definition: inputBuildDefinition,
|
||||
@@ -72,11 +72,11 @@ describe('AzureDevOpsApi', () => {
|
||||
link: 'https://host.com/myOrg/0bcc0c0d-2d02/_build/results?buildId=1',
|
||||
status: BuildStatus.Completed,
|
||||
result: BuildResult.Succeeded,
|
||||
queueTime: new Date('2020-09-12T06:10:23.9325232Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.9325232Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.9325232Z'),
|
||||
queueTime: '2020-09-12T06:10:23.932Z',
|
||||
startTime: '2020-09-12T06:15:23.932Z',
|
||||
finishTime: '2020-09-12T06:20:23.932Z',
|
||||
source: 'refs/heads/develop (f4f78b31)',
|
||||
uniqueName: 'DOMAINjdoe',
|
||||
uniqueName: 'DOMAIN\\jdoe',
|
||||
};
|
||||
|
||||
expect(mappedRepoBuild(inputBuild)).toEqual(outputRepoBuild);
|
||||
@@ -93,7 +93,7 @@ describe('AzureDevOpsApi', () => {
|
||||
|
||||
const inputIdentityRef: IdentityRef = {
|
||||
displayName: 'Jane Doe',
|
||||
uniqueName: 'DOMAINjdoe',
|
||||
uniqueName: 'DOMAIN\\jdoe',
|
||||
};
|
||||
|
||||
const inputBuild: Build = {
|
||||
@@ -101,9 +101,9 @@ describe('AzureDevOpsApi', () => {
|
||||
buildNumber: 'Build-1',
|
||||
status: BuildStatus.Completed,
|
||||
result: BuildResult.Succeeded,
|
||||
queueTime: new Date('2020-09-12T06:10:23.9325232Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.9325232Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.9325232Z'),
|
||||
queueTime: new Date('2020-09-12T06:10:23.932Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.932Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.932Z'),
|
||||
sourceBranch: 'refs/heads/develop',
|
||||
sourceVersion: 'f4f78b3100b2923982bdf60c89c57ce6fd2d9a1c',
|
||||
definition: undefined,
|
||||
@@ -117,11 +117,11 @@ describe('AzureDevOpsApi', () => {
|
||||
link: 'https://host.com/myOrg/0bcc0c0d-2d02/_build/results?buildId=1',
|
||||
status: BuildStatus.Completed,
|
||||
result: BuildResult.Succeeded,
|
||||
queueTime: new Date('2020-09-12T06:10:23.9325232Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.9325232Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.9325232Z'),
|
||||
queueTime: '2020-09-12T06:10:23.932Z',
|
||||
startTime: '2020-09-12T06:15:23.932Z',
|
||||
finishTime: '2020-09-12T06:20:23.932Z',
|
||||
source: 'refs/heads/develop (f4f78b31)',
|
||||
uniqueName: 'DOMAINjdoe',
|
||||
uniqueName: 'DOMAIN\\jdoe',
|
||||
};
|
||||
|
||||
expect(mappedRepoBuild(inputBuild)).toEqual(outputRepoBuild);
|
||||
@@ -138,7 +138,7 @@ describe('AzureDevOpsApi', () => {
|
||||
|
||||
const inputIdentityRef: IdentityRef = {
|
||||
displayName: 'Jane Doe',
|
||||
uniqueName: 'DOMAINjdoe',
|
||||
uniqueName: 'DOMAIN\\jdoe',
|
||||
};
|
||||
|
||||
const inputBuild: Build = {
|
||||
@@ -146,9 +146,9 @@ describe('AzureDevOpsApi', () => {
|
||||
buildNumber: 'Build-1',
|
||||
status: undefined,
|
||||
result: BuildResult.Succeeded,
|
||||
queueTime: new Date('2020-09-12T06:10:23.9325232Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.9325232Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.9325232Z'),
|
||||
queueTime: new Date('2020-09-12T06:10:23.932Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.932Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.932Z'),
|
||||
sourceBranch: 'refs/heads/develop',
|
||||
sourceVersion: 'f4f78b3100b2923982bdf60c89c57ce6fd2d9a1c',
|
||||
definition: undefined,
|
||||
@@ -162,11 +162,11 @@ describe('AzureDevOpsApi', () => {
|
||||
link: 'https://host.com/myOrg/0bcc0c0d-2d02/_build/results?buildId=1',
|
||||
status: BuildStatus.None,
|
||||
result: BuildResult.Succeeded,
|
||||
queueTime: new Date('2020-09-12T06:10:23.9325232Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.9325232Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.9325232Z'),
|
||||
queueTime: '2020-09-12T06:10:23.932Z',
|
||||
startTime: '2020-09-12T06:15:23.932Z',
|
||||
finishTime: '2020-09-12T06:20:23.932Z',
|
||||
source: 'refs/heads/develop (f4f78b31)',
|
||||
uniqueName: 'DOMAINjdoe',
|
||||
uniqueName: 'DOMAIN\\jdoe',
|
||||
};
|
||||
|
||||
expect(mappedRepoBuild(inputBuild)).toEqual(outputRepoBuild);
|
||||
@@ -183,7 +183,7 @@ describe('AzureDevOpsApi', () => {
|
||||
|
||||
const inputIdentityRef: IdentityRef = {
|
||||
displayName: 'Jane Doe',
|
||||
uniqueName: 'DOMAINjdoe',
|
||||
uniqueName: 'DOMAIN\\jdoe',
|
||||
};
|
||||
|
||||
const inputBuild: Build = {
|
||||
@@ -191,9 +191,9 @@ describe('AzureDevOpsApi', () => {
|
||||
buildNumber: 'Build-1',
|
||||
status: BuildStatus.InProgress,
|
||||
result: undefined,
|
||||
queueTime: new Date('2020-09-12T06:10:23.9325232Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.9325232Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.9325232Z'),
|
||||
queueTime: new Date('2020-09-12T06:10:23.932Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.932Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.932Z'),
|
||||
sourceBranch: 'refs/heads/develop',
|
||||
sourceVersion: 'f4f78b3100b2923982bdf60c89c57ce6fd2d9a1c',
|
||||
definition: undefined,
|
||||
@@ -207,11 +207,11 @@ describe('AzureDevOpsApi', () => {
|
||||
link: 'https://host.com/myOrg/0bcc0c0d-2d02/_build/results?buildId=1',
|
||||
status: BuildStatus.InProgress,
|
||||
result: BuildResult.None,
|
||||
queueTime: new Date('2020-09-12T06:10:23.9325232Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.9325232Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.9325232Z'),
|
||||
queueTime: '2020-09-12T06:10:23.932Z',
|
||||
startTime: '2020-09-12T06:15:23.932Z',
|
||||
finishTime: '2020-09-12T06:20:23.932Z',
|
||||
source: 'refs/heads/develop (f4f78b31)',
|
||||
uniqueName: 'DOMAINjdoe',
|
||||
uniqueName: 'DOMAIN\\jdoe',
|
||||
};
|
||||
|
||||
expect(mappedRepoBuild(inputBuild)).toEqual(outputRepoBuild);
|
||||
@@ -222,7 +222,7 @@ describe('AzureDevOpsApi', () => {
|
||||
it('should return empty string for link', () => {
|
||||
const inputIdentityRef: IdentityRef = {
|
||||
displayName: 'Jane Doe',
|
||||
uniqueName: 'DOMAINjdoe',
|
||||
uniqueName: 'DOMAIN\\jdoe',
|
||||
};
|
||||
|
||||
const inputBuild: Build = {
|
||||
@@ -230,9 +230,9 @@ describe('AzureDevOpsApi', () => {
|
||||
buildNumber: 'Build-1',
|
||||
status: BuildStatus.InProgress,
|
||||
result: undefined,
|
||||
queueTime: new Date('2020-09-12T06:10:23.9325232Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.9325232Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.9325232Z'),
|
||||
queueTime: new Date('2020-09-12T06:10:23.932Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.932Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.932Z'),
|
||||
sourceBranch: 'refs/heads/develop',
|
||||
sourceVersion: 'f4f78b3100b2923982bdf60c89c57ce6fd2d9a1c',
|
||||
definition: undefined,
|
||||
@@ -246,11 +246,11 @@ describe('AzureDevOpsApi', () => {
|
||||
link: '',
|
||||
status: BuildStatus.InProgress,
|
||||
result: BuildResult.None,
|
||||
queueTime: new Date('2020-09-12T06:10:23.9325232Z'),
|
||||
startTime: new Date('2020-09-12T06:15:23.9325232Z'),
|
||||
finishTime: new Date('2020-09-12T06:20:23.9325232Z'),
|
||||
queueTime: '2020-09-12T06:10:23.932Z',
|
||||
startTime: '2020-09-12T06:15:23.932Z',
|
||||
finishTime: '2020-09-12T06:20:23.932Z',
|
||||
source: 'refs/heads/develop (f4f78b31)',
|
||||
uniqueName: 'DOMAINjdoe',
|
||||
uniqueName: 'DOMAIN\\jdoe',
|
||||
};
|
||||
|
||||
expect(mappedRepoBuild(inputBuild)).toEqual(outputRepoBuild);
|
||||
@@ -265,7 +265,7 @@ describe('AzureDevOpsApi', () => {
|
||||
|
||||
const inputIdentityRef: IdentityRef = {
|
||||
displayName: 'Jane Doe',
|
||||
uniqueName: 'DOMAINjdoe',
|
||||
uniqueName: 'DOMAIN\\jdoe',
|
||||
};
|
||||
|
||||
const inputPullRequest: GitPullRequest = {
|
||||
@@ -273,7 +273,7 @@ describe('AzureDevOpsApi', () => {
|
||||
repository: inputGitRepository,
|
||||
title: 'My Awesome New Feature',
|
||||
createdBy: inputIdentityRef,
|
||||
creationDate: new Date('2020-09-12T06:10:23.9325232Z'),
|
||||
creationDate: new Date('2020-09-12T06:10:23.932Z'),
|
||||
sourceRefName: 'refs/heads/topic/super-awesome-feature',
|
||||
targetRefName: 'refs/heads/main',
|
||||
status: PullRequestStatus.Active,
|
||||
@@ -287,9 +287,9 @@ describe('AzureDevOpsApi', () => {
|
||||
pullRequestId: 7181,
|
||||
repoName: 'super-feature-repo',
|
||||
title: 'My Awesome New Feature',
|
||||
uniqueName: 'DOMAINjdoe',
|
||||
uniqueName: 'DOMAIN\\jdoe',
|
||||
createdBy: 'Jane Doe',
|
||||
creationDate: new Date('2020-09-12T06:10:23.9325232Z'),
|
||||
creationDate: '2020-09-12T06:10:23.932Z',
|
||||
sourceRefName: 'refs/heads/topic/super-awesome-feature',
|
||||
targetRefName: 'refs/heads/main',
|
||||
status: PullRequestStatus.Active,
|
||||
|
||||
@@ -149,9 +149,9 @@ export function mappedRepoBuild(build: Build): RepoBuild {
|
||||
link: build._links?.web.href ?? '',
|
||||
status: build.status ?? BuildStatus.None,
|
||||
result: build.result ?? BuildResult.None,
|
||||
queueTime: build.queueTime,
|
||||
startTime: build.startTime,
|
||||
finishTime: build.finishTime,
|
||||
queueTime: build.queueTime?.toISOString(),
|
||||
startTime: build.startTime?.toISOString(),
|
||||
finishTime: build.finishTime?.toISOString(),
|
||||
source: `${build.sourceBranch} (${build.sourceVersion?.substr(0, 8)})`,
|
||||
uniqueName: build.requestedFor?.uniqueName ?? 'N/A',
|
||||
};
|
||||
@@ -167,7 +167,7 @@ export function mappedPullRequest(
|
||||
title: pullRequest.title,
|
||||
uniqueName: pullRequest.createdBy?.uniqueName ?? 'N/A',
|
||||
createdBy: pullRequest.createdBy?.displayName ?? 'N/A',
|
||||
creationDate: pullRequest.creationDate,
|
||||
creationDate: pullRequest.creationDate?.toISOString(),
|
||||
sourceRefName: pullRequest.sourceRefName,
|
||||
targetRefName: pullRequest.targetRefName,
|
||||
status: pullRequest.status,
|
||||
|
||||
@@ -152,7 +152,7 @@ describe('createRouter', () => {
|
||||
link: 'https://host.com/myOrg/0bcc0c0d-2d02/_build/results?buildId=1',
|
||||
status: BuildStatus.Completed,
|
||||
result: BuildResult.PartiallySucceeded,
|
||||
queueTime: undefined,
|
||||
queueTime: '2020-09-12T06:10:23.932Z',
|
||||
source: 'refs/heads/develop (f4f78b31)',
|
||||
};
|
||||
|
||||
@@ -162,7 +162,7 @@ describe('createRouter', () => {
|
||||
link: 'https://host.com/myOrg/0bcc0c0d-2d02/_build/results?buildId=2',
|
||||
status: BuildStatus.InProgress,
|
||||
result: BuildResult.None,
|
||||
queueTime: undefined,
|
||||
queueTime: '2020-09-12T06:10:23.932Z',
|
||||
source: 'refs/heads/develop (13c988d4)',
|
||||
};
|
||||
|
||||
@@ -172,7 +172,7 @@ describe('createRouter', () => {
|
||||
link: 'https://host.com/myOrg/0bcc0c0d-2d02/_build/results?buildId=3',
|
||||
status: BuildStatus.Completed,
|
||||
result: BuildResult.Succeeded,
|
||||
queueTime: undefined,
|
||||
queueTime: '2020-09-12T06:10:23.932Z',
|
||||
source: 'refs/heads/develop (9bedf678)',
|
||||
};
|
||||
|
||||
@@ -205,7 +205,7 @@ describe('createRouter', () => {
|
||||
repoName: 'super-feature-repo',
|
||||
title: 'My Awesome New Feature',
|
||||
createdBy: 'Jane Doe',
|
||||
creationDate: undefined,
|
||||
creationDate: '2020-09-12T06:10:23.932Z',
|
||||
sourceRefName: 'refs/heads/topic/super-awesome-feature',
|
||||
targetRefName: 'refs/heads/main',
|
||||
status: PullRequestStatus.Active,
|
||||
@@ -218,7 +218,7 @@ describe('createRouter', () => {
|
||||
repoName: 'super-feature-repo',
|
||||
title: 'Refactoring My Awesome New Feature',
|
||||
createdBy: 'Jane Doe',
|
||||
creationDate: undefined,
|
||||
creationDate: '2020-09-12T06:10:23.932Z',
|
||||
sourceRefName: 'refs/heads/topic/refactor-super-awesome-feature',
|
||||
targetRefName: 'refs/heads/main',
|
||||
status: PullRequestStatus.Active,
|
||||
@@ -231,7 +231,7 @@ describe('createRouter', () => {
|
||||
repoName: 'super-feature-repo',
|
||||
title: 'Bug Fix for My Awesome New Feature',
|
||||
createdBy: 'Jane Doe',
|
||||
creationDate: undefined,
|
||||
creationDate: '2020-09-12T06:10:23.932Z',
|
||||
sourceRefName: 'refs/heads/topic/fix-super-awesome-feature',
|
||||
targetRefName: 'refs/heads/main',
|
||||
status: PullRequestStatus.Active,
|
||||
|
||||
@@ -36,7 +36,7 @@ export type PullRequest = {
|
||||
title?: string;
|
||||
uniqueName?: string;
|
||||
createdBy?: string;
|
||||
creationDate?: Date;
|
||||
creationDate?: string;
|
||||
sourceRefName?: string;
|
||||
targetRefName?: string;
|
||||
status?: PullRequestStatus;
|
||||
@@ -72,9 +72,9 @@ export type RepoBuild = {
|
||||
link?: string;
|
||||
status?: BuildStatus;
|
||||
result?: BuildResult;
|
||||
queueTime?: Date;
|
||||
startTime?: Date;
|
||||
finishTime?: Date;
|
||||
queueTime?: string;
|
||||
startTime?: string;
|
||||
finishTime?: string;
|
||||
source: string;
|
||||
uniqueName?: string;
|
||||
};
|
||||
|
||||
@@ -74,9 +74,9 @@ export type RepoBuild = {
|
||||
link?: string;
|
||||
status?: BuildStatus;
|
||||
result?: BuildResult;
|
||||
queueTime?: Date;
|
||||
startTime?: Date;
|
||||
finishTime?: Date;
|
||||
queueTime?: string;
|
||||
startTime?: string;
|
||||
finishTime?: string;
|
||||
source: string;
|
||||
uniqueName?: string;
|
||||
};
|
||||
@@ -114,7 +114,7 @@ export type PullRequest = {
|
||||
title?: string;
|
||||
uniqueName?: string;
|
||||
createdBy?: string;
|
||||
creationDate?: Date;
|
||||
creationDate?: string;
|
||||
sourceRefName?: string;
|
||||
targetRefName?: string;
|
||||
status?: PullRequestStatus;
|
||||
|
||||
@@ -56,7 +56,7 @@ const generateTestData = (rows = 10): RepoBuild[] => {
|
||||
title: `backstage ci - 1.0.0-preview-${rows - i}`,
|
||||
status,
|
||||
result,
|
||||
queueTime: new Date(Date.now() - i * 60000),
|
||||
queueTime: new Date(Date.now() - i * 60000).toISOString(),
|
||||
source: 'refs/heads/main',
|
||||
link: '',
|
||||
});
|
||||
|
||||
@@ -149,7 +149,10 @@ const columns: TableColumn[] = [
|
||||
field: 'queueTime',
|
||||
width: 'auto',
|
||||
render: (row: Partial<RepoBuild>) =>
|
||||
DateTime.fromJSDate(row.queueTime ?? new Date()).toRelative(),
|
||||
(row.queueTime
|
||||
? DateTime.fromISO(row.queueTime)
|
||||
: DateTime.now()
|
||||
).toRelative(),
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user