From e5c0a7cecb06d284b81ff20c8c3b74e251a2a61b Mon Sep 17 00:00:00 2001 From: Luca Guerra Date: Mon, 11 Sep 2023 18:13:50 +0200 Subject: [PATCH] fix(build): update latest even if higher prereleases are present Signed-off-by: Luca Guerra --- build/registry/tag.go | 13 ++++++++----- build/registry/tag_test.go | 2 ++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/build/registry/tag.go b/build/registry/tag.go index 5a2487838..e5634f620 100644 --- a/build/registry/tag.go +++ b/build/registry/tag.go @@ -100,22 +100,25 @@ func ociTagsToUpdate(newTag string, existingTags []string) []string { return tagsToUpdate } - var existingSemvers []semver.Version + var existingFinalSemvers []semver.Version for _, tag := range existingTags { if sv, err := semver.Parse(tag); err == nil { - existingSemvers = append(existingSemvers, sv) + // ignore prereleases + if len(sv.Pre) == 0 { + existingFinalSemvers = append(existingFinalSemvers, sv) + } } } - if isLatestSemverForMinor(newSemver, existingSemvers) { + if isLatestSemverForMinor(newSemver, existingFinalSemvers) { tagsToUpdate = append(tagsToUpdate, fmt.Sprintf("%d.%d", newSemver.Major, newSemver.Minor)) } - if isLatestSemverForMajor(newSemver, existingSemvers) { + if isLatestSemverForMajor(newSemver, existingFinalSemvers) { tagsToUpdate = append(tagsToUpdate, fmt.Sprintf("%d", newSemver.Major)) } - if isLatestSemver(newSemver, existingSemvers) { + if isLatestSemver(newSemver, existingFinalSemvers) { tagsToUpdate = append(tagsToUpdate, "latest") } diff --git a/build/registry/tag_test.go b/build/registry/tag_test.go index bb6443865..589037cb2 100644 --- a/build/registry/tag_test.go +++ b/build/registry/tag_test.go @@ -71,6 +71,8 @@ func Test_ociTagsToUpdate(t *testing.T) { {"latest_in_line", "0.1.3", []string{"0.1.2", "0.2.0", "0.3.1"}, []string{"0.1.3", "0.1"}}, {"version_1", "1.0.2", []string{"0.1.2", "0.2.0", "1.0.0", "2.0.0", "2.0.2"}, []string{"1", "1.0", "1.0.2"}}, {"prerelease", "0.1.4-rc1", []string{"0.1.2", "0.1.3"}, []string{"0.1.4-rc1"}}, + {"latest_with_prerelease", "1.0.2", []string{"1.0.0", "1.0.1", "2.0.0-rc1"}, []string{"1", "1.0", "1.0.2", "latest"}}, + {"not_latest_with_prerelease", "1.0.2", []string{"1.0.0", "1.0.1", "2.0.0-rc1", "2.0.0"}, []string{"1", "1.0", "1.0.2"}}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) {