Skip to content

Commit e537e28

Browse files
authored
Merge pull request #6320 from devtron-labs/build-worker-status
feat: separate build worker status timeline
2 parents ae42e7b + 361cab8 commit e537e28

36 files changed

+1431
-273
lines changed

Wire.go

+7
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ import (
155155
repository3 "github.com/devtron-labs/devtron/pkg/pipeline/history/repository"
156156
repository5 "github.com/devtron-labs/devtron/pkg/pipeline/repository"
157157
"github.com/devtron-labs/devtron/pkg/pipeline/types"
158+
"github.com/devtron-labs/devtron/pkg/pipeline/workflowStatus"
159+
repository6 "github.com/devtron-labs/devtron/pkg/pipeline/workflowStatus/repository"
158160
"github.com/devtron-labs/devtron/pkg/plugin"
159161
"github.com/devtron-labs/devtron/pkg/policyGovernance"
160162
resourceGroup2 "github.com/devtron-labs/devtron/pkg/resourceGroup"
@@ -471,6 +473,11 @@ func InitializeApp() (*App, error) {
471473
pipeline.NewCiServiceImpl,
472474
wire.Bind(new(pipeline.CiService), new(*pipeline.CiServiceImpl)),
473475

476+
workflowStatus.NewWorkflowStageFlowStatusServiceImpl,
477+
wire.Bind(new(workflowStatus.WorkFlowStageStatusService), new(*workflowStatus.WorkFlowStageStatusServiceImpl)),
478+
repository6.NewWorkflowStageRepositoryImpl,
479+
wire.Bind(new(repository6.WorkflowStageRepository), new(*repository6.WorkflowStageRepositoryImpl)),
480+
474481
pipelineConfig.NewCiWorkflowRepositoryImpl,
475482
wire.Bind(new(pipelineConfig.CiWorkflowRepository), new(*pipelineConfig.CiWorkflowRepositoryImpl)),
476483

api/restHandler/app/pipeline/configure/BuildPipelineRestHandler.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"github.com/devtron-labs/devtron/internal/sql/constants"
2626
"github.com/devtron-labs/devtron/pkg/build/artifacts/imageTagging"
2727
bean2 "github.com/devtron-labs/devtron/pkg/build/pipeline/bean"
28+
constants2 "github.com/devtron-labs/devtron/pkg/pipeline/constants"
2829
"github.com/devtron-labs/devtron/util/stringsUtil"
2930
"golang.org/x/exp/maps"
3031
"io"
@@ -45,7 +46,6 @@ import (
4546
"github.com/devtron-labs/devtron/internal/util"
4647
"github.com/devtron-labs/devtron/pkg/auth/authorisation/casbin"
4748
"github.com/devtron-labs/devtron/pkg/bean"
48-
"github.com/devtron-labs/devtron/pkg/pipeline"
4949
bean1 "github.com/devtron-labs/devtron/pkg/pipeline/bean"
5050
"github.com/devtron-labs/devtron/pkg/pipeline/types"
5151
resourceGroup "github.com/devtron-labs/devtron/pkg/resourceGroup"
@@ -663,7 +663,7 @@ func (handler *PipelineConfigRestHandlerImpl) validateCiTriggerRBAC(token string
663663
// This is being done for jobs, jobs execute in default-env (devtron-ci) namespace by default. so considering DefaultCiNamespace as env for rbac enforcement
664664
envName := ""
665665
if triggerEnvironmentId == 0 {
666-
envName = pipeline.DefaultCiWorkflowNamespace
666+
envName = constants2.DefaultCiWorkflowNamespace
667667
}
668668
appObject := handler.enforcerUtil.GetAppRBACNameByAppId(ciPipeline.AppId)
669669
workflowObject := handler.enforcerUtil.GetWorkflowRBACByCiPipelineId(ciPipelineId, workflowName)

env_gen.json

+1-1
Large diffs are not rendered by default.

env_gen.md

+1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
| DEFAULT_TARGET_PLATFORM | string | | | | false |
7777
| DOCKER_BUILD_CACHE_PATH | string |/var/lib/docker | | | false |
7878
| ENABLE_BUILD_CONTEXT | bool |false | | | false |
79+
| ENABLE_WORKFLOW_EXECUTION_STAGE | bool |true | if enabled then we will display build stages separately for CI/Job/Pre-Post CD | true | false |
7980
| EXTERNAL_BLOB_STORAGE_CM_NAME | string |blob-storage-cm | | | false |
8081
| EXTERNAL_BLOB_STORAGE_SECRET_NAME | string |blob-storage-secret | | | false |
8182
| EXTERNAL_CD_NODE_LABEL_SELECTOR | | | | | false |

internal/sql/repository/pipelineConfig/CdWorfkflowRepository.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ type CdWorkflowRepository interface {
4040
FindCdWorkflowMetaByEnvironmentId(appId int, environmentId int, offset int, size int) ([]CdWorkflowRunner, error)
4141
FindCdWorkflowMetaByPipelineId(pipelineId int, offset int, size int) ([]CdWorkflowRunner, error)
4242
FindArtifactByPipelineIdAndRunnerType(pipelineId int, runnerType apiBean.WorkflowType, limit int, runnerStatuses []string) ([]CdWorkflowRunner, error)
43-
SaveWorkFlowRunner(wfr *CdWorkflowRunner) (*CdWorkflowRunner, error)
44-
UpdateWorkFlowRunner(wfr *CdWorkflowRunner) error
43+
SaveWorkFlowRunnerWithTx(wfr *CdWorkflowRunner, tx *pg.Tx) (*CdWorkflowRunner, error)
44+
UpdateWorkFlowRunnerWithTx(wfr *CdWorkflowRunner, tx *pg.Tx) error
4545
UpdateIsArtifactUploaded(wfrId int, isArtifactUploaded workflow.ArtifactUploadedType) error
4646
GetPreviousQueuedRunners(cdWfrId, pipelineId int) ([]*CdWorkflowRunner, error)
4747
UpdateRunnerStatusToFailedForIds(errMsg string, triggeredBy int32, cdWfrIds ...int) error
@@ -451,14 +451,14 @@ func (impl *CdWorkflowRepositoryImpl) FindLastPreOrPostTriggeredByEnvironmentId(
451451
return wfr, err
452452
}
453453

454-
func (impl *CdWorkflowRepositoryImpl) SaveWorkFlowRunner(wfr *CdWorkflowRunner) (*CdWorkflowRunner, error) {
455-
err := impl.dbConnection.Insert(wfr)
454+
func (impl *CdWorkflowRepositoryImpl) SaveWorkFlowRunnerWithTx(wfr *CdWorkflowRunner, tx *pg.Tx) (*CdWorkflowRunner, error) {
455+
err := tx.Insert(wfr)
456456
return wfr, err
457457
}
458458

459-
func (impl *CdWorkflowRepositoryImpl) UpdateWorkFlowRunner(wfr *CdWorkflowRunner) error {
459+
func (impl *CdWorkflowRepositoryImpl) UpdateWorkFlowRunnerWithTx(wfr *CdWorkflowRunner, tx *pg.Tx) error {
460460
wfr.Message = util.GetTruncatedMessage(wfr.Message, 1000)
461-
err := impl.dbConnection.Update(wfr)
461+
err := tx.Update(wfr)
462462
return err
463463
}
464464

internal/sql/repository/pipelineConfig/CiWorkflowRepository.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ import (
2626
)
2727

2828
type CiWorkflowRepository interface {
29-
SaveWorkFlow(wf *CiWorkflow) error
29+
SaveWorkFlowWithTx(wf *CiWorkflow, tx *pg.Tx) error
3030
FindLastTriggeredWorkflow(pipelineId int) (*CiWorkflow, error)
31-
UpdateWorkFlow(wf *CiWorkflow) error
31+
UpdateWorkFlowWithTx(wf *CiWorkflow, tx *pg.Tx) error
3232
UpdateArtifactUploaded(id int, isUploaded workflow.ArtifactUploadedType) error
3333
FindByStatusesIn(activeStatuses []string) ([]*CiWorkflow, error)
3434
FindByPipelineId(pipelineId int, offset int, size int) ([]WorkflowWithArtifact, error)
@@ -263,13 +263,13 @@ func (impl *CiWorkflowRepositoryImpl) FindCiWorkflowGitTriggersByIds(ids []int)
263263
return workflows, err
264264
}
265265

266-
func (impl *CiWorkflowRepositoryImpl) SaveWorkFlow(wf *CiWorkflow) error {
267-
err := impl.dbConnection.Insert(wf)
266+
func (impl *CiWorkflowRepositoryImpl) SaveWorkFlowWithTx(wf *CiWorkflow, tx *pg.Tx) error {
267+
err := tx.Insert(wf)
268268
return err
269269
}
270270

271-
func (impl *CiWorkflowRepositoryImpl) UpdateWorkFlow(wf *CiWorkflow) error {
272-
err := impl.dbConnection.Update(wf)
271+
func (impl *CiWorkflowRepositoryImpl) UpdateWorkFlowWithTx(wf *CiWorkflow, tx *pg.Tx) error {
272+
err := tx.Update(wf)
273273
return err
274274
}
275275

internal/sql/repository/pipelineConfig/bean/workflow/cdWorkflow/CdWorkflowBean.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
"github.com/devtron-labs/devtron/client/argocdServer/bean"
77
)
88

9-
var WfrTerminalStatusList = []string{WorkflowAborted, WorkflowFailed, WorkflowSucceeded, bean.HIBERNATING, string(health.HealthStatusHealthy), string(health.HealthStatusDegraded)}
9+
var WfrTerminalStatusList = []string{WorkflowAborted, WorkflowFailed, WorkflowSucceeded, bean.HIBERNATING, string(health.HealthStatusHealthy), string(health.HealthStatusDegraded), WorkflowTimedOut, WorkflowCancel}
1010

1111
type WorkflowStatus int
1212

@@ -34,6 +34,7 @@ const (
3434
WorkflowTypeDeploy = "DEPLOY"
3535
WorkflowTypePre = "PRE"
3636
WorkflowTypePost = "POST"
37+
WorkflowWaitingToStart = "WaitingToStart"
3738
)
3839

3940
func (a WorkflowStatus) String() string {
@@ -60,3 +61,6 @@ type CdWorkflowRunnerArtifactMetadata struct {
6061
ParentCiArtifact int `pg:"parent_ci_artifact"`
6162
Scanned bool `pg:"scanned"`
6263
}
64+
65+
const WorkflowCancel = "CANCELLED"
66+
const POD_DELETED_MESSAGE = "pod deleted"

pkg/app/AppService.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838
bean6 "github.com/devtron-labs/devtron/pkg/deployment/manifest/deploymentTemplate/bean"
3939
"github.com/devtron-labs/devtron/pkg/deployment/manifest/deploymentTemplate/read"
4040
bean4 "github.com/devtron-labs/devtron/pkg/deployment/trigger/devtronApps/bean"
41+
"github.com/devtron-labs/devtron/pkg/workflow/cd"
4142
"io/ioutil"
4243
"net/url"
4344
"path"
@@ -125,6 +126,7 @@ type AppServiceImpl struct {
125126
appListingService AppListingService
126127
deploymentConfigService common2.DeploymentConfigService
127128
envConfigOverrideReadService read.EnvConfigOverrideService
129+
cdWorkflowRunnerService cd.CdWorkflowRunnerService
128130
}
129131

130132
type AppService interface {
@@ -164,7 +166,8 @@ func NewAppService(
164166
deploymentTemplateService deploymentTemplate.DeploymentTemplateService,
165167
appListingService AppListingService,
166168
deploymentConfigService common2.DeploymentConfigService,
167-
envConfigOverrideReadService read.EnvConfigOverrideService) *AppServiceImpl {
169+
envConfigOverrideReadService read.EnvConfigOverrideService,
170+
cdWorkflowRunnerService cd.CdWorkflowRunnerService) *AppServiceImpl {
168171
appServiceImpl := &AppServiceImpl{
169172
mergeUtil: mergeUtil,
170173
pipelineOverrideRepository: pipelineOverrideRepository,
@@ -194,6 +197,7 @@ func NewAppService(
194197
appListingService: appListingService,
195198
deploymentConfigService: deploymentConfigService,
196199
envConfigOverrideReadService: envConfigOverrideReadService,
200+
cdWorkflowRunnerService: cdWorkflowRunnerService,
197201
}
198202
return appServiceImpl
199203
}
@@ -1005,7 +1009,7 @@ func (impl *AppServiceImpl) UpdateCdWorkflowRunnerByACDObject(app *v1alpha1.Appl
10051009
}
10061010
wfr.UpdatedBy = 1
10071011
wfr.UpdatedOn = time.Now()
1008-
err = impl.cdWorkflowRepository.UpdateWorkFlowRunner(wfr)
1012+
err = impl.cdWorkflowRunnerService.UpdateCdWorkflowRunnerWithStage(wfr)
10091013
if err != nil {
10101014
impl.logger.Errorw("error on update cd workflow runner", "wfr", wfr, "app", app, "err", err)
10111015
return err

pkg/deployment/trigger/devtronApps/PostStageTriggerService.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ func (impl *TriggerServiceImpl) TriggerPostStage(request bean.TriggerRequest) (*
119119
runner.Status = cdWorkflow.WorkflowFailed
120120
runner.Message = err.Error()
121121
runner.FinishedOn = time.Now()
122-
_ = impl.cdWorkflowRepository.UpdateWorkFlowRunner(runner)
122+
_ = impl.cdWorkflowRunnerService.UpdateCdWorkflowRunnerWithStage(runner)
123123
return nil, err
124124
}
125125

@@ -129,7 +129,7 @@ func (impl *TriggerServiceImpl) TriggerPostStage(request bean.TriggerRequest) (*
129129
runner.Status = cdWorkflow.WorkflowFailed
130130
runner.Message = err.Error()
131131
runner.FinishedOn = time.Now()
132-
_ = impl.cdWorkflowRepository.UpdateWorkFlowRunner(runner)
132+
_ = impl.cdWorkflowRunnerService.UpdateCdWorkflowRunnerWithStage(runner)
133133
return nil, err
134134
}
135135
manifestPushTempate, err := impl.getManifestPushTemplateForPostStage(request, envDevploymentConfig, jobHelmPackagePath, cdStageWorkflowRequest, cdWf, runner, pipeline, triggeredBy, triggeredAt)
@@ -143,7 +143,7 @@ func (impl *TriggerServiceImpl) TriggerPostStage(request bean.TriggerRequest) (*
143143
return nil, err
144144
}
145145
wfr.ImagePathReservationIds = pluginImagePathReservationIds
146-
err = impl.cdWorkflowRepository.UpdateWorkFlowRunner(&wfr)
146+
err = impl.cdWorkflowRunnerService.UpdateCdWorkflowRunnerWithStage(&wfr)
147147
if err != nil {
148148
impl.logger.Error("error in updating image path reservation ids in cd workflow runner", "err", "err")
149149
}

pkg/deployment/trigger/devtronApps/PreStageTriggerService.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"context"
2121
"encoding/json"
2222
"fmt"
23+
"github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1"
2324
blob_storage "github.com/devtron-labs/common-lib/blob-storage"
2425
commonBean "github.com/devtron-labs/common-lib/workflow"
2526
bean2 "github.com/devtron-labs/devtron/api/bean"
@@ -135,11 +136,11 @@ func (impl *TriggerServiceImpl) TriggerPreStage(request bean.TriggerRequest) (*b
135136
runner.Status = cdWorkflow.WorkflowFailed
136137
runner.Message = err.Error()
137138
runner.FinishedOn = time.Now()
138-
_ = impl.cdWorkflowRepository.UpdateWorkFlowRunner(runner)
139+
_ = impl.cdWorkflowRunnerService.UpdateCdWorkflowRunnerWithStage(runner)
139140
return nil, err
140141
} else {
141142
runner.ImagePathReservationIds = imagePathReservationIds
142-
_ = impl.cdWorkflowRepository.UpdateWorkFlowRunner(runner)
143+
_ = impl.cdWorkflowRunnerService.UpdateCdWorkflowRunnerWithStage(runner)
143144
}
144145

145146
_, span = otel.Tracer("orchestrator").Start(ctx, "cdWorkflowService.SubmitWorkflow")
@@ -152,7 +153,7 @@ func (impl *TriggerServiceImpl) TriggerPreStage(request bean.TriggerRequest) (*b
152153
runner.Status = cdWorkflow.WorkflowFailed
153154
runner.Message = err.Error()
154155
runner.FinishedOn = time.Now()
155-
_ = impl.cdWorkflowRepository.UpdateWorkFlowRunner(runner)
156+
_ = impl.cdWorkflowRunnerService.UpdateCdWorkflowRunnerWithStage(runner)
156157
return nil, err
157158
}
158159
manifestPushTemplate, err := impl.getManifestPushTemplateForPreStage(ctx, envDeploymentConfig, pipeline, artifact, jobHelmPackagePath, cdWf, runner, triggeredBy, triggeredAt, request)
@@ -251,6 +252,7 @@ func (impl *TriggerServiceImpl) createStartingWfAndRunner(request bean.TriggerRe
251252
WorkflowType: request.WorkflowType,
252253
ExecutorType: impl.config.GetWorkflowExecutorType(),
253254
Status: cdWorkflow.WorkflowStarting, // starting PreStage
255+
PodStatus: string(v1alpha1.NodePending),
254256
TriggeredBy: triggeredBy,
255257
StartedOn: triggeredAt,
256258
Namespace: request.RunStageInEnvNamespace,
@@ -262,7 +264,7 @@ func (impl *TriggerServiceImpl) createStartingWfAndRunner(request bean.TriggerRe
262264
ReferenceId: request.TriggerContext.ReferenceId,
263265
}
264266
_, span := otel.Tracer("orchestrator").Start(ctx, "cdWorkflowRepository.SaveWorkFlowRunner")
265-
_, err = impl.cdWorkflowRepository.SaveWorkFlowRunner(runner)
267+
_, err = impl.cdWorkflowRunnerService.SaveCDWorkflowRunnerWithStage(runner)
266268
span.End()
267269
if err != nil {
268270
return nil, nil, err
@@ -311,7 +313,7 @@ func (impl *TriggerServiceImpl) checkVulnerabilityStatusAndFailWfIfNeeded(ctx co
311313
runner.FinishedOn = time.Now()
312314
runner.UpdatedOn = time.Now()
313315
runner.UpdatedBy = triggeredBy
314-
err = impl.cdWorkflowRepository.UpdateWorkFlowRunner(runner)
316+
err = impl.cdWorkflowRunnerService.UpdateCdWorkflowRunnerWithStage(runner)
315317
if err != nil {
316318
impl.logger.Errorw("error in updating wfr status due to vulnerable image", "err", err)
317319
return err

pkg/deployment/trigger/devtronApps/TriggerService.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ type TriggerServiceImpl struct {
172172
gitOperationService git.GitOperationService
173173
attributeService attributes.AttributesService
174174
clusterRepository repository5.ClusterRepository
175+
cdWorkflowRunnerService cd.CdWorkflowRunnerService
175176
}
176177

177178
func NewTriggerServiceImpl(logger *zap.SugaredLogger,
@@ -230,6 +231,7 @@ func NewTriggerServiceImpl(logger *zap.SugaredLogger,
230231
gitOperationService git.GitOperationService,
231232
attributeService attributes.AttributesService,
232233
clusterRepository repository5.ClusterRepository,
234+
cdWorkflowRunnerService cd.CdWorkflowRunnerService,
233235
) (*TriggerServiceImpl, error) {
234236
impl := &TriggerServiceImpl{
235237
logger: logger,
@@ -292,6 +294,7 @@ func NewTriggerServiceImpl(logger *zap.SugaredLogger,
292294
ciCdPipelineOrchestrator: ciCdPipelineOrchestrator,
293295
gitOperationService: gitOperationService,
294296
attributeService: attributeService,
297+
cdWorkflowRunnerService: cdWorkflowRunnerService,
295298

296299
clusterRepository: clusterRepository,
297300
}
@@ -518,7 +521,7 @@ func (impl *TriggerServiceImpl) ManualCdTrigger(triggerContext bean.TriggerConte
518521
AuditLog: sql.AuditLog{CreatedOn: triggeredAt, CreatedBy: overrideRequest.UserId, UpdatedOn: triggeredAt, UpdatedBy: overrideRequest.UserId},
519522
ReferenceId: triggerContext.ReferenceId,
520523
}
521-
savedWfr, err := impl.cdWorkflowRepository.SaveWorkFlowRunner(runner)
524+
savedWfr, err := impl.cdWorkflowRunnerService.SaveCDWorkflowRunnerWithStage(runner)
522525
if err != nil {
523526
impl.logger.Errorw("err in creating cdWorkflowRunner, ManualCdTrigger", "cdWorkflowId", cdWorkflowId, "err", err)
524527
return 0, "", nil, err
@@ -649,7 +652,7 @@ func (impl *TriggerServiceImpl) TriggerAutomaticDeployment(request bean.TriggerR
649652
AuditLog: sql.AuditLog{CreatedOn: triggeredAt, CreatedBy: triggeredBy, UpdatedOn: triggeredAt, UpdatedBy: triggeredBy},
650653
ReferenceId: request.TriggerContext.ReferenceId,
651654
}
652-
savedWfr, err := impl.cdWorkflowRepository.SaveWorkFlowRunner(runner)
655+
savedWfr, err := impl.cdWorkflowRunnerService.SaveCDWorkflowRunnerWithStage(runner)
653656
if err != nil {
654657
return err
655658
}

0 commit comments

Comments
 (0)