Skip to content

Commit c3a71c9

Browse files
fix: shows commit details only on currently deployed image on deployment history (#3382)
* fetch-all-data-in-bulk-api * error-handling * error-handling * Handle error * empty wflist handling * remove unwanted check * remove duplicate structs * mapping-for-linked-pipeline * code-refactor
1 parent 68886cd commit c3a71c9

File tree

5 files changed

+184
-89
lines changed

5 files changed

+184
-89
lines changed

internal/sql/repository/CiArtifactRepository.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func (impl CiArtifactRepositoryImpl) GetArtifactParentCiAndWorkflowDetailsByIds(
113113
}
114114

115115
err := impl.dbConnection.Model(&artifacts).
116-
Column("ci_artifact.ci_workflow_id", "ci_artifact.parent_ci_artifact", "ci_artifact.external_ci_pipeline_id").
116+
Column("ci_artifact.ci_workflow_id", "ci_artifact.parent_ci_artifact", "ci_artifact.external_ci_pipeline_id", "ci_artifact.id").
117117
Where("ci_artifact.id in (?)", pg.In(ids)).
118118
Select()
119119

internal/sql/repository/pipelineConfig/CdWorfkflowRepository.go

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/argoproj/gitops-engine/pkg/health"
2323
"github.com/devtron-labs/devtron/api/bean"
2424
"github.com/devtron-labs/devtron/client/argocdServer/application"
25+
"github.com/devtron-labs/devtron/client/gitSensor"
2526
"github.com/devtron-labs/devtron/internal/sql/repository"
2627
"github.com/devtron-labs/devtron/internal/util"
2728
"github.com/devtron-labs/devtron/pkg/sql"
@@ -161,27 +162,47 @@ type CdWorkflowRunner struct {
161162
sql.AuditLog
162163
}
163164

165+
type CiPipelineMaterialResponse struct {
166+
Id int `json:"id"`
167+
GitMaterialId int `json:"gitMaterialId"`
168+
GitMaterialUrl string `json:"gitMaterialUrl"`
169+
GitMaterialName string `json:"gitMaterialName"`
170+
Type string `json:"type"`
171+
Value string `json:"value"`
172+
Active bool `json:"active"`
173+
History []*gitSensor.GitCommit `json:"history,omitempty"`
174+
LastFetchTime time.Time `json:"lastFetchTime"`
175+
IsRepoError bool `json:"isRepoError"`
176+
RepoErrorMsg string `json:"repoErrorMsg"`
177+
IsBranchError bool `json:"isBranchError"`
178+
BranchErrorMsg string `json:"branchErrorMsg"`
179+
Url string `json:"url"`
180+
Regex string `json:"regex"`
181+
}
182+
164183
type CdWorkflowWithArtifact struct {
165-
Id int `json:"id"`
166-
CdWorkflowId int `json:"cd_workflow_id"`
167-
Name string `json:"name"`
168-
Status string `json:"status"`
169-
PodStatus string `json:"pod_status"`
170-
Message string `json:"message"`
171-
StartedOn time.Time `json:"started_on"`
172-
FinishedOn time.Time `json:"finished_on"`
173-
PipelineId int `json:"pipeline_id"`
174-
Namespace string `json:"namespace"`
175-
LogFilePath string `json:"log_file_path"`
176-
TriggeredBy int32 `json:"triggered_by"`
177-
EmailId string `json:"email_id"`
178-
Image string `json:"image"`
179-
MaterialInfo string `json:"material_info,omitempty"`
180-
DataSource string `json:"data_source,omitempty"`
181-
CiArtifactId int `json:"ci_artifact_id,omitempty"`
182-
WorkflowType string `json:"workflow_type,omitempty"`
183-
ExecutorType string `json:"executor_type,omitempty"`
184-
BlobStorageEnabled bool `json:"blobStorageEnabled"`
184+
Id int `json:"id"`
185+
CdWorkflowId int `json:"cd_workflow_id"`
186+
Name string `json:"name"`
187+
Status string `json:"status"`
188+
PodStatus string `json:"pod_status"`
189+
Message string `json:"message"`
190+
StartedOn time.Time `json:"started_on"`
191+
FinishedOn time.Time `json:"finished_on"`
192+
PipelineId int `json:"pipeline_id"`
193+
Namespace string `json:"namespace"`
194+
LogFilePath string `json:"log_file_path"`
195+
TriggeredBy int32 `json:"triggered_by"`
196+
EmailId string `json:"email_id"`
197+
Image string `json:"image"`
198+
MaterialInfo string `json:"material_info,omitempty"`
199+
DataSource string `json:"data_source,omitempty"`
200+
CiArtifactId int `json:"ci_artifact_id,omitempty"`
201+
WorkflowType string `json:"workflow_type,omitempty"`
202+
ExecutorType string `json:"executor_type,omitempty"`
203+
BlobStorageEnabled bool `json:"blobStorageEnabled"`
204+
GitTriggers map[int]GitCommit `json:"gitTriggers"`
205+
CiMaterials []CiPipelineMaterialResponse `json:"ciMaterials"`
185206
}
186207

187208
type TriggerWorkflowStatus struct {

internal/sql/repository/pipelineConfig/CiWorkflowRepository.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ type CiWorkflowRepository interface {
3838

3939
FindLastTriggeredWorkflowByCiIds(pipelineId []int) (ciWorkflow []*CiWorkflow, err error)
4040
FindLastTriggeredWorkflowByArtifactId(ciArtifactId int) (ciWorkflow *CiWorkflow, err error)
41+
FindAllLastTriggeredWorkflowByArtifactId(ciArtifactId []int) (ciWorkflow []*CiWorkflow, err error)
4142
FindLastTriggeredWorkflowGitTriggersByArtifactId(ciArtifactId int) (ciWorkflow *CiWorkflow, err error)
4243
ExistsByStatus(status string) (bool, error)
4344
FindBuildTypeAndStatusDataOfLast1Day() []*BuildTypeCount
@@ -238,6 +239,15 @@ func (impl *CiWorkflowRepositoryImpl) FindLastTriggeredWorkflowByArtifactId(ciAr
238239
return workflow, err
239240
}
240241

242+
func (impl *CiWorkflowRepositoryImpl) FindAllLastTriggeredWorkflowByArtifactId(ciArtifactIds []int) (ciWorkflows []*CiWorkflow, err error) {
243+
err = impl.dbConnection.Model(&ciWorkflows).
244+
Column("ci_workflow.git_triggers", "ci_workflow.ci_pipeline_id", "CiPipeline", "cia.id").
245+
Join("inner join ci_artifact cia on cia.ci_workflow_id = ci_workflow.id").
246+
Where("cia.id in (?) ", pg.In(ciArtifactIds)).
247+
Select()
248+
return ciWorkflows, err
249+
}
250+
241251
func (impl *CiWorkflowRepositoryImpl) FindLastTriggeredWorkflowGitTriggersByArtifactId(ciArtifactId int) (ciWorkflow *CiWorkflow, err error) {
242252
workflow := &CiWorkflow{}
243253
err = impl.dbConnection.Model(workflow).

pkg/pipeline/CdHandler.go

Lines changed: 84 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -722,6 +722,88 @@ func (impl *CdHandlerImpl) GetCdBuildHistory(appId int, environmentId int, pipel
722722
return cdWorkflowArtifact, err
723723
}
724724
cdWorkflowArtifact = impl.converterWFRList(wfrList)
725+
if err == pg.ErrNoRows || wfrList == nil {
726+
return cdWorkflowArtifact, nil
727+
}
728+
var ciArtifactIds []int
729+
for _, cdWfA := range cdWorkflowArtifact {
730+
ciArtifactIds = append(ciArtifactIds, cdWfA.CiArtifactId)
731+
}
732+
parentCiArtifact := make(map[int]int)
733+
isLinked := false
734+
ciArtifacts, err := impl.ciArtifactRepository.GetArtifactParentCiAndWorkflowDetailsByIds(ciArtifactIds)
735+
if err != nil || len(ciArtifacts) == 0 {
736+
impl.Logger.Errorw("error fetching artifact data", "err", err)
737+
return cdWorkflowArtifact, err
738+
}
739+
var newCiArtifactIds []int
740+
for _, ciArtifact := range ciArtifacts {
741+
if ciArtifact.ParentCiArtifact > 0 && ciArtifact.WorkflowId == nil {
742+
isLinked = true
743+
newCiArtifactIds = append(newCiArtifactIds, ciArtifact.ParentCiArtifact)
744+
parentCiArtifact[ciArtifact.Id] = ciArtifact.ParentCiArtifact
745+
} else {
746+
newCiArtifactIds = append(newCiArtifactIds, ciArtifact.Id)
747+
}
748+
}
749+
// handling linked ci pipeline
750+
if isLinked {
751+
ciArtifactIds = newCiArtifactIds
752+
}
753+
754+
ciWfs, err := impl.ciWorkflowRepository.FindAllLastTriggeredWorkflowByArtifactId(ciArtifactIds)
755+
if err != nil && err != pg.ErrNoRows {
756+
impl.Logger.Errorw("error in fetching ci wfs", "artifactIds", ciArtifactIds, "err", err)
757+
return cdWorkflowArtifact, err
758+
} else if len(ciWfs) == 0 {
759+
return cdWorkflowArtifact, nil
760+
}
761+
762+
wfGitTriggers := make(map[int]map[int]pipelineConfig.GitCommit)
763+
var ciPipelineId int
764+
for _, ciWf := range ciWfs {
765+
ciPipelineId = ciWf.CiPipelineId
766+
wfGitTriggers[ciWf.Id] = ciWf.GitTriggers
767+
}
768+
ciMaterials, err := impl.ciPipelineMaterialRepository.GetByPipelineIdForRegexAndFixed(ciPipelineId)
769+
if err != nil && err != pg.ErrNoRows {
770+
impl.Logger.Errorw("err in fetching ci materials", "ciMaterials", ciMaterials, "err", err)
771+
return cdWorkflowArtifact, err
772+
}
773+
774+
var ciMaterialsArr []pipelineConfig.CiPipelineMaterialResponse
775+
for _, ciMaterial := range ciMaterials {
776+
res := pipelineConfig.CiPipelineMaterialResponse{
777+
Id: ciMaterial.Id,
778+
GitMaterialId: ciMaterial.GitMaterialId,
779+
GitMaterialName: ciMaterial.GitMaterial.Name[strings.Index(ciMaterial.GitMaterial.Name, "-")+1:],
780+
Type: string(ciMaterial.Type),
781+
Value: ciMaterial.Value,
782+
Active: ciMaterial.Active,
783+
Url: ciMaterial.GitMaterial.Url,
784+
}
785+
ciMaterialsArr = append(ciMaterialsArr, res)
786+
}
787+
var newCdWorkflowArtifact []pipelineConfig.CdWorkflowWithArtifact
788+
for _, cdWfA := range cdWorkflowArtifact {
789+
790+
gitTriggers := make(map[int]pipelineConfig.GitCommit)
791+
if isLinked {
792+
if gitTriggerVal, ok := wfGitTriggers[parentCiArtifact[cdWfA.CiArtifactId]]; ok {
793+
gitTriggers = gitTriggerVal
794+
}
795+
} else {
796+
if gitTriggerVal, ok := wfGitTriggers[cdWfA.CiArtifactId]; ok {
797+
gitTriggers = gitTriggerVal
798+
}
799+
}
800+
801+
cdWfA.GitTriggers = gitTriggers
802+
cdWfA.CiMaterials = ciMaterialsArr
803+
newCdWorkflowArtifact = append(newCdWorkflowArtifact, cdWfA)
804+
805+
}
806+
cdWorkflowArtifact = newCdWorkflowArtifact
725807
}
726808

727809
return cdWorkflowArtifact, nil
@@ -881,9 +963,9 @@ func (impl *CdHandlerImpl) FetchCdWorkflowDetails(appId int, environmentId int,
881963
return WorkflowResponse{}, err
882964
}
883965

884-
var ciMaterialsArr []CiPipelineMaterialResponse
966+
var ciMaterialsArr []pipelineConfig.CiPipelineMaterialResponse
885967
for _, m := range ciMaterials {
886-
res := CiPipelineMaterialResponse{
968+
res := pipelineConfig.CiPipelineMaterialResponse{
887969
Id: m.Id,
888970
GitMaterialId: m.GitMaterialId,
889971
GitMaterialName: m.GitMaterial.Name[strings.Index(m.GitMaterial.Name, "-")+1:],

0 commit comments

Comments
 (0)