From f028801f39602cb82eed6ea8ca67b50e2ca1a5de Mon Sep 17 00:00:00 2001 From: Ivan Shmidt Date: Mon, 4 May 2020 21:41:38 +0200 Subject: [PATCH] feat: retry --- plugins/circleci/src/api/index.ts | 4 ++ .../src/components/CITable/CITable.tsx | 37 +++++++++++++++++-- .../components/CircleCIFetch/CirleCIFetch.tsx | 22 +++++++---- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/plugins/circleci/src/api/index.ts b/plugins/circleci/src/api/index.ts index d42023c657..93916f82bb 100644 --- a/plugins/circleci/src/api/index.ts +++ b/plugins/circleci/src/api/index.ts @@ -93,6 +93,10 @@ export class CircleCIApi { return new CircleCI({ ...this.options, token: this.token }); } + async retry(buildId: string) { + return this.api.retry(Number(buildId)); + } + async getBuilds() { return this.api.builds(); } diff --git a/plugins/circleci/src/components/CITable/CITable.tsx b/plugins/circleci/src/components/CITable/CITable.tsx index a6b607a216..0e867f8b2c 100644 --- a/plugins/circleci/src/components/CITable/CITable.tsx +++ b/plugins/circleci/src/components/CITable/CITable.tsx @@ -7,6 +7,15 @@ import TableCell from '@material-ui/core/TableCell'; import TableContainer from '@material-ui/core/TableContainer'; import TableHead from '@material-ui/core/TableHead'; import TableRow from '@material-ui/core/TableRow'; +import Button from '@material-ui/core/Button'; +import { + StatusRunning, + StatusFailed, + StatusOK, + StatusPending, + StatusNA, +} from '@backstage/core'; + const useStyles = makeStyles({ table: { minWidth: 650, @@ -36,7 +45,25 @@ export type CITableBuildInfo = { failed: number; testUrl: string; //fixme better name }; - onRetriggerClick: () => void; + onRetryClick: () => void; +}; + +// :retried, :canceled, :infrastructure_fail, :timedout, :not_run, :running, :failed, :queued, :scheduled, :not_running, :no_tests, :fixed, :success +const getStatusComponent = (status: string) => { + switch (status.toLowerCase()) { + case 'queued': + case 'scheduled': + return ; + case 'running': + return ; + case 'failed': + return ; + case 'success': + return ; + case 'canceled': + default: + return ; + } }; export const CITable: FC<{ @@ -54,7 +81,7 @@ export const CITable: FC<{ Source Status Tests - Retrigger + Actions @@ -68,7 +95,7 @@ export const CITable: FC<{
{build.source.commit.hash}
- {build.status} + {getStatusComponent(build.status)} {build.tests && ( <> @@ -78,7 +105,9 @@ export const CITable: FC<{ )} - Retrigger + + + ))}
diff --git a/plugins/circleci/src/components/CircleCIFetch/CirleCIFetch.tsx b/plugins/circleci/src/components/CircleCIFetch/CirleCIFetch.tsx index 71d0e0c29b..226b995a72 100644 --- a/plugins/circleci/src/components/CircleCIFetch/CirleCIFetch.tsx +++ b/plugins/circleci/src/components/CircleCIFetch/CirleCIFetch.tsx @@ -47,12 +47,15 @@ const makeReadableStatus = (status: string | undefined) => { } as Record)[status]; }; -const transform = (buildsData: BuildSummary[]): CITableBuildInfo[] => { +const transform = ( + buildsData: BuildSummary[], + api: typeof circleCIApiRef.T, +): CITableBuildInfo[] => { return buildsData.map(buildData => { const tableBuildInfo: CITableBuildInfo = { id: String(buildData.build_num), buildName: buildData.subject ? String(buildData.subject) : '', - onRetriggerClick: () => null, + onRetryClick: () => api.retry(String(buildData.build_num)), source: { branchName: String(buildData.branch), commit: { @@ -73,7 +76,6 @@ const transform = (buildsData: BuildSummary[]): CITableBuildInfo[] => { }); }; - export const CircleCIFetch: FC<{}> = () => { const [authed, setAuthed] = React.useState(false); const [builds, setBuilds] = React.useState([]); @@ -96,8 +98,14 @@ export const CircleCIFetch: FC<{}> = () => { }, [authed]); if (!authed) return
Not authenticated
; - const transformedBuilds = transform(builds || []); - return <> - - {!api.authed ?
Not authenticated
: }; + const transformedBuilds = transform(builds || [], api); + return ( + <> + {!api.authed ? ( +
Not authenticated
+ ) : ( + + )} + + ); };