@@ -21,6 +21,7 @@ import (
2121 bean2 "github.com/devtron-labs/devtron/api/bean"
2222 "github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig"
2323 "github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig/bean/workflow/cdWorkflow"
24+ bean4 "github.com/devtron-labs/devtron/pkg/app/bean"
2425 "github.com/devtron-labs/devtron/pkg/deployment/trigger/devtronApps/bean"
2526 bean3 "github.com/devtron-labs/devtron/pkg/pipeline/bean"
2627 repository3 "github.com/devtron-labs/devtron/pkg/pipeline/history/repository"
@@ -29,9 +30,9 @@ import (
2930 "time"
3031)
3132
32- func (impl * TriggerServiceImpl ) TriggerPostStage (request bean.TriggerRequest ) error {
33+ func (impl * TriggerServiceImpl ) TriggerPostStage (request bean.TriggerRequest ) ( * bean4. ManifestPushTemplate , error ) {
3334 request .WorkflowType = bean2 .CD_WORKFLOW_TYPE_POST
34- //setting triggeredAt variable to have consistent data for various audit log places in db for deployment time
35+ // setting triggeredAt variable to have consistent data for various audit log places in db for deployment time
3536 triggeredAt := time .Now ()
3637 triggeredBy := request .TriggeredBy
3738 pipeline := request .Pipeline
@@ -40,21 +41,23 @@ func (impl *TriggerServiceImpl) TriggerPostStage(request bean.TriggerRequest) er
4041 env , namespace , err := impl .getEnvAndNsIfRunStageInEnv (ctx , request )
4142 if err != nil {
4243 impl .logger .Errorw ("error, getEnvAndNsIfRunStageInEnv" , "err" , err , "pipeline" , pipeline , "stage" , request .WorkflowType )
43- return nil
44+ return nil , nil
4445 }
4546 request .RunStageInEnvNamespace = namespace
47+
4648 cdWf , runner , err := impl .createStartingWfAndRunner (request , triggeredAt )
4749 if err != nil {
4850 impl .logger .Errorw ("error in creating wf starting and runner entry" , "err" , err , "request" , request )
49- return err
51+ return nil , err
5052 }
5153 if cdWf .CiArtifact == nil || cdWf .CiArtifact .Id == 0 {
5254 cdWf .CiArtifact , err = impl .ciArtifactRepository .Get (cdWf .CiArtifactId )
5355 if err != nil {
5456 impl .logger .Errorw ("error fetching artifact data" , "err" , err )
55- return err
57+ return nil , err
5658 }
5759 }
60+
5861 // Migration of deprecated DataSource Type
5962 if cdWf .CiArtifact .IsMigrationRequired () {
6063 migrationErr := impl .ciArtifactRepository .MigrateToWebHookDataSourceType (cdWf .CiArtifact .Id )
@@ -63,24 +66,43 @@ func (impl *TriggerServiceImpl) TriggerPostStage(request bean.TriggerRequest) er
6366 }
6467 }
6568
69+ filterEvaluationAudit , err := impl .checkFeasibilityForPostStage (pipeline , & request , env , cdWf , triggeredBy )
70+ if err != nil {
71+ impl .logger .Errorw ("error, checkFeasibilityForPostStage" , "err" , err , "pipeline" , pipeline )
72+ return nil , nil
73+ }
74+
6675 envDevploymentConfig , err := impl .deploymentConfigService .GetAndMigrateConfigIfAbsentForDevtronApps (pipeline .AppId , pipeline .EnvironmentId )
6776 if err != nil {
6877 impl .logger .Errorw ("error in fetching deployment config by appId and envId" , "appId" , pipeline .AppId , "envId" , pipeline .EnvironmentId , "err" , err )
69- return err
78+ return nil , err
79+ }
80+
81+ dbErr := impl .createAuditDataForDeploymentWindowBypass (request , runner .Id )
82+ if dbErr != nil {
83+ impl .logger .Errorw ("error in creating audit data for deployment window bypass" , "runnerId" , runner .Id , "err" , dbErr )
84+ // skip error for audit data creation
85+ }
86+
87+ err = impl .handlerFilterEvaluationAudit (filterEvaluationAudit , runner )
88+ if err != nil {
89+ impl .logger .Errorw ("error, handlerFilterEvaluationAudit" , "err" , err )
90+ return nil , err
7091 }
7192
7293 // custom GitOps repo url validation --> Start
7394 err = impl .handleCustomGitOpsRepoValidation (runner , pipeline , envDevploymentConfig , triggeredBy )
7495 if err != nil {
7596 impl .logger .Errorw ("custom GitOps repository validation error, TriggerPreStage" , "err" , err )
76- return err
97+ return nil , err
7798 }
7899 // custom GitOps repo url validation --> Ends
79100
101+ // checking vulnerability for the selected image
80102 err = impl .checkVulnerabilityStatusAndFailWfIfNeeded (ctx , cdWf .CiArtifact , pipeline , runner , triggeredBy )
81103 if err != nil {
82104 impl .logger .Errorw ("error, checkVulnerabilityStatusAndFailWfIfNeeded" , "err" , err , "runner" , runner )
83- return err
105+ return nil , err
84106 }
85107 cdStageWorkflowRequest , err := impl .buildWFRequest (runner , cdWf , pipeline , envDevploymentConfig , triggeredBy )
86108 if err != nil {
@@ -97,19 +119,23 @@ func (impl *TriggerServiceImpl) TriggerPostStage(request bean.TriggerRequest) er
97119 runner .Status = cdWorkflow .WorkflowFailed
98120 runner .Message = err .Error ()
99121 _ = impl .cdWorkflowRepository .UpdateWorkFlowRunner (runner )
100- return err
122+ return nil , err
101123 }
102124
103- _ , err = impl .cdWorkflowService .SubmitWorkflow (cdStageWorkflowRequest )
125+ _ , jobHelmPackagePath , err : = impl .cdWorkflowService .SubmitWorkflow (cdStageWorkflowRequest )
104126 if err != nil {
105127 impl .logger .Errorw ("error in submitting workflow" , "err" , err , "workflowId" , cdStageWorkflowRequest .WorkflowId , "pipeline" , pipeline , "env" , env )
106- return err
128+ return nil , err
129+ }
130+ manifestPushTempate , err := impl .getManifestPushTemplateForPostStage (request , envDevploymentConfig , jobHelmPackagePath , cdStageWorkflowRequest , cdWf , runner , pipeline , triggeredBy , triggeredAt )
131+ if err != nil {
132+ impl .logger .Errorw ("error in getting manifest push template" , "err" , err )
133+ return nil , err
107134 }
108-
109135 wfr , err := impl .cdWorkflowRepository .FindByWorkflowIdAndRunnerType (context .Background (), cdWf .Id , bean2 .CD_WORKFLOW_TYPE_POST )
110136 if err != nil {
111137 impl .logger .Errorw ("error in getting wfr by workflowId and runnerType" , "err" , err , "wfId" , cdWf .Id )
112- return err
138+ return nil , err
113139 }
114140 wfr .ImagePathReservationIds = pluginImagePathReservationIds
115141 err = impl .cdWorkflowRepository .UpdateWorkFlowRunner (& wfr )
@@ -124,19 +150,19 @@ func (impl *TriggerServiceImpl) TriggerPostStage(request bean.TriggerRequest) er
124150 if evtErr != nil {
125151 impl .logger .Errorw ("CD trigger event not sent" , "error" , evtErr )
126152 }
127- //creating cd config history entry
153+ // creating cd config history entry
128154 err = impl .prePostCdScriptHistoryService .CreatePrePostCdScriptHistory (pipeline , nil , repository3 .POST_CD_TYPE , true , triggeredBy , triggeredAt )
129155 if err != nil {
130156 impl .logger .Errorw ("error in creating post cd script entry" , "err" , err , "pipeline" , pipeline )
131- return err
157+ return nil , err
132158 }
133- return nil
159+ return manifestPushTempate , nil
134160}
135161
136- func (impl * TriggerServiceImpl ) buildWfRequestErrorHandler (runner * pipelineConfig.CdWorkflowRunner , err error , triggeredBy int32 ) error {
162+ func (impl * TriggerServiceImpl ) buildWfRequestErrorHandler (runner * pipelineConfig.CdWorkflowRunner , err error , triggeredBy int32 ) ( * bean4. ManifestPushTemplate , error ) {
137163 dbErr := impl .cdWorkflowCommonService .MarkCurrentDeploymentFailed (runner , err , triggeredBy )
138164 if dbErr != nil {
139165 impl .logger .Errorw ("error while updating current runner status to failed, buildWfRequestErrorHandler" , "runner" , runner .Id , "err" , dbErr , "releaseErr" , err )
140166 }
141- return err
167+ return nil , err
142168}
0 commit comments