@@ -21,6 +21,7 @@ import (
21
21
bean2 "github.com/devtron-labs/devtron/api/bean"
22
22
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig"
23
23
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig/bean/workflow/cdWorkflow"
24
+ bean4 "github.com/devtron-labs/devtron/pkg/app/bean"
24
25
"github.com/devtron-labs/devtron/pkg/deployment/trigger/devtronApps/bean"
25
26
bean3 "github.com/devtron-labs/devtron/pkg/pipeline/bean"
26
27
repository3 "github.com/devtron-labs/devtron/pkg/pipeline/history/repository"
@@ -29,9 +30,9 @@ import (
29
30
"time"
30
31
)
31
32
32
- func (impl * TriggerServiceImpl ) TriggerPostStage (request bean.TriggerRequest ) error {
33
+ func (impl * TriggerServiceImpl ) TriggerPostStage (request bean.TriggerRequest ) ( * bean4. ManifestPushTemplate , error ) {
33
34
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
35
36
triggeredAt := time .Now ()
36
37
triggeredBy := request .TriggeredBy
37
38
pipeline := request .Pipeline
@@ -40,21 +41,23 @@ func (impl *TriggerServiceImpl) TriggerPostStage(request bean.TriggerRequest) er
40
41
env , namespace , err := impl .getEnvAndNsIfRunStageInEnv (ctx , request )
41
42
if err != nil {
42
43
impl .logger .Errorw ("error, getEnvAndNsIfRunStageInEnv" , "err" , err , "pipeline" , pipeline , "stage" , request .WorkflowType )
43
- return nil
44
+ return nil , nil
44
45
}
45
46
request .RunStageInEnvNamespace = namespace
47
+
46
48
cdWf , runner , err := impl .createStartingWfAndRunner (request , triggeredAt )
47
49
if err != nil {
48
50
impl .logger .Errorw ("error in creating wf starting and runner entry" , "err" , err , "request" , request )
49
- return err
51
+ return nil , err
50
52
}
51
53
if cdWf .CiArtifact == nil || cdWf .CiArtifact .Id == 0 {
52
54
cdWf .CiArtifact , err = impl .ciArtifactRepository .Get (cdWf .CiArtifactId )
53
55
if err != nil {
54
56
impl .logger .Errorw ("error fetching artifact data" , "err" , err )
55
- return err
57
+ return nil , err
56
58
}
57
59
}
60
+
58
61
// Migration of deprecated DataSource Type
59
62
if cdWf .CiArtifact .IsMigrationRequired () {
60
63
migrationErr := impl .ciArtifactRepository .MigrateToWebHookDataSourceType (cdWf .CiArtifact .Id )
@@ -63,24 +66,43 @@ func (impl *TriggerServiceImpl) TriggerPostStage(request bean.TriggerRequest) er
63
66
}
64
67
}
65
68
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
+
66
75
envDevploymentConfig , err := impl .deploymentConfigService .GetAndMigrateConfigIfAbsentForDevtronApps (pipeline .AppId , pipeline .EnvironmentId )
67
76
if err != nil {
68
77
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
70
91
}
71
92
72
93
// custom GitOps repo url validation --> Start
73
94
err = impl .handleCustomGitOpsRepoValidation (runner , pipeline , envDevploymentConfig , triggeredBy )
74
95
if err != nil {
75
96
impl .logger .Errorw ("custom GitOps repository validation error, TriggerPreStage" , "err" , err )
76
- return err
97
+ return nil , err
77
98
}
78
99
// custom GitOps repo url validation --> Ends
79
100
101
+ // checking vulnerability for the selected image
80
102
err = impl .checkVulnerabilityStatusAndFailWfIfNeeded (ctx , cdWf .CiArtifact , pipeline , runner , triggeredBy )
81
103
if err != nil {
82
104
impl .logger .Errorw ("error, checkVulnerabilityStatusAndFailWfIfNeeded" , "err" , err , "runner" , runner )
83
- return err
105
+ return nil , err
84
106
}
85
107
cdStageWorkflowRequest , err := impl .buildWFRequest (runner , cdWf , pipeline , envDevploymentConfig , triggeredBy )
86
108
if err != nil {
@@ -97,19 +119,23 @@ func (impl *TriggerServiceImpl) TriggerPostStage(request bean.TriggerRequest) er
97
119
runner .Status = cdWorkflow .WorkflowFailed
98
120
runner .Message = err .Error ()
99
121
_ = impl .cdWorkflowRepository .UpdateWorkFlowRunner (runner )
100
- return err
122
+ return nil , err
101
123
}
102
124
103
- _ , err = impl .cdWorkflowService .SubmitWorkflow (cdStageWorkflowRequest )
125
+ _ , jobHelmPackagePath , err : = impl .cdWorkflowService .SubmitWorkflow (cdStageWorkflowRequest )
104
126
if err != nil {
105
127
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
107
134
}
108
-
109
135
wfr , err := impl .cdWorkflowRepository .FindByWorkflowIdAndRunnerType (context .Background (), cdWf .Id , bean2 .CD_WORKFLOW_TYPE_POST )
110
136
if err != nil {
111
137
impl .logger .Errorw ("error in getting wfr by workflowId and runnerType" , "err" , err , "wfId" , cdWf .Id )
112
- return err
138
+ return nil , err
113
139
}
114
140
wfr .ImagePathReservationIds = pluginImagePathReservationIds
115
141
err = impl .cdWorkflowRepository .UpdateWorkFlowRunner (& wfr )
@@ -124,19 +150,19 @@ func (impl *TriggerServiceImpl) TriggerPostStage(request bean.TriggerRequest) er
124
150
if evtErr != nil {
125
151
impl .logger .Errorw ("CD trigger event not sent" , "error" , evtErr )
126
152
}
127
- //creating cd config history entry
153
+ // creating cd config history entry
128
154
err = impl .prePostCdScriptHistoryService .CreatePrePostCdScriptHistory (pipeline , nil , repository3 .POST_CD_TYPE , true , triggeredBy , triggeredAt )
129
155
if err != nil {
130
156
impl .logger .Errorw ("error in creating post cd script entry" , "err" , err , "pipeline" , pipeline )
131
- return err
157
+ return nil , err
132
158
}
133
- return nil
159
+ return manifestPushTempate , nil
134
160
}
135
161
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 ) {
137
163
dbErr := impl .cdWorkflowCommonService .MarkCurrentDeploymentFailed (runner , err , triggeredBy )
138
164
if dbErr != nil {
139
165
impl .logger .Errorw ("error while updating current runner status to failed, buildWfRequestErrorHandler" , "runner" , runner .Id , "err" , dbErr , "releaseErr" , err )
140
166
}
141
- return err
167
+ return nil , err
142
168
}
0 commit comments