Skip to content

Commit fc01f62

Browse files
authored
Merge pull request #6338 from devtron-labs/pre-cd-fix
fix: Auto trigger even if pre-cd fails
2 parents d5ba44f + 9746989 commit fc01f62

File tree

2 files changed

+43
-28
lines changed

2 files changed

+43
-28
lines changed

pkg/eventProcessor/bean/workflowEventBean.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ type CdStageCompleteEvent struct {
4040
PluginRegistryArtifactDetails map[string][]string `json:"PluginRegistryArtifactDetails"`
4141
PluginArtifacts *PluginArtifacts `json:"pluginArtifacts"`
4242
IsArtifactUploaded bool `json:"isArtifactUploaded"`
43+
IsFailed bool `json:"isFailed"`
4344
}
4445

4546
type UserDeploymentRequest struct {

pkg/eventProcessor/in/WorkflowEventProcessorService.go

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -170,47 +170,30 @@ func (impl *WorkflowEventProcessorImpl) SubscribeCDStageCompleteEvent() error {
170170
return
171171
}
172172
wfr.IsArtifactUploaded = cdStageCompleteEvent.IsArtifactUploaded
173-
if wfr.Status != string(v1alpha1.NodeSucceeded) {
173+
if !slices.Contains(cdWorkflowModelBean.WfrTerminalStatusList, wfr.Status) {
174174
impl.logger.Debugw("event received from ci runner, updating workflow runner status as succeeded", "savedWorkflowRunnerId", wfr.Id, "oldStatus", wfr.Status, "podStatus", wfr.PodStatus)
175-
wfr.Status = string(v1alpha1.NodeSucceeded)
175+
if cdStageCompleteEvent.IsFailed {
176+
wfr.Status = string(v1alpha1.NodeFailed)
177+
} else {
178+
wfr.Status = string(v1alpha1.NodeSucceeded)
179+
}
176180
err = impl.cdWorkflowRunnerService.UpdateWfr(wfr, 1)
177181
if err != nil {
178182
impl.logger.Errorw("update cd-wf-runner failed for id ", "cdWfrId", wfr.Id, "err", err)
179183
return
180184
}
185+
186+
triggerContext := triggerBean.TriggerContext{
187+
ReferenceId: pointer.String(msg.MsgId),
188+
}
189+
impl.handleCDStageCompleteEvent(triggerContext, cdStageCompleteEvent, wfr)
181190
} else {
182191
err = impl.cdWorkflowRunnerService.UpdateIsArtifactUploaded(wfr.Id, cdStageCompleteEvent.IsArtifactUploaded)
183192
if err != nil {
184193
impl.logger.Errorw("error in updating isArtifactUploaded", "cdWfrId", wfr.Id, "err", err)
185194
return
186195
}
187196
}
188-
189-
triggerContext := triggerBean.TriggerContext{
190-
ReferenceId: pointer.String(msg.MsgId),
191-
}
192-
if wfr.WorkflowType == apiBean.CD_WORKFLOW_TYPE_PRE {
193-
impl.logger.Debugw("received pre stage success event for workflow runner ", "wfId", strconv.Itoa(wfr.Id))
194-
err = impl.workflowDagExecutor.HandlePreStageSuccessEvent(triggerContext, cdStageCompleteEvent)
195-
if err != nil {
196-
impl.logger.Errorw("deployment success event error", "err", err)
197-
return
198-
}
199-
} else if wfr.WorkflowType == apiBean.CD_WORKFLOW_TYPE_POST {
200-
201-
pluginArtifacts := make(map[string][]string)
202-
if cdStageCompleteEvent.PluginArtifacts != nil {
203-
pluginArtifacts = cdStageCompleteEvent.PluginArtifacts.GetRegistryToUniqueContainerArtifactDataMapping()
204-
}
205-
globalUtil.MergeMaps(pluginArtifacts, cdStageCompleteEvent.PluginRegistryArtifactDetails)
206-
207-
impl.logger.Debugw("received post stage success event for workflow runner ", "wfId", strconv.Itoa(wfr.Id))
208-
err = impl.workflowDagExecutor.HandlePostStageSuccessEvent(triggerContext, wfr, wfr.CdWorkflowId, cdStageCompleteEvent.CdPipelineId, cdStageCompleteEvent.TriggeredBy, pluginArtifacts)
209-
if err != nil {
210-
impl.logger.Errorw("deployment success event error", "err", err)
211-
return
212-
}
213-
}
214197
}
215198

216199
// add required logging here
@@ -233,6 +216,37 @@ func (impl *WorkflowEventProcessorImpl) SubscribeCDStageCompleteEvent() error {
233216
return nil
234217
}
235218

219+
func (impl *WorkflowEventProcessorImpl) handleCDStageCompleteEvent(triggerContext triggerBean.TriggerContext, cdStageCompleteEvent bean.CdStageCompleteEvent, wfr *cdWorkflowBean.CdWorkflowRunnerDto) {
220+
if cdStageCompleteEvent.IsFailed {
221+
impl.logger.Debugw("event received from ci runner, updating workflow runner status as failed, not taking any action", "savedWorkflowRunnerId", wfr.Id, "oldStatus", wfr.Status, "podStatus", wfr.PodStatus)
222+
return
223+
}
224+
225+
var err error
226+
if wfr.WorkflowType == apiBean.CD_WORKFLOW_TYPE_PRE {
227+
impl.logger.Debugw("received pre stage success event for workflow runner ", "wfId", strconv.Itoa(wfr.Id))
228+
err = impl.workflowDagExecutor.HandlePreStageSuccessEvent(triggerContext, cdStageCompleteEvent)
229+
if err != nil {
230+
impl.logger.Errorw("deployment success event error", "err", err)
231+
return
232+
}
233+
} else if wfr.WorkflowType == apiBean.CD_WORKFLOW_TYPE_POST {
234+
impl.logger.Debugw("received post stage success event for workflow runner ", "wfId", strconv.Itoa(wfr.Id))
235+
236+
pluginArtifacts := make(map[string][]string)
237+
if cdStageCompleteEvent.PluginArtifacts != nil {
238+
pluginArtifacts = cdStageCompleteEvent.PluginArtifacts.GetRegistryToUniqueContainerArtifactDataMapping()
239+
}
240+
globalUtil.MergeMaps(pluginArtifacts, cdStageCompleteEvent.PluginRegistryArtifactDetails)
241+
242+
err = impl.workflowDagExecutor.HandlePostStageSuccessEvent(triggerContext, wfr, wfr.CdWorkflowId, cdStageCompleteEvent.CdPipelineId, cdStageCompleteEvent.TriggeredBy, pluginArtifacts)
243+
if err != nil {
244+
impl.logger.Errorw("deployment success event error", "err", err)
245+
return
246+
}
247+
}
248+
}
249+
236250
func (impl *WorkflowEventProcessorImpl) SubscribeTriggerBulkAction() error {
237251
callback := func(msg *model.PubSubMsg) {
238252
cdWorkflow := new(pipelineConfig.CdWorkflow)

0 commit comments

Comments
 (0)