From 0b258d7af3f695d943894e29c9df37b257fdd348 Mon Sep 17 00:00:00 2001 From: lijie Date: Wed, 28 Feb 2024 19:12:31 +0800 Subject: [PATCH] fix: sha256sum for oci artifact (#85) # Why: - fix relation between sha256 and origin file ![image](https://github.com/PingCAP-QE/ee-apps/assets/10222426/091a82ed-5386-4c63-a011-f05abb22abd4) --------- Signed-off-by: lijie --- tibuild/pkg/rest/service/dev_build_service.go | 13 ++++++++++++- .../pkg/rest/service/dev_build_service_test.go | 15 +++++++++++++++ tibuild/pkg/rest/service/model.go | 11 ++++++----- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/tibuild/pkg/rest/service/dev_build_service.go b/tibuild/pkg/rest/service/dev_build_service.go index 010e02d..caecfa9 100644 --- a/tibuild/pkg/rest/service/dev_build_service.go +++ b/tibuild/pkg/rest/service/dev_build_service.go @@ -342,6 +342,9 @@ func (s DevbuildServer) inflate(entity *DevBuild) { if bin.URL == "" && bin.OciFile != nil { entity.Status.BuildReport.Binaries[i].URL = s.ociFileToUrl(*bin.OciFile) } + if bin.Sha256OciFile != nil { + entity.Status.BuildReport.Binaries[i].Sha256URL = s.ociFileToUrl(*bin.Sha256OciFile) + } } } if tek := entity.Status.TektonStatus; tek != nil { @@ -455,8 +458,16 @@ func getLatestEndAt(pipelines []TektonPipeline) *time.Time { func ociArtifactToFiles(platform Platform, artifact OciArtifact) []BinArtifact { var rt []BinArtifact + var sha256s = make(map[string]*OciFile) for _, file := range artifact.Files { - rt = append(rt, BinArtifact{Platform: platform, OciFile: &OciFile{Repo: artifact.Repo, Tag: artifact.Tag, File: file}}) + if origin, isSha256 := strings.CutSuffix(file, ".sha256"); isSha256 { + sha256s[origin] = &OciFile{Repo: artifact.Repo, Tag: artifact.Tag, File: file} + } else { + rt = append(rt, BinArtifact{Platform: platform, OciFile: &OciFile{Repo: artifact.Repo, Tag: artifact.Tag, File: file}}) + } + } + for idx := 0; idx < len(rt); idx += 1 { + rt[idx].Sha256OciFile = sha256s[rt[idx].OciFile.File] } return rt } diff --git a/tibuild/pkg/rest/service/dev_build_service_test.go b/tibuild/pkg/rest/service/dev_build_service_test.go index 37c0b5c..9e39c1c 100644 --- a/tibuild/pkg/rest/service/dev_build_service_test.go +++ b/tibuild/pkg/rest/service/dev_build_service_test.go @@ -420,3 +420,18 @@ func TestTektonStatusMerge(t *testing.T) { }) } + +func TestOciArtifactToFiles(t *testing.T) { + files := ociArtifactToFiles(LinuxAmd64, + OciArtifact{Repo: "repo", Tag: "tag", + Files: []string{ + "f1.tar.gz", + "f1.tar.gz.sha256", + "f2.tar.gz.sha256", + "f2.tar.gz"}, + }, + ) + require.Equal(t, 2, len(files)) + require.NotNil(t, files[0].Sha256OciFile) + require.NotNil(t, files[1].Sha256OciFile) +} diff --git a/tibuild/pkg/rest/service/model.go b/tibuild/pkg/rest/service/model.go index 79a0f10..555ae99 100644 --- a/tibuild/pkg/rest/service/model.go +++ b/tibuild/pkg/rest/service/model.go @@ -296,11 +296,12 @@ var ( ) type BinArtifact struct { - Component string `json:"component,omitempty"` - Platform Platform `json:"platform"` - URL string `json:"url"` - Sha256URL string `json:"sha256URL"` - OciFile *OciFile `json:"ociFile,omitempty"` + Component string `json:"component,omitempty"` + Platform Platform `json:"platform"` + URL string `json:"url"` + Sha256URL string `json:"sha256URL"` + OciFile *OciFile `json:"ociFile,omitempty"` + Sha256OciFile *OciFile `json:"sha256OciFile,omitempty"` } type OciFile struct {