Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Support to overwrite build info with same build number #45

Merged
merged 11 commits into from
Feb 19, 2025
25 changes: 25 additions & 0 deletions artifactory/commands/buildinfo/publish.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,20 @@ func (bpc *BuildPublishCommand) Run() error {
}
bpc.buildConfiguration.SetBuildNumber(buildInfo.Number)
}
if bpc.config.Overwrite {
project := bpc.buildConfiguration.GetProject()
buildRuns, found, err := servicesManager.GetBuildRuns(services.BuildInfoParams{BuildName: buildName, ProjectKey: project})
if err != nil {
return err
}
if found {
buildNumbersFrequency := CalculateBuildNumberFrequency(buildRuns)
err = servicesManager.DeleteBuildInfo(buildInfo, project, buildNumbersFrequency[buildNumber])
if err != nil {
return err
}
}
}
summary, err := servicesManager.PublishBuildInfo(buildInfo, bpc.buildConfiguration.GetProject())
if bpc.IsDetailedSummary() {
bpc.SetSummary(summary)
Expand Down Expand Up @@ -166,6 +180,17 @@ func (bpc *BuildPublishCommand) Run() error {
return logJsonOutput(buildLink)
}

// CalculateBuildNumberFrequency since the build number is not unique, we need to calculate the frequency of each build number
// in order to delete the correct number of builds and then publish the new build.
func CalculateBuildNumberFrequency(runs *buildinfo.BuildRuns) map[string]int {
frequency := make(map[string]int)
for _, run := range runs.BuildsNumbers {
buildNumber := strings.TrimPrefix(run.Uri, "/")
frequency[buildNumber]++
}
return frequency
}

func logJsonOutput(buildInfoUiUrl string) error {
output := formats.BuildPublishOutput{BuildInfoUiUrl: buildInfoUiUrl}
results, err := output.JSON()
Expand Down
49 changes: 49 additions & 0 deletions artifactory/commands/buildinfo/publish_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package buildinfo

import (
buildinfo "github.com/jfrog/build-info-go/entities"
"strconv"
"testing"
"time"
Expand Down Expand Up @@ -54,3 +55,51 @@ func TestPrintBuildInfoLink(t *testing.T) {
assert.Equal(t, buildPubComService, linkTypes[i].expected)
}
}

func TestCalculateBuildNumberFrequency(t *testing.T) {
tests := []struct {
name string
runs *buildinfo.BuildRuns
expected map[string]int
}{
{
name: "Single build number",
runs: &buildinfo.BuildRuns{
BuildsNumbers: []buildinfo.BuildRun{{Uri: "/1"}},
},
expected: map[string]int{"1": 1},
},
{
name: "Single build number with special characters",
runs: &buildinfo.BuildRuns{
BuildsNumbers: []buildinfo.BuildRun{{Uri: "/1-"}},
},
expected: map[string]int{"1-": 1},
},
{
name: "Multiple build numbers",
runs: &buildinfo.BuildRuns{
BuildsNumbers: []buildinfo.BuildRun{
{Uri: "/1"},
{Uri: "/2"},
{Uri: "/1"},
},
},
expected: map[string]int{"1": 2, "2": 1},
},
{
name: "No build numbers",
runs: &buildinfo.BuildRuns{
BuildsNumbers: []buildinfo.BuildRun{},
},
expected: map[string]int{},
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := CalculateBuildNumberFrequency(tt.runs)
assert.Equal(t, tt.expected, result)
})
}
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ require (

replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250212021126-e5223ab616af

// replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20250126110945-81abbdde452f
replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20250219065446-e17342f27e44

//replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20240811150357-12a9330a2d67
//replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20240811142930-ab9715567376
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,8 @@ github.com/jfrog/gofrog v1.7.6 h1:QmfAiRzVyaI7JYGsB7cxfAJePAZTzFz0gRWZSE27c6s=
github.com/jfrog/gofrog v1.7.6/go.mod h1:ntr1txqNOZtHplmaNd7rS4f8jpA5Apx8em70oYEe7+4=
github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250212021126-e5223ab616af h1:XnyhhyARP1YCzYGdhk8ovpyZV+hSchiTGVTuejrZXsI=
github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250212021126-e5223ab616af/go.mod h1:Hx2houXADsNv0eRh4w5XCS2uSsPNPn1OmiSDdwGFB7g=
github.com/jfrog/jfrog-client-go v1.50.0 h1:t7v/zpLkPomHR6ZjVbPQ1WPQJd9IFKESK9Tt6phZz3k=
github.com/jfrog/jfrog-client-go v1.50.0/go.mod h1:xHxwKBjPSUBd/FyCWgusfHmSWKUZTkfOZkTmntC2F5Y=
github.com/jfrog/jfrog-client-go v1.28.1-0.20250219065446-e17342f27e44 h1:Q2S65q8vk4Yb0B95XGCkcJJCUmJoKsDO5w/A1l6guJ8=
github.com/jfrog/jfrog-client-go v1.28.1-0.20250219065446-e17342f27e44/go.mod h1:hDoUcW6LZme83YNFbdSRImV+di1x0GP+Nlw7fctkwtE=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
Expand Down
Loading