Skip to content

Commit 93f21db

Browse files
authored
Merge branch 'main' into cluster-terminal-enhancement
2 parents e5fed32 + 13a5a84 commit 93f21db

File tree

14 files changed

+209
-142
lines changed

14 files changed

+209
-142
lines changed

nginx-default.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
server {
2-
listen 80;
2+
listen 8080;
33
root /usr/share/nginx/html;
44
index index.html index.htm;
55

src/components/ApplicationGroup/Details/TriggerView/EnvTriggerView.tsx

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,14 @@ import {
6363
AppGroupDetailDefaultType,
6464
BulkCDDetailType,
6565
BulkCIDetailType,
66+
ProcessWorkFlowStatusType,
6667
ResponseRowType,
6768
WorkflowAppSelectionType,
6869
WorkflowNodeSelectionType,
6970
} from '../../AppGroup.types'
7071
import { handleSourceNotConfigured, processWorkflowStatuses } from '../../AppGroup.utils'
7172
import Tippy from '@tippyjs/react'
7273

73-
let timerRef
7474
let inprogressStatusTimer
7575
export default function EnvTriggerView({ filteredApps }: AppGroupDetailDefaultType) {
7676
const { envId } = useParams<{ envId: string }>()
@@ -131,17 +131,23 @@ export default function EnvTriggerView({ filteredApps }: AppGroupDetailDefaultTy
131131
setErrorCode(0)
132132
setPageViewType(ViewType.FORM)
133133
getWorkflowStatusData(_workflows)
134-
timerRef && clearInterval(timerRef)
135-
timerRef = setInterval(() => {
136-
getWorkflowStatusData(_workflows)
137-
}, 30000)
138134
} catch (error) {
139135
showError(error)
140136
setErrorCode(error['code'])
141137
setPageViewType(ViewType.ERROR)
142138
}
143139
}
144140

141+
const pollWorkflowStatus = (_processedWorkflowsData: ProcessWorkFlowStatusType) => {
142+
inprogressStatusTimer && clearTimeout(inprogressStatusTimer)
143+
inprogressStatusTimer = setTimeout(
144+
() => {
145+
getWorkflowStatusData(_processedWorkflowsData.workflows)
146+
},
147+
_processedWorkflowsData.cicdInProgress ? 10000 : 30000,
148+
)
149+
}
150+
145151
const getWorkflowStatusData = (workflowsList: WorkflowType[]) => {
146152
getWorkflowStatus(envId)
147153
.then((response) => {
@@ -150,16 +156,13 @@ export default function EnvTriggerView({ filteredApps }: AppGroupDetailDefaultTy
150156
response?.result?.cdWorkflowStatus ?? [],
151157
workflowsList,
152158
)
153-
inprogressStatusTimer && clearTimeout(inprogressStatusTimer)
154-
if (_processedWorkflowsData.cicdInProgress) {
155-
inprogressStatusTimer = setTimeout(() => {
156-
getWorkflowStatusData(_processedWorkflowsData.workflows)
157-
}, 10000)
158-
}
159+
pollWorkflowStatus(_processedWorkflowsData)
159160
setWorkflows(_processedWorkflowsData.workflows)
160161
})
161162
.catch((errors: ServerErrors) => {
162163
showError(errors)
164+
// If ci cd is in progress then call the api after every 10sec
165+
pollWorkflowStatus({cicdInProgress: true, workflows: workflowsList})
163166
})
164167
}
165168

@@ -170,7 +173,6 @@ export default function EnvTriggerView({ filteredApps }: AppGroupDetailDefaultTy
170173
getWorkflowsData()
171174
}
172175
return () => {
173-
timerRef && clearInterval(timerRef)
174176
inprogressStatusTimer && clearTimeout(inprogressStatusTimer)
175177
}
176178
}, [envId])

src/components/ApplicationGroup/List/EnvironmentsList.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ export default function EnvironmentsList({ isSuperAdmin }: AppGroupAdminType) {
194194

195195
return (
196196
<div>
197-
<PageHeader headerName="Application Groups" />
197+
<PageHeader headerName="Application Groups" markAsBeta={true}/>
198198
<div className="env-list bcn-0">
199199
<div className="flex dc__content-space pl-20 pr-20 pt-16 pb-16">
200200
{renderSearch()}

src/components/CIPipelineN/Build.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@ export function Build({
2929
setFormData,
3030
formDataErrorObj,
3131
setLoadingData,
32+
setFormDataErrorObj
3233
}: {
3334
formData: FormType
3435
setFormData: React.Dispatch<React.SetStateAction<FormType>>
3536
formDataErrorObj: FormErrorObjectType
3637
setLoadingData: React.Dispatch<React.SetStateAction<boolean>>
38+
setFormDataErrorObj:React.Dispatch<React.SetStateAction<FormErrorObjectType>>
3739
} = useContext(ciPipelineContext)
3840
const validationRules = new ValidationRules()
3941

@@ -188,6 +190,9 @@ export function Build({
188190
const _form = { ...formData }
189191
_form.name = event.target.value
190192
setFormData(_form)
193+
const _formDataErrorObj = { ...formDataErrorObj }
194+
_formDataErrorObj.name = validationRules.name(_form.name)
195+
setFormDataErrorObj(_formDataErrorObj)
191196
}
192197

193198
const renderPipelineName = () => {

src/components/CIPipelineN/CIPipeline.tsx

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import { Build } from './Build'
3737
import { ReactComponent as AlertTriangle } from '../../assets/icons/ic-alert-triangle.svg'
3838
import { getModuleInfo } from '../v2/devtronStackManager/DevtronStackManager.service'
3939
import { ModuleStatus } from '../v2/devtronStackManager/DevtronStackManager.type'
40+
import { MULTI_REQUIRED_FIELDS_MSG } from '../../config/constantMessaging'
4041

4142
export const ciPipelineContext = createContext(null)
4243

@@ -317,7 +318,6 @@ export default function CIPipeline({
317318
)
318319
}
319320
}
320-
321321
const checkUniqueness = (): boolean => {
322322
const list = formData.preBuildStage.steps.concat(formData.postBuildStage.steps)
323323
const stageNameList = list.map((taskData) => {
@@ -355,7 +355,6 @@ export default function CIPipeline({
355355
// Below code is to check if all the task name from pre-stage and post-stage is unique
356356
return stageNameList.length === new Set(stageNameList).size
357357
}
358-
359358
const savePipeline = () => {
360359
const isUnique = checkUniqueness()
361360
if (!isUnique) {
@@ -379,12 +378,17 @@ export default function CIPipeline({
379378
!formDataErrorObj.postBuildStage.isValid
380379
) {
381380
setLoadingData(false)
382-
toast.error('Some Required Fields are missing')
381+
const branchNameNotPresent = formData.materials.some((_mat) => !_mat.value)
382+
if (formData.name === '' || branchNameNotPresent) {
383+
toast.error(MULTI_REQUIRED_FIELDS_MSG)
384+
}
383385
return
384386
}
387+
385388
const msg = ciPipeline.id ? 'Pipeline Updated' : 'Pipeline Created'
386389

387390
// Reset allow override flag to false if config matches with global
391+
388392
if (!ciPipeline.isDockerConfigOverridden && !isDockerConfigOverridden) {
389393
formData.isDockerConfigOverridden = false
390394
formData.dockerConfigOverride = {} as DockerConfigOverrideType

src/components/CIPipelineN/TaskDetailComponent.tsx

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useState, useEffect, useContext } from 'react'
2-
import { ConfigurationType, ViewType } from '../../config'
2+
import { ConfigurationType, ViewType, BuildStageVariable } from '../../config'
33
import { Progressing, RadioGroup, showError } from '../common'
44
import {
55
ConditionContainerType,
@@ -106,12 +106,19 @@ export function TaskDetailComponent() {
106106
setFormDataErrorObj(_formErrorObject)
107107
setFormData(_formData)
108108
}
109+
109110
const handleDescriptionChange = (e: any): void => {
110111
const _formData = { ...formData }
111112
_formData[activeStageName].steps[selectedTaskIndex].description = e.target.value
112113
setFormData(_formData)
113114
}
114115

116+
const handleTriggerIfParentStageFailChange = (): void => {
117+
const _formData = { ...formData }
118+
_formData[activeStageName].steps[selectedTaskIndex].triggerIfParentStageFail = !_formData[activeStageName].steps[selectedTaskIndex].triggerIfParentStageFail
119+
setFormData(_formData)
120+
}
121+
115122
const handleEditorValueChange = (editorValue: string): void => {
116123
try {
117124
setEditorValue(editorValue)
@@ -190,6 +197,19 @@ export function TaskDetailComponent() {
190197
/>
191198
</div>
192199

200+
{
201+
activeStageName === BuildStageVariable.PostBuild &&
202+
<div className="row-container mb-12">
203+
<div className="fw-6 fs-13 lh-32 cn-7 ">Trigger even if build fails</div>
204+
<input
205+
type="checkbox"
206+
className="cursor icon-dim-16"
207+
checked={formData[activeStageName].steps[selectedTaskIndex].triggerIfParentStageFail}
208+
onChange={handleTriggerIfParentStageFailChange}
209+
/>
210+
</div>
211+
}
212+
193213
{formData[activeStageName].steps[selectedTaskIndex].stepType === PluginType.INLINE && (
194214
<div className="row-container mb-12">
195215
<div className="fw-6 fs-13 lh-32 cn-7 ">Task type</div>

0 commit comments

Comments
 (0)