Skip to content

Commit

Permalink
refract: split function
Browse files Browse the repository at this point in the history
Signed-off-by: lijie <lijie@pingcap.com>
  • Loading branch information
jayl1e committed Feb 27, 2024
1 parent f16e914 commit 9b73e9d
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 39 deletions.
91 changes: 55 additions & 36 deletions tibuild/pkg/rest/service/dev_build_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -372,68 +372,87 @@ func (s DevbuildServer) MergeTektonStatus(ctx context.Context, id int, pipeline
} else {
status.Pipelines = append(status.Pipelines, pipeline)
}
compute_tekton_status(status)
computeTektonStatus(status)
if obj.Spec.PipelineEngine == TektonEngine {
obj.Status.Status = obj.Status.TektonStatus.Status
obj.Status.BuildReport = obj.Status.TektonStatus.BuildReport
}
return s.Update(ctx, id, *obj, options)
}

func compute_tekton_status(status *TektonStatus) {
func computeTektonStatus(status *TektonStatus) {
status.BuildReport = &BuildReport{}
collectTektonArtifacts(status.Pipelines, status.BuildReport)
status.PipelineStartAt = getTektonStartAt(status.Pipelines)
status.Status = computeTektonPhase(status.Pipelines)
if status.Status.IsCompleted() {
status.PipelineEndAt = getLatestEndAt(status.Pipelines)
}
}

func collectTektonArtifacts(pipelines []TektonPipeline, report *BuildReport) {
for _, pipeline := range pipelines {
report.GitHash = pipeline.GitHash
for _, files := range pipeline.OrasArtifacts {
report.Binaries = append(report.Binaries, oras_to_files(pipeline.Platform, files)...)
}
for _, image := range pipeline.Images {
img := ImageArtifact{Platform: pipeline.Platform, URL: image.URL}
report.Images = append(report.Images, img)
}
}
}

func getTektonStartAt(pipelines []TektonPipeline) *time.Time {
var startAt *time.Time = nil
for _, pipeline := range pipelines {
if pipeline.PipelineStartAt != nil {
if startAt == nil {
startAt = pipeline.PipelineStartAt
} else if pipeline.PipelineStartAt.Before(*startAt) {
startAt = pipeline.PipelineStartAt
}
}
}
return startAt
}

func computeTektonPhase(pipelines []TektonPipeline) BuildStatus {
phase := BuildStatusPending
var success_platforms = map[Platform]struct{}{}
var failure_platforms = map[Platform]struct{}{}
var triggered_platforms = map[Platform]struct{}{}
var latest_endat *time.Time
if status.BuildReport == nil {
status.BuildReport = &BuildReport{}
} else {
status.BuildReport.Images = nil
status.BuildReport.Binaries = nil
}
for _, pipeline := range status.Pipelines {
for _, pipeline := range pipelines {
switch pipeline.Status {
case BuildStatusSuccess:
success_platforms[pipeline.Platform] = struct{}{}
case BuildStatusFailure:
failure_platforms[pipeline.Platform] = struct{}{}
}
triggered_platforms[pipeline.Platform] = struct{}{}
status.BuildReport.GitHash = pipeline.GitHash
for _, files := range pipeline.OrasArtifacts {
status.BuildReport.Binaries = append(status.BuildReport.Binaries, oras_to_files(pipeline.Platform, files)...)
}
for _, image := range pipeline.Images {
img := ImageArtifact{Platform: pipeline.Platform, URL: image.URL}
status.BuildReport.Images = append(status.BuildReport.Images, img)
}
if pipeline.PipelineStartAt != nil {
if status.PipelineStartAt == nil {
status.PipelineStartAt = pipeline.PipelineStartAt
} else if pipeline.PipelineStartAt.Before(*status.PipelineStartAt) {
status.PipelineStartAt = pipeline.PipelineStartAt
}
}
if pipeline.PipelineEndAt != nil {
if latest_endat == nil {
latest_endat = pipeline.PipelineEndAt
} else if latest_endat.Before(*pipeline.PipelineEndAt) {
latest_endat = pipeline.PipelineEndAt
}
}
}
if len(success_platforms) == len(triggered_platforms) {
phase = BuildStatusSuccess
} else if len(failure_platforms) != 0 {
phase = BuildStatusFailure
} else if len(status.Pipelines) != 0 {
} else if len(pipelines) != 0 {
phase = BuildStatusProcessing
}
status.Status = phase
if status.Status.IsCompleted() {
status.PipelineEndAt = latest_endat
return phase
}

func getLatestEndAt(pipelines []TektonPipeline) *time.Time {
var latest_endat *time.Time
for _, pipeline := range pipelines {
if pipeline.PipelineEndAt != nil {
if latest_endat == nil {
latest_endat = pipeline.PipelineEndAt
} else if latest_endat.Before(*pipeline.PipelineEndAt) {
latest_endat = pipeline.PipelineEndAt
}
}
}
return latest_endat
}

func oras_to_files(platform Platform, oras OrasArtifact) []BinArtifact {
Expand Down
6 changes: 3 additions & 3 deletions tibuild/pkg/rest/service/dev_build_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ func TestTektonStatusMerge(t *testing.T) {
OrasArtifacts: []OrasArtifact{{Repo: "harbor.net/org/repo", Tag: "master", Files: []string{"c.tar.gz", "d.tar.gz"}}}},
},
}
compute_tekton_status(status)
computeTektonStatus(status)
require.Equal(t, BuildStatusSuccess, status.Status)
require.Equal(t, endtime.Sub(starttime), status.PipelineEndAt.Sub(*status.PipelineStartAt))
require.Equal(t, 2, len(status.BuildReport.Images))
Expand All @@ -396,7 +396,7 @@ func TestTektonStatusMerge(t *testing.T) {
OrasArtifacts: []OrasArtifact{{Repo: "harbor.net/org/repo", Files: []string{"c.tar.gz", "d.tar.gz"}}}},
},
}
compute_tekton_status(status)
computeTektonStatus(status)
require.Equal(t, BuildStatusProcessing, status.Status)
})
t.Run("processing", func(t *testing.T) {
Expand All @@ -412,7 +412,7 @@ func TestTektonStatusMerge(t *testing.T) {
OrasArtifacts: []OrasArtifact{{Repo: "harbor.net/org/repo", Files: []string{"c.tar.gz", "d.tar.gz"}}}},
},
}
compute_tekton_status(status)
computeTektonStatus(status)
require.Equal(t, BuildStatusFailure, status.Status)
})

Expand Down

0 comments on commit 9b73e9d

Please sign in to comment.