From 506a2a3d6d0bd5a4dfc6d804df6ec47bdd7fd3a4 Mon Sep 17 00:00:00 2001 From: Eyal Ben Moshe Date: Thu, 27 Jan 2022 11:55:40 +0200 Subject: [PATCH] V1 - Bug fix - Build-info link is wrong when used with projects (#323) --- artifactory/commands/buildinfo/publish.go | 45 +++++++++++++++++-- .../commands/buildinfo/publish_test.go | 37 +++++++++++++++ go.mod | 2 +- go.sum | 6 +-- utils/lock/utils_unix.go | 1 + 5 files changed, 83 insertions(+), 8 deletions(-) diff --git a/artifactory/commands/buildinfo/publish.go b/artifactory/commands/buildinfo/publish.go index c7f22dfc6..b88f27ca2 100644 --- a/artifactory/commands/buildinfo/publish.go +++ b/artifactory/commands/buildinfo/publish.go @@ -2,8 +2,13 @@ package buildinfo import ( "fmt" + "github.com/jfrog/jfrog-client-go/artifactory" clientutils "github.com/jfrog/jfrog-client-go/utils" + "github.com/jfrog/jfrog-client-go/utils/log" "sort" + "strconv" + "strings" + "time" "github.com/jfrog/jfrog-cli-core/artifactory/utils" "github.com/jfrog/jfrog-cli-core/utils/config" @@ -88,13 +93,47 @@ func (bpc *BuildPublishCommand) Run() error { if bpc.IsDetailedSummary() { bpc.SetSummary(summary) } + if err != nil || bpc.config.DryRun { + return err + } + + buildLink, err := bpc.constructBuildInfoUiUrl(servicesManager, buildInfo.Started) if err != nil { return err } - if !bpc.config.DryRun { - return utils.RemoveBuildDir(bpc.buildConfiguration.BuildName, bpc.buildConfiguration.BuildNumber, bpc.buildConfiguration.Project) + log.Info("Build info successfully deployed. Browse it in Artifactory under " + buildLink) + return utils.RemoveBuildDir(bpc.buildConfiguration.BuildName, bpc.buildConfiguration.BuildNumber, bpc.buildConfiguration.Project) +} + +func (bpc *BuildPublishCommand) constructBuildInfoUiUrl(servicesManager artifactory.ArtifactoryServicesManager, buildInfoStarted string) (string, error) { + buildTime, err := time.Parse(buildinfo.TimeFormat, buildInfoStarted) + if errorutils.CheckError(err) != nil { + return "", err + } + artVersion, err := servicesManager.GetVersion() + if err != nil { + return "", err + } + artVersionSlice := strings.Split(artVersion, ".") + majorVersion, err := strconv.Atoi(artVersionSlice[0]) + if errorutils.CheckError(err) != nil { + return "", err + } + return bpc.getBuildInfoUiUrl(majorVersion, buildTime), nil +} + +func (bpc *BuildPublishCommand) getBuildInfoUiUrl(majorVersion int, buildTime time.Time) string { + if majorVersion <= 6 { + return fmt.Sprintf("%vartifactory/webapp/#/builds/%v/%v", + bpc.serverDetails.GetUrl(), bpc.buildConfiguration.BuildName, bpc.buildConfiguration.BuildNumber) + } else if bpc.buildConfiguration.Project != "" { + timestamp := buildTime.UnixNano() / 1000000 + return fmt.Sprintf("%vui/builds/%v/%v/%v/published?buildRepo=%v-build-info&projectKey=%v", + bpc.serverDetails.GetUrl(), bpc.buildConfiguration.BuildName, bpc.buildConfiguration.BuildNumber, strconv.FormatInt(timestamp, 10), bpc.buildConfiguration.Project, bpc.buildConfiguration.Project) } - return nil + timestamp := buildTime.UnixNano() / 1000000 + return fmt.Sprintf("%vui/builds/%v/%v/%v/published?buildRepo=artifactory-build-info", + bpc.serverDetails.GetUrl(), bpc.buildConfiguration.BuildName, bpc.buildConfiguration.BuildNumber, strconv.FormatInt(timestamp, 10)) } func (bpc *BuildPublishCommand) createBuildInfoFromPartials() (*buildinfo.BuildInfo, error) { diff --git a/artifactory/commands/buildinfo/publish_test.go b/artifactory/commands/buildinfo/publish_test.go index be854a5fa..7a4ebfed6 100644 --- a/artifactory/commands/buildinfo/publish_test.go +++ b/artifactory/commands/buildinfo/publish_test.go @@ -1,8 +1,13 @@ package buildinfo import ( + "github.com/jfrog/jfrog-cli-core/artifactory/utils" + "github.com/jfrog/jfrog-cli-core/utils/config" + "github.com/stretchr/testify/assert" "reflect" + "strconv" "testing" + "time" "github.com/jfrog/jfrog-client-go/artifactory/buildinfo" ) @@ -67,3 +72,35 @@ func TestExcludePasswordsPattern(t *testing.T) { t.Error("expected:", expected, "got:", filteredKeys) } } + +func TestPrintBuildInfoLink(t *testing.T) { + buildTime := strconv.FormatInt(time.Now().UnixNano()/1000000, 10) + var linkTypes = []struct { + majorVersion int + buildTime time.Time + buildInfoConf utils.BuildConfiguration + serverDetails config.ServerDetails + expected string + }{ + {5, time.Now(), utils.BuildConfiguration{BuildName: "test", BuildNumber: "1", Module: "6", Project: "cli"}, + config.ServerDetails{Url: "http://localhost:8081/"}, "http://localhost:8081/artifactory/webapp/#/builds/test/1"}, + {6, time.Now(), utils.BuildConfiguration{BuildName: "test", BuildNumber: "1", Module: "6", Project: "cli"}, + config.ServerDetails{Url: "http://localhost:8081/"}, "http://localhost:8081/artifactory/webapp/#/builds/test/1"}, + {7, time.Now(), utils.BuildConfiguration{BuildName: "test", BuildNumber: "1", Module: "6", Project: ""}, + config.ServerDetails{Url: "http://localhost:8082/"}, "http://localhost:8082/ui/builds/test/1/" + buildTime + "/published?buildRepo=artifactory-build-info"}, + {7, time.Now(), utils.BuildConfiguration{BuildName: "test", BuildNumber: "1", Module: "6", Project: "cli"}, + config.ServerDetails{Url: "http://localhost:8082/"}, "http://localhost:8082/ui/builds/test/1/" + buildTime + "/published?buildRepo=cli-build-info&projectKey=cli"}, + } + + for _, linkType := range linkTypes { + buildPubConf := &BuildPublishCommand{ + &linkType.buildInfoConf, + &linkType.serverDetails, + nil, + true, + nil, + } + buildPubComService := buildPubConf.getBuildInfoUiUrl(linkType.majorVersion, linkType.buildTime) + assert.Equal(t, buildPubComService, linkType.expected) + } +} diff --git a/go.mod b/go.mod index 170552099..85513ea3d 100644 --- a/go.mod +++ b/go.mod @@ -21,6 +21,6 @@ require ( gopkg.in/yaml.v2 v2.3.0 ) -// replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.0.1-0.20211005084545-98198805137b +replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.0.1-0.20220127093540-7f2be5714cdf // replace github.com/jfrog/gocmd => github.com/jfrog/gocmd v0.3.1-0.20210623152326-422f211f4e7f diff --git a/go.sum b/go.sum index 38b70526d..ada59c859 100644 --- a/go.sum +++ b/go.sum @@ -151,9 +151,8 @@ github.com/jfrog/gocmd v0.3.1 h1:EyOot6llZaHlV9S6We6P0OrYA2pKO8Xifm3yXuUxriM= github.com/jfrog/gocmd v0.3.1/go.mod h1:spTHT8F2u0DtGdVq3v6frnSiqaKwPdNuMQd856MCHhw= github.com/jfrog/gofrog v1.0.6 h1:yUDxSCw8gTK6vC4PvtG0HTnEOQJSZ+O4lWGCgkev1nU= github.com/jfrog/gofrog v1.0.6/go.mod h1:HkDzg+tMNw23UryoOv0+LB94BzYcl6MCIoz8Tmlb+s8= -github.com/jfrog/jfrog-client-go v0.25.0/go.mod h1:bjBL6Svr951HZH7JvMtzPJ9Xy5cO0OweNjkhUzxKmtw= -github.com/jfrog/jfrog-client-go v0.27.1 h1:nyIq03WubqMi0aHPVopbBooRtZzhwhR4y9O9eJcuFls= -github.com/jfrog/jfrog-client-go v0.27.1/go.mod h1:8ws+apIY2pb+sy/XAihPbjJpQ5XZ82fYmdqoRrr8QEs= +github.com/jfrog/jfrog-client-go v1.0.1-0.20220127093540-7f2be5714cdf h1:MFNrOHfDZMJ26i9INC0SScdyHd9WOld4NOnHvxlIq9k= +github.com/jfrog/jfrog-client-go v1.0.1-0.20220127093540-7f2be5714cdf/go.mod h1:8ws+apIY2pb+sy/XAihPbjJpQ5XZ82fYmdqoRrr8QEs= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= @@ -310,7 +309,6 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= diff --git a/utils/lock/utils_unix.go b/utils/lock/utils_unix.go index b24ba0809..866d2b8fe 100644 --- a/utils/lock/utils_unix.go +++ b/utils/lock/utils_unix.go @@ -1,3 +1,4 @@ +//go:build linux || darwin || freebsd // +build linux darwin freebsd package lock