Skip to content

Commit 65c9b11

Browse files
committed
feat: consolidate status color definitions and enhance workflow stage handling in CICD components
1 parent e92972f commit 65c9b11

File tree

7 files changed

+104
-75
lines changed

7 files changed

+104
-75
lines changed

src/Shared/Components/CICDHistory/Sidebar.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ import { ReactComponent as ICArrowBackward } from '../../../Assets/Icon/ic-arrow
4141
import { ReactComponent as ICDocker } from '../../../Assets/Icon/ic-docker.svg'
4242
import { GitTriggers } from '../../types'
4343
import { CiPipelineSourceConfig } from './CiPipelineSourceConfig'
44-
import { HISTORY_LABEL, FILTER_STYLE } from './constants'
45-
import { statusColor as colorMap } from '../../constants'
44+
import { HISTORY_LABEL, FILTER_STYLE, statusColor as colorMap } from './constants'
4645
import { getTriggerStatusIcon } from './utils'
4746

4847
const SummaryTooltipCard = React.memo(

src/Shared/Components/CICDHistory/TriggerOutput.tsx

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import { CommitChipCell } from '@Shared/Components/CommitChipCell'
2424
import { ReactComponent as ICSuccess } from '@Icons/ic-success.svg'
2525
import { ReactComponent as ICLines } from '@Icons/ic-lines.svg'
2626
import { ReactComponent as ICPulsateStatus } from '@Icons/ic-pulsate-status.svg'
27+
import { ReactComponent as ICWarningY5 } from '@Icons/ic-warning-y5.svg'
2728
import { ReactComponent as ICArrowRight } from '@Icons/ic-arrow-right.svg'
2829
import { ToastManager, ToastVariantType } from '@Shared/Services'
2930
import { getDeploymentStageTitle } from '@Pages/Applications'
@@ -46,10 +47,8 @@ import {
4647
FetchIdDataStatus,
4748
FinishedType,
4849
HistoryComponentType,
49-
PROGRESSING_STATUS,
5050
ProgressingStatusType,
5151
StartDetailsType,
52-
TERMINAL_STATUS_COLOR_CLASS_MAP,
5352
TriggerDetailsStatusIconType,
5453
TriggerDetailsType,
5554
TriggerOutputProps,
@@ -61,16 +60,24 @@ import {
6160
WorkflowStageStatusType,
6261
} from './types'
6362
import { getTagDetails, getTriggerDetails, cancelCiTrigger, cancelPrePostCdTrigger } from './service'
64-
import { DEFAULT_CLUSTER_ID, DEFAULT_ENV, TIMEOUT_VALUE } from './constants'
63+
import {
64+
DEFAULT_CLUSTER_ID,
65+
DEFAULT_ENV,
66+
TIMEOUT_VALUE,
67+
statusColor as colorMap,
68+
PULSATING_STATUS_MAP,
69+
TERMINAL_STATUS_COLOR_CLASS_MAP,
70+
PROGRESSING_STATUS,
71+
} from './constants'
6572
import { GitTriggers } from '../../types'
6673
import LogsRenderer from './LogsRenderer'
6774
import DeploymentDetailSteps from './DeploymentDetailSteps'
6875
import { DeploymentHistoryConfigDiff } from './DeploymentHistoryConfigDiff'
6976
import { GitChanges, Scroller } from './History.components'
7077
import Artifacts from './Artifacts'
71-
import { statusColor as colorMap, DeploymentStageType, EMPTY_STATE_STATUS, PULSATING_STATUS_MAP } from '../../constants'
78+
import { DeploymentStageType, EMPTY_STATE_STATUS } from '../../constants'
7279
import { ConfirmationModal, ConfirmationModalVariantType } from '../ConfirmationModal'
73-
import { getWorkerPodBaseUrl, sanitizeWorkflowExecutionStages } from './utils'
80+
import { FAILED_WORKFLOW_STAGE_STATUS_MAP, getWorkerPodBaseUrl, sanitizeWorkflowExecutionStages } from './utils'
7481
import './cicdHistory.scss'
7582

7683
const Finished = React.memo(({ status, finishedOn, artifact, type, executionInfo }: FinishedType): JSX.Element => {
@@ -134,7 +141,12 @@ const WorkerStatus = React.memo(
134141
return (
135142
<div className="display-grid trigger-details__grid py-4">
136143
<div className="flexbox dc__content-center">
137-
<ICLines className="icon-dim-20 dc__no-shrink scn-7" />
144+
{/* TODO: Ask if not started needs to be catered */}
145+
{FAILED_WORKFLOW_STAGE_STATUS_MAP[podStatus] ? (
146+
<ICWarningY5 className="icon-dim-20 dc__no-shrink" />
147+
) : (
148+
<ICLines className="icon-dim-20 dc__no-shrink scn-7" />
149+
)}
138150
</div>
139151

140152
<div className="flexbox-col">
@@ -439,12 +451,37 @@ const renderDetailsSuccessIconBlock = () => (
439451
</>
440452
)
441453

454+
const NonProgressingStatus = React.memo(
455+
({ status }: { status: string }): JSX.Element => (
456+
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
457+
<circle
458+
cx="10"
459+
cy="10"
460+
r="5"
461+
fill={colorMap[status] || 'var(--N500'}
462+
stroke={colorMap[status] || 'var(--N500'}
463+
strokeOpacity="0.3"
464+
strokeWidth="10"
465+
/>
466+
<path d="M10 0L10 5" stroke="var(--N700)" />
467+
</svg>
468+
),
469+
)
470+
471+
const CurrentStatusIcon = React.memo(({ status }: { status: string }): JSX.Element => {
472+
if (status === WorkflowStageStatusType.RUNNING || PULSATING_STATUS_MAP[status]) {
473+
return <ICPulsateStatus />
474+
}
475+
476+
return <NonProgressingStatus status={status.toLowerCase()} />
477+
})
478+
442479
const TriggerDetailsStatusIcon = React.memo(
443480
({
444481
status,
445482
renderDeploymentHistoryTriggerMetaText,
446483
triggerMetadata,
447-
executionStartedOn,
484+
executionInfo,
448485
}: TriggerDetailsStatusIconType): JSX.Element => (
449486
<div className="flexbox-col">
450487
{renderDetailsSuccessIconBlock()}
@@ -459,23 +496,12 @@ const TriggerDetailsStatusIcon = React.memo(
459496
</>
460497
)}
461498

462-
{executionStartedOn && renderDetailsSuccessIconBlock()}
499+
{executionInfo?.executionStartedOn && renderDetailsSuccessIconBlock()}
463500

464-
{PULSATING_STATUS_MAP[status] ? (
465-
<ICPulsateStatus />
501+
{executionInfo ? (
502+
<CurrentStatusIcon status={executionInfo.currentStatus} />
466503
) : (
467-
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
468-
<circle
469-
cx="10"
470-
cy="10"
471-
r="5"
472-
fill={colorMap[status]}
473-
stroke={colorMap[status]}
474-
strokeOpacity="0.3"
475-
strokeWidth="10"
476-
/>
477-
<path d="M10 0L10 5" stroke="var(--N700)" />
478-
</svg>
504+
<CurrentStatusIcon status={status} />
479505
)}
480506
</div>
481507
),
@@ -517,7 +543,7 @@ export const TriggerDetails = React.memo(
517543
status={status?.toLowerCase()}
518544
renderDeploymentHistoryTriggerMetaText={renderDeploymentHistoryTriggerMetaText}
519545
triggerMetadata={triggerMetadata}
520-
executionStartedOn={executionInfo?.executionStartedOn}
546+
executionInfo={executionInfo}
521547
/>
522548
</div>
523549
<div className="trigger-details__summary flexbox-col flex-grow-1 lh-20">

src/Shared/Components/CICDHistory/constants.tsx

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616

1717
import { multiSelectStyles } from '../../../Common/MultiSelectCustomization'
18+
import { WorkflowStageStatusType } from './types'
1819

1920
export const HISTORY_LABEL = {
2021
APPLICATION: 'Application',
@@ -82,3 +83,51 @@ export const MANIFEST_STATUS_HEADERS = ['KIND', 'NAME', 'SYNC STATUS', 'MESSAGE'
8283
export const LOGS_STAGE_IDENTIFIER = 'STAGE_INFO'
8384

8485
export const LOGS_STAGE_STREAM_SEPARATOR = '|'
86+
87+
export const statusColor = {
88+
suspended: 'var(--Y500)',
89+
unknown: 'var(--N700)',
90+
queued: 'var(--N700)',
91+
degraded: 'var(--R500)',
92+
healthy: 'var(--G500)',
93+
notdeployed: 'var(--N500)',
94+
missing: 'var(--N700)',
95+
progressing: 'var(--O500)',
96+
initiating: 'var(--O500)',
97+
starting: 'var(--O500)',
98+
succeeded: 'var(--G500)',
99+
running: 'var(--O500)',
100+
failed: 'var(--R500)',
101+
error: 'var(--R500)',
102+
cancelled: 'var(--R500)',
103+
aborted: 'var(--R500)',
104+
timedout: 'var(--R500)',
105+
unabletofetch: 'var(--R500)',
106+
hibernating: 'var(--N700)',
107+
[WorkflowStageStatusType.NOT_STARTED.toLowerCase()]: 'var(--N500)',
108+
[WorkflowStageStatusType.TIMEOUT.toLowerCase()]: 'var(--R500)',
109+
}
110+
111+
export const PULSATING_STATUS_MAP: { [key in keyof typeof statusColor | WorkflowStageStatusType.RUNNING]?: boolean } = {
112+
progressing: true,
113+
initiating: true,
114+
starting: true,
115+
running: true,
116+
[WorkflowStageStatusType.RUNNING.toLowerCase()]: true,
117+
}
118+
119+
export const TERMINAL_STATUS_COLOR_CLASS_MAP = {
120+
[TERMINAL_STATUS_MAP.SUCCEEDED]: 'cg-5',
121+
[TERMINAL_STATUS_MAP.HEALTHY]: 'cg-5',
122+
[TERMINAL_STATUS_MAP.FAILED]: 'cr-5',
123+
[TERMINAL_STATUS_MAP.CANCELLED]: 'cr-5',
124+
[TERMINAL_STATUS_MAP.ERROR]: 'cr-5',
125+
}
126+
127+
export const PROGRESSING_STATUS = {
128+
[TERMINAL_STATUS_MAP.RUNNING]: 'running',
129+
[TERMINAL_STATUS_MAP.PROGRESSING]: 'progressing',
130+
[TERMINAL_STATUS_MAP.STARTING]: 'starting',
131+
[TERMINAL_STATUS_MAP.INITIATING]: 'initiating',
132+
[TERMINAL_STATUS_MAP.QUEUED]: 'queued',
133+
}

src/Shared/Components/CICDHistory/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,4 @@ export { default as LogsRenderer } from './LogsRenderer'
3030
export * from './DeploymentHistoryConfigDiff'
3131
export * from './CiPipelineSourceConfig'
3232
export * from './StatusFilterButtonComponent'
33+
export { statusColor } from './constants'

src/Shared/Components/CICDHistory/types.tsx

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import {
3939
ResourceVersionType,
4040
TargetPlatformsDTO,
4141
} from '../../types'
42-
import { TERMINAL_STATUS_MAP } from './constants'
4342
import { TargetPlatformBadgeListProps } from '../TargetPlatforms'
4443

4544
export enum HistoryComponentType {
@@ -356,9 +355,9 @@ export type FinishedType = { artifact: string; type: HistoryComponentType } & (
356355
)
357356

358357
export interface TriggerDetailsStatusIconType
359-
extends Pick<TriggerDetailsType, 'renderDeploymentHistoryTriggerMetaText' | 'triggerMetadata'>,
360-
Pick<ExecutionInfoType, 'executionStartedOn'> {
358+
extends Pick<TriggerDetailsType, 'renderDeploymentHistoryTriggerMetaText' | 'triggerMetadata'> {
361359
status: string
360+
executionInfo: ExecutionInfoType
362361
}
363362

364363
export interface SyncStageResourceDetail {
@@ -394,22 +393,6 @@ export interface DeploymentStatusDetailsResponse extends ResponseType {
394393
result?: DeploymentStatusDetailsType
395394
}
396395

397-
export const TERMINAL_STATUS_COLOR_CLASS_MAP = {
398-
[TERMINAL_STATUS_MAP.SUCCEEDED]: 'cg-5',
399-
[TERMINAL_STATUS_MAP.HEALTHY]: 'cg-5',
400-
[TERMINAL_STATUS_MAP.FAILED]: 'cr-5',
401-
[TERMINAL_STATUS_MAP.CANCELLED]: 'cr-5',
402-
[TERMINAL_STATUS_MAP.ERROR]: 'cr-5',
403-
}
404-
405-
export const PROGRESSING_STATUS = {
406-
[TERMINAL_STATUS_MAP.RUNNING]: 'running',
407-
[TERMINAL_STATUS_MAP.PROGRESSING]: 'progressing',
408-
[TERMINAL_STATUS_MAP.STARTING]: 'starting',
409-
[TERMINAL_STATUS_MAP.INITIATING]: 'initiating',
410-
[TERMINAL_STATUS_MAP.QUEUED]: 'queued',
411-
}
412-
413396
interface DeploymentStatusDetailRow {
414397
icon: string
415398
displayText: string

src/Shared/Components/CICDHistory/utils.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import {
4242
WorkflowExecutionStageNameType,
4343
} from './types'
4444

45-
const FAILED_WORKFLOW_STAGE_STATUS_MAP: Record<
45+
export const FAILED_WORKFLOW_STAGE_STATUS_MAP: Record<
4646
Extract<
4747
WorkflowStageStatusType,
4848
WorkflowStageStatusType.ABORTED | WorkflowStageStatusType.FAILED | WorkflowStageStatusType.TIMEOUT
@@ -245,7 +245,7 @@ const getWorkerInfoFromExecutionStages = (
245245
export const sanitizeWorkflowExecutionStages = (
246246
workflowExecutionStages: WorkflowExecutionStagesMapDTO['workflowExecutionStages'],
247247
): ExecutionInfoType | null => {
248-
if (!workflowExecutionStages) {
248+
if (!Object.keys(workflowExecutionStages || {}).length) {
249249
return null
250250
}
251251

src/Shared/constants.tsx

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -387,35 +387,6 @@ export const statusIcon = {
387387
unabletofetch: 'failed',
388388
}
389389

390-
export const statusColor = {
391-
suspended: 'var(--Y500)',
392-
unknown: 'var(--N700)',
393-
queued: 'var(--N700)',
394-
degraded: 'var(--R500)',
395-
healthy: 'var(--G500)',
396-
notdeployed: 'var(--N500)',
397-
missing: 'var(--N700)',
398-
progressing: 'var(--O500)',
399-
initiating: 'var(--O500)',
400-
starting: 'var(--O500)',
401-
succeeded: 'var(--G500)',
402-
running: 'var(--O500)',
403-
failed: 'var(--R500)',
404-
error: 'var(--R500)',
405-
cancelled: 'var(--R500)',
406-
aborted: 'var(--R500)',
407-
timedout: 'var(--R500)',
408-
unabletofetch: 'var(--R500)',
409-
hibernating: 'var(--N700)',
410-
}
411-
412-
export const PULSATING_STATUS_MAP: { [key in keyof typeof statusColor]?: boolean } = {
413-
progressing: true,
414-
initiating: true,
415-
starting: true,
416-
running: true,
417-
}
418-
419390
export const APP_STATUS_HEADERS = ['KIND', 'NAME', 'STATUS', 'MESSAGE']
420391

421392
export const MATERIAL_EXCLUDE_TIPPY_TEXT =

0 commit comments

Comments
 (0)