From 8947f150505bf9d59a863a3a232a1203594db1fe Mon Sep 17 00:00:00 2001 From: Mohsin Zaidi <2236875+smrz2001@users.noreply.github.com> Date: Mon, 26 Aug 2024 09:05:14 -0400 Subject: [PATCH] feat: consider workflow jobs with label 'deploy' as deployments for sequencing --- cd/manager/common/job/models.go | 9 +++++++++ cd/manager/jobmanager/jobManager.go | 14 ++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/cd/manager/common/job/models.go b/cd/manager/common/job/models.go index 9bb125e..3956b55 100644 --- a/cd/manager/common/job/models.go +++ b/cd/manager/common/job/models.go @@ -103,3 +103,12 @@ type Workflow struct { Id int64 Labels []string } + +func (w Workflow) IsType(l string) bool { + for _, label := range w.Labels { + if label == l { + return true + } + } + return false +} diff --git a/cd/manager/jobmanager/jobManager.go b/cd/manager/jobmanager/jobManager.go index 66c8edd..22c202c 100644 --- a/cd/manager/jobmanager/jobManager.go +++ b/cd/manager/jobmanager/jobManager.go @@ -386,7 +386,7 @@ func (m *JobManager) processTestJobs(dequeuedJobs []job.JobState) bool { func (m *JobManager) processWorkflowJobs(dequeuedJobs []job.JobState) bool { // Check if there are any deploy jobs in progress if len(m.getActiveDeploys()) == 0 { - dequeuedWorkflows := make([]job.JobState, 0, 0) + dequeuedWorkflows := make([]job.JobState, 0) // Do not collapse back-to-back workflow jobs because they could be pointing to different actual workflows for _, dequeuedJob := range dequeuedJobs { // Break out of the loop as soon as we find a deploy job so that we don't collapse workflow jobs across @@ -521,6 +521,16 @@ func (m *JobManager) updateJobStage(jobState job.JobState, jobStage job.JobStage func (m *JobManager) getActiveDeploys() []job.JobState { return m.cache.JobsByMatcher(func(js job.JobState) bool { - return job.IsActiveJob(js) && (js.Type == job.JobType_Deploy) + // We have active deployments if there are any deploy jobs in progress, or workflow jobs with a "deploy" label. + if job.IsActiveJob(js) { + if js.Type == job.JobType_Deploy { + return true + } else if js.Type == job.JobType_Workflow { + if workflow, err := job.CreateWorkflowJob(js); err == nil { + return workflow.IsType(job.WorkflowJobLabel_Deploy) + } + } + } + return false }) }