Skip to content

Commit 8ff038c

Browse files
committed
refactor - common out code and optimization
1 parent 3411e50 commit 8ff038c

File tree

15 files changed

+188
-165
lines changed

15 files changed

+188
-165
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { DeploymentAppTypes } from '@devtron-labs/devtron-fe-common-lib'
2+
3+
import { DeploymentAppRadioGroup } from '@Components/v2/values/chartValuesDiff/ChartValuesView.component'
4+
5+
import { CDPipelineDeploymentAppTypeProps } from './types'
6+
7+
export const CDPipelineDeploymentAppType = ({
8+
isVirtualEnvironment,
9+
allowedDeploymentTypes,
10+
noGitOpsModuleInstalledAndConfigured,
11+
isGitOpsInstalledButNotConfigured,
12+
deploymentAppType,
13+
rootClassName,
14+
isDisabled,
15+
handleChange,
16+
isGitOpsRepoNotConfigured,
17+
gitOpsRepoConfigInfoBar,
18+
}: CDPipelineDeploymentAppTypeProps) =>
19+
!window._env_.HIDE_GITOPS_OR_HELM_OPTION &&
20+
!isVirtualEnvironment &&
21+
allowedDeploymentTypes?.length > 0 &&
22+
// Want to show this when gitops module is installed, does not matter if it is configured or not
23+
(!noGitOpsModuleInstalledAndConfigured || isGitOpsInstalledButNotConfigured) && (
24+
<div className="mt-16">
25+
{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}
26+
<label className="form__label form__label--sentence">How do you want to deploy?</label>
27+
<DeploymentAppRadioGroup
28+
deploymentAppType={deploymentAppType ?? DeploymentAppTypes.HELM}
29+
handleOnChange={handleChange}
30+
allowedDeploymentTypes={allowedDeploymentTypes}
31+
rootClassName={rootClassName}
32+
isDisabled={isDisabled}
33+
isFromCDPipeline
34+
isGitOpsRepoNotConfigured={isGitOpsRepoNotConfigured}
35+
gitOpsRepoConfigInfoBar={gitOpsRepoConfigInfoBar}
36+
areGitopsCredentialsConfigured={!isGitOpsInstalledButNotConfigured}
37+
/>
38+
</div>
39+
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './CDPipelineDeploymentAppType'
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { DeploymentAppRadioGroupType } from '@Components/v2/values/chartValuesDiff/ChartValuesView.type'
2+
3+
export interface CDPipelineDeploymentAppTypeProps
4+
extends Omit<DeploymentAppRadioGroupType, 'isFromCDPipeline' | 'handleOnChange'> {
5+
isVirtualEnvironment: boolean
6+
noGitOpsModuleInstalledAndConfigured: boolean
7+
isGitOpsInstalledButNotConfigured: boolean
8+
handleChange: DeploymentAppRadioGroupType['handleOnChange']
9+
}

src/Pages/App/Configurations/WorkflowEditor/CreateCICDPipeline/CDStepperContent.tsx

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ import {
1515
import { GeneratedHelmPush } from '@Components/cdPipeline/cdPipeline.types'
1616
import { ValidationRules } from '@Components/ciPipeline/validationRules'
1717
import { EnvironmentWithSelectPickerType } from '@Components/CIPipelineN/types'
18-
import { DeploymentAppRadioGroup } from '@Components/v2/values/chartValuesDiff/ChartValuesView.component'
1918
import { GITOPS_REPO_REQUIRED } from '@Components/v2/values/chartValuesDiff/constant'
2019
import { ENV_ALREADY_EXIST_ERROR } from '@Config/constants'
2120
import { URLS } from '@Config/routes'
2221
import { getGitOpsRepoConfig } from '@Services/service'
2322

23+
import { CDPipelineDeploymentAppType } from '../CDPipelineDeploymentAppType'
2424
import { SourceMaterialsSelector } from '../SourceMaterialsSelector'
2525
import { CDStepperContentProps } from './types'
2626
import { getEnvironmentOptions } from './utils'
@@ -167,27 +167,19 @@ export const CDStepperContent = ({
167167
<div className="mt-16">
168168
{gitOpsRepoNotConfiguredAndOptionsHidden && gitOpsRepoConfigInfoBar(GITOPS_REPO_REQUIRED)}
169169
</div>
170-
{!window._env_.HIDE_GITOPS_OR_HELM_OPTION &&
171-
!selectedEnvironment?.isVirtualEnvironment &&
172-
selectedEnvironment?.allowedDeploymentTypes?.length > 0 &&
173-
// Want to show this when gitops module is installed, does not matter if it is configured or not
174-
(!noGitOpsModuleInstalledAndConfigured || isGitOpsInstalledButNotConfigured) && (
175-
<div className="mt-16">
176-
{/* eslint-disable-next-line jsx-a11y/label-has-associated-control */}
177-
<label className="form__label form__label--sentence">How do you want to deploy?</label>
178-
<DeploymentAppRadioGroup
179-
deploymentAppType={deploymentAppType ?? DeploymentAppTypes.HELM}
180-
handleOnChange={handleDeploymentAppTypeChange}
181-
allowedDeploymentTypes={selectedEnvironment?.allowedDeploymentTypes}
182-
rootClassName="chartrepo-type__radio-group"
183-
isDisabled={isFormDisabled}
184-
isFromCDPipeline
185-
isGitOpsRepoNotConfigured={isGitOpsRepoNotConfigured}
186-
gitOpsRepoConfigInfoBar={gitOpsRepoConfigInfoBar}
187-
areGitopsCredentialsConfigured={!isGitOpsInstalledButNotConfigured}
188-
/>
189-
</div>
190-
)}
170+
<CDPipelineDeploymentAppType
171+
isVirtualEnvironment={selectedEnvironment?.isVirtualEnvironment}
172+
isGitOpsInstalledButNotConfigured={isGitOpsInstalledButNotConfigured}
173+
noGitOpsModuleInstalledAndConfigured={noGitOpsModuleInstalledAndConfigured}
174+
deploymentAppType={deploymentAppType ?? DeploymentAppTypes.HELM}
175+
handleChange={handleDeploymentAppTypeChange}
176+
allowedDeploymentTypes={selectedEnvironment?.allowedDeploymentTypes}
177+
rootClassName="chartrepo-type__radio-group"
178+
isDisabled={isFormDisabled}
179+
isGitOpsRepoNotConfigured={isGitOpsRepoNotConfigured}
180+
gitOpsRepoConfigInfoBar={gitOpsRepoConfigInfoBar}
181+
areGitopsCredentialsConfigured={!isGitOpsInstalledButNotConfigured}
182+
/>
191183
</div>
192184
</div>
193185
)

src/Pages/App/Configurations/WorkflowEditor/CreateCICDPipeline/CIStepperContent.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ import { createWebhookConditionList } from '@Components/ciPipeline/ciPipeline.se
1212
import { ValidationRules } from '@Components/ciPipeline/validationRules'
1313

1414
import { SourceMaterialsSelector } from '../SourceMaterialsSelector'
15+
import { getSelectedWebhookEvent } from '../utils'
1516
import { ConfigureWebhookWrapper } from './ConfigureWebhookWrapper'
1617
import { CIStepperContentProps } from './types'
17-
import { getBranchValue, getMenuListFooterConfig, getSelectedMaterial, getSelectedWebhookEvent } from './utils'
18+
import { getBranchValue, getMenuListFooterConfig, getSelectedMaterial } from './utils'
1819

1920
const validationRules = new ValidationRules()
2021

src/Pages/App/Configurations/WorkflowEditor/CreateCICDPipeline/CreateCICDPipeline.tsx

Lines changed: 12 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,12 @@ import {
1818

1919
import { saveCIPipeline } from '@Components/ciPipeline/ciPipeline.service'
2020
import { CIPipelineBuildType } from '@Components/ciPipeline/types'
21-
import {
22-
gitOpsRepoNotConfigured,
23-
gitOpsRepoNotConfiguredWithEnforcedEnv,
24-
gitOpsRepoNotConfiguredWithOptionsHidden,
25-
} from '@Components/gitOps/constants'
2621
import { getConfigureGitOpsCredentialsButtonProps } from '@Components/workflowEditor/ConfigureGitopsInfoBlock'
2722
import NoGitOpsRepoConfiguredWarning, {
2823
ReloadNoGitOpsRepoConfiguredModal,
2924
} from '@Components/workflowEditor/NoGitOpsRepoConfiguredWarning'
3025

26+
import { checkForGitOpsRepoNotConfigured } from '../utils'
3127
import { CDStepperContent } from './CDStepperContent'
3228
import { CICDStepper } from './CICDStepper'
3329
import { CIStepperContent } from './CIStepperContent'
@@ -105,47 +101,6 @@ export const CreateCICDPipeline = ({
105101
setGitOpsRepoConfiguredWarning({ show: false, text: '' })
106102
}
107103

108-
const checkForGitOpsRepoNotConfigured = () => {
109-
const isHelmEnforced =
110-
selectedEnvironment?.allowedDeploymentTypes?.length === 1 &&
111-
selectedEnvironment.allowedDeploymentTypes[0] === DeploymentAppTypes.HELM
112-
113-
const gitOpsRepoNotConfiguredAndOptionsHidden =
114-
window._env_.HIDE_GITOPS_OR_HELM_OPTION &&
115-
!noGitOpsModuleInstalledAndConfigured &&
116-
!isHelmEnforced &&
117-
isGitOpsRepoNotConfigured
118-
119-
if (gitOpsRepoNotConfiguredAndOptionsHidden) {
120-
setGitOpsRepoConfiguredWarning({ show: true, text: gitOpsRepoNotConfiguredWithOptionsHidden })
121-
}
122-
123-
const isGitOpsRepoNotConfiguredAndOptionsVisible =
124-
deploymentAppType === DeploymentAppTypes.GITOPS &&
125-
isGitOpsRepoNotConfigured &&
126-
!window._env_.HIDE_GITOPS_OR_HELM_OPTION
127-
128-
const isGitOpsRepoNotConfiguredAndGitopsEnforced =
129-
isGitOpsRepoNotConfiguredAndOptionsVisible && selectedEnvironment?.allowedDeploymentTypes?.length === 1
130-
131-
if (isGitOpsRepoNotConfiguredAndOptionsVisible) {
132-
setGitOpsRepoConfiguredWarning({ show: true, text: gitOpsRepoNotConfigured })
133-
}
134-
135-
if (isGitOpsRepoNotConfiguredAndGitopsEnforced) {
136-
setGitOpsRepoConfiguredWarning({
137-
show: true,
138-
text: gitOpsRepoNotConfiguredWithEnforcedEnv(selectedEnvironment.name),
139-
})
140-
}
141-
142-
return (
143-
gitOpsRepoNotConfiguredAndOptionsHidden ||
144-
isGitOpsRepoNotConfiguredAndGitopsEnforced ||
145-
isGitOpsRepoNotConfiguredAndOptionsVisible
146-
)
147-
}
148-
149104
const createWorkflow = async ({ shouldCreateCINode }: { shouldCreateCINode: boolean }) => {
150105
if (shouldCreateCINode) {
151106
const scanValidation = !window._env_.FORCE_SECURITY_SCANNING || !isSecurityModuleInstalled || scanEnabled
@@ -171,7 +126,17 @@ export const CreateCICDPipeline = ({
171126
return
172127
}
173128

174-
if (checkForGitOpsRepoNotConfigured()) {
129+
if (
130+
checkForGitOpsRepoNotConfigured({
131+
allowedDeploymentTypes: selectedEnvironment?.allowedDeploymentTypes,
132+
deploymentAppType: deploymentAppType as DeploymentAppTypes,
133+
environmentName: selectedEnvironment?.name,
134+
isGitOpsRepoNotConfigured,
135+
isTemplateView,
136+
noGitOpsModuleInstalledAndConfigured,
137+
setGitOpsRepoConfiguredWarning,
138+
})
139+
) {
175140
return
176141
}
177142

src/Pages/App/Configurations/WorkflowEditor/CreateCICDPipeline/utils.tsx

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,6 @@ export const getCiCdPipelineDefaultState = (): CreateCICDPipelineData => ({
7070

7171
export const getCiCdPipelineFormErrorDefaultState = (): CreateCICDPipelineFormError => ({ ci: {}, cd: {} })
7272

73-
export const getSelectedWebhookEvent = (
74-
material: MaterialType,
75-
webhookEvents: CreateCICDPipelineData['ci']['webhookEvents'],
76-
) => {
77-
const selectedEventId = JSON.parse(material.value)?.eventId
78-
return selectedEventId ? webhookEvents.find(({ id }) => id === selectedEventId) : null
79-
}
80-
8173
export const getSelectedMaterial = ({
8274
type,
8375
selectedWebhookEvent,
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1+
export * from './CDPipelineDeploymentAppType'
12
export * from './CreateCICDPipeline'
23
export * from './SourceMaterialsSelector'
4+
export * from './utils'
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import { Dispatch, SetStateAction } from 'react'
2+
3+
import { DeploymentAppTypes, MaterialType, PipelineFormType } from '@devtron-labs/devtron-fe-common-lib'
4+
5+
const gitOpsRepoNotConfiguredWithOptionsHidden =
6+
'Deployment via GitOps requires a repository to save deployment manifests. Please configure and try again.'
7+
8+
const gitOpsRepoNotConfigured =
9+
'GitOps repository is required to deploy using GitOps. You can deploy using helm or configure GitOps repository and try again.'
10+
11+
export const gitOpsRepoNotConfiguredWithEnforcedEnv = (env: string): string =>
12+
`Deployment to ‘${env}’ requires a GitOps repository. Please configure and try again.`
13+
14+
export const checkForGitOpsRepoNotConfigured = ({
15+
allowedDeploymentTypes,
16+
noGitOpsModuleInstalledAndConfigured,
17+
isGitOpsRepoNotConfigured,
18+
deploymentAppType,
19+
environmentName,
20+
isTemplateView,
21+
setGitOpsRepoConfiguredWarning,
22+
}: {
23+
deploymentAppType: DeploymentAppTypes
24+
allowedDeploymentTypes: DeploymentAppTypes[]
25+
noGitOpsModuleInstalledAndConfigured: boolean
26+
isGitOpsRepoNotConfigured: boolean
27+
environmentName: string
28+
isTemplateView: boolean
29+
setGitOpsRepoConfiguredWarning: Dispatch<SetStateAction<{ show: boolean; text: string }>>
30+
}) => {
31+
const isHelmEnforced = allowedDeploymentTypes?.length === 1 && allowedDeploymentTypes[0] === DeploymentAppTypes.HELM
32+
33+
const gitOpsRepoNotConfiguredAndOptionsHidden =
34+
window._env_.HIDE_GITOPS_OR_HELM_OPTION &&
35+
!noGitOpsModuleInstalledAndConfigured &&
36+
!isHelmEnforced &&
37+
isGitOpsRepoNotConfigured
38+
39+
if (gitOpsRepoNotConfiguredAndOptionsHidden) {
40+
setGitOpsRepoConfiguredWarning({ show: true, text: gitOpsRepoNotConfiguredWithOptionsHidden })
41+
}
42+
43+
const isGitOpsRepoNotConfiguredAndOptionsVisible =
44+
deploymentAppType === DeploymentAppTypes.GITOPS &&
45+
isGitOpsRepoNotConfigured &&
46+
!window._env_.HIDE_GITOPS_OR_HELM_OPTION
47+
48+
const isGitOpsRepoNotConfiguredAndGitopsEnforced =
49+
isGitOpsRepoNotConfiguredAndOptionsVisible && allowedDeploymentTypes?.length === 1
50+
51+
if (!isTemplateView) {
52+
if (isGitOpsRepoNotConfiguredAndOptionsVisible) {
53+
setGitOpsRepoConfiguredWarning({ show: true, text: gitOpsRepoNotConfigured })
54+
}
55+
if (isGitOpsRepoNotConfiguredAndGitopsEnforced) {
56+
setGitOpsRepoConfiguredWarning({
57+
show: true,
58+
text: gitOpsRepoNotConfiguredWithEnforcedEnv(environmentName),
59+
})
60+
}
61+
62+
return (
63+
gitOpsRepoNotConfiguredAndOptionsHidden ||
64+
isGitOpsRepoNotConfiguredAndGitopsEnforced ||
65+
isGitOpsRepoNotConfiguredAndOptionsVisible
66+
)
67+
}
68+
69+
return false
70+
}
71+
72+
export const getSelectedWebhookEvent = (material: MaterialType, webhookEvents: PipelineFormType['webhookEvents']) => {
73+
try {
74+
const selectedEventId = JSON.parse(material.value)?.eventId
75+
return selectedEventId ? webhookEvents.find(({ id }) => id === selectedEventId) : null
76+
} catch {
77+
return null
78+
}
79+
}

src/components/CIPipelineN/Build.tsx

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import { BuildType, WebhookCIProps } from '../ciPipeline/types'
3030
import { ReactComponent as BugScanner } from '../../assets/icons/scanner.svg'
3131
import AdvancedConfigOptions from './AdvancedConfigOptions'
3232
import { pipelineContext } from '../workflowEditor/workflowEditor'
33+
import { getSelectedWebhookEvent } from '@Pages/App/Configurations'
3334

3435
export const Build = ({
3536
isAdvanced,
@@ -129,11 +130,6 @@ export const Build = ({
129130
setFormData(_formData)
130131
getPluginData(_formData)
131132
}
132-
const getSelectedWebhookEvent = (material) => {
133-
const _materialValue = JSON.parse(material.value)
134-
const _selectedEventId = _materialValue?.eventId
135-
return _selectedEventId && formData.webhookEvents.find((we) => we.id === _selectedEventId)
136-
}
137133

138134
const addWebhookCondition = (): void => {
139135
const _form = { ...formData }
@@ -172,7 +168,7 @@ export const Build = ({
172168
const _webhookData: WebhookCIProps = {
173169
webhookConditionList: formData.webhookConditionList,
174170
gitHost: formData.gitHost,
175-
getSelectedWebhookEvent,
171+
getSelectedWebhookEvent: (material) => getSelectedWebhookEvent(material, formData.webhookEvents),
176172
addWebhookCondition,
177173
deleteWebhookCondition,
178174
onWebhookConditionSelectorChange,

0 commit comments

Comments
 (0)