Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package nova for openSUSE:Factory checked in at 2026-10-13 17:44:49 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/nova (Old) and /work/SRC/openSUSE:Factory/.nova.new.3698736 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nova" Tue Oct 13 17:44:49 2026 rev:42 rq:1384474 version:3.12.2 Changes: -------- --- /work/SRC/openSUSE:Factory/nova/nova.changes 2026-09-19 22:22:50.373851286 +0200 +++ /work/SRC/openSUSE:Factory/.nova.new.3698736/nova.changes 2026-10-13 17:44:55.723267785 +0200 @@ -1,0 +2,7 @@ +Tue Oct 13 04:30:06 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 3.12.2: + * INS-3021: Nova incorrectly suggests there's new version + available if using compatibility flag (#485) + +------------------------------------------------------------------- Old: ---- nova-3.12.1.obscpio New: ---- nova-3.12.2.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ nova.spec ++++++ --- /var/tmp/diff_new_pack.vuznHx/_old 2026-10-13 17:44:58.015363844 +0200 +++ /var/tmp/diff_new_pack.vuznHx/_new 2026-10-13 17:44:58.018363970 +0200 @@ -17,7 +17,7 @@ Name: nova -Version: 3.12.1 +Version: 3.12.2 Release: 0 Summary: Find outdated or deprecated Helm charts running in your cluster License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.vuznHx/_old 2026-10-13 17:44:58.128368580 +0200 +++ /var/tmp/diff_new_pack.vuznHx/_new 2026-10-13 17:44:58.139369041 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/FairwindsOps/nova.git</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">refs/tags/v3.12.1</param> + <param name="revision">refs/tags/v3.12.2</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.vuznHx/_old 2026-10-13 17:44:58.219372394 +0200 +++ /var/tmp/diff_new_pack.vuznHx/_new 2026-10-13 17:44:58.229372813 +0200 @@ -3,6 +3,6 @@ <param name="url">https://github.com/FairwindsOps/nova</param> <param name="changesrevision">0803b0840d990bbf6518951899fcf8b948acc971</param></service><service name="tar_scm"> <param name="url">https://github.com/FairwindsOps/nova.git</param> - <param name="changesrevision">686e939f41cd8e72b3e888b989622b3aa5d0700d</param></service></servicedata> + <param name="changesrevision">42acc2769fb010870b6150f3c215b6a4858ec350</param></service></servicedata> (No newline at EOF) ++++++ nova-3.12.1.obscpio -> nova-3.12.2.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-3.12.1/pkg/containers/images.go new/nova-3.12.2/pkg/containers/images.go --- old/nova-3.12.1/pkg/containers/images.go 2026-09-15 19:51:18.000000000 +0200 +++ new/nova-3.12.2/pkg/containers/images.go 2026-10-12 18:50:16.000000000 +0200 @@ -300,12 +300,18 @@ if err != nil { return errors.Wrap(err, "failed to create constraint") } - // The goal of the filter below is to find things like "1.2.3-alpine" or "1.2.3-buster" and make sure we only give upgrade suggestions that match. - // There may be unintended consequenses from this. We do our best by ignoring actual common pre-release tags in the variable preReleaseIgnore. - // This means if you are currently running 1.2.3-beta.0 the filter will not limit the upgrade suggestions to other beta releases. + // Suffixes like "alpine" or "distroless" are parsed as semver prereleases, but they + // mark an image variant. Semver ranks 1.2.3 above 1.2.3-distroless, so the bare tag + // looks newer. Only suggest tags with the same suffix. Real prereleases (alpha, beta, + // rc, ...) are not variants: a later stable release is still an upgrade. filter := i.Current.version.Prerelease() + compatibilitySuffix := filter != "" && !preReleaseRegex(preReleaseIgnore, filter) for _, tag := range i.semverTags { - if tag.Prerelease() != filter && preReleaseRegex(preReleaseIgnore, tag.Prerelease()) { + if compatibilitySuffix { + if tag.Prerelease() != filter { + continue + } + } else if tag.Prerelease() != filter && preReleaseRegex(preReleaseIgnore, tag.Prerelease()) { continue } if constraint.Check(tag) { @@ -327,6 +333,8 @@ if err != nil { return errors.Wrap(err, "failed to create minor version constraint") } + // Wildcard constraints ignore prereleases unless asked. The suffix is not a prerelease. + newerMinorConstraint.IncludePrerelease = compatibilitySuffix for _, tag := range newerTags { if newerMinorConstraint.Check(tag) { i.NewestMinor = &Tag{ @@ -341,6 +349,7 @@ if err != nil { return errors.Wrap(err, "failed to create patch version constraint") } + newerPatchConstraint.IncludePrerelease = compatibilitySuffix for _, tag := range newerTags { if newerPatchConstraint.Check(tag) { i.NewestPatch = &Tag{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-3.12.1/pkg/containers/images_test.go new/nova-3.12.2/pkg/containers/images_test.go --- old/nova-3.12.1/pkg/containers/images_test.go 2026-09-15 19:51:18.000000000 +0200 +++ new/nova-3.12.2/pkg/containers/images_test.go 2026-10-12 18:50:16.000000000 +0200 @@ -294,6 +294,67 @@ newestPatch: "1.0.2", wantErr: false, }, + { + name: "TestPopulateNewestCompatibilitySuffix", + image: &Image{ + Name: "prom/node-exporter", + Prefix: "v", + Current: &Tag{ + version: version.MustParse("1.12.1-distroless"), + Value: "1.12.1-distroless", + }, + allTags: []string{ + "v1.12.1", + "v1.12.1-distroless", + "v1.12.2", + "v1.12.2-distroless", + "v1.13.0", + "v1.13.0-alpine", + "v1.13.0-distroless", + "v1.14.0-beta.1", + }, + }, + newestTag: "1.13.0-distroless", + newestMinor: "1.13.0-distroless", + newestPatch: "1.12.2-distroless", + }, + { + name: "TestPopulateNewestCompatibilitySuffixSameVersion", + image: &Image{ + Name: "prom/node-exporter", + Prefix: "v", + Current: &Tag{ + version: version.MustParse("1.12.1-distroless"), + Value: "1.12.1-distroless", + }, + allTags: []string{ + "v1.11.0-distroless", + "v1.12.1", + "v1.12.1-distroless", + "v1.13.0", + }, + }, + }, + { + name: "TestPopulateNewestPrereleaseStillUpgrades", + image: &Image{ + Prefix: "v", + Current: &Tag{ + version: version.MustParse("1.2.3-beta.0"), + Value: "1.2.3-beta.0", + }, + allTags: []string{ + "v1.2.3-beta.0", + "v1.2.3-beta.1", + "v1.2.3", + "v1.2.4-alpha.1", + "v1.2.4", + }, + }, + newestTag: "1.2.4", + newestMinor: "1.2.4", + newestPatch: "1.2.4", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -304,19 +365,26 @@ t.Errorf("populateNewest() error = %v, wantErr %v", err, tt.wantErr) return } - if got.Newest.Value != tt.newestTag { - t.Errorf("populateNewest() Newest.Value got = %v, want %v", got.Newest.Value, tt.newestTag) + if tagValue(got.Newest) != tt.newestTag { + t.Errorf("populateNewest() Newest.Value got = %v, want %v", tagValue(got.Newest), tt.newestTag) } - if got.NewestMinor.Value != tt.newestMinor { - t.Errorf("populateNewest() NewestMinor.Value got = %v, want %v", got.NewestMinor.Value, tt.newestMinor) + if tagValue(got.NewestMinor) != tt.newestMinor { + t.Errorf("populateNewest() NewestMinor.Value got = %v, want %v", tagValue(got.NewestMinor), tt.newestMinor) } - if got.NewestPatch.Value != tt.newestPatch { - t.Errorf("populateNewest() NewestPatch.Value got = %v, want %v", got.NewestPatch.Value, tt.newestPatch) + if tagValue(got.NewestPatch) != tt.newestPatch { + t.Errorf("populateNewest() NewestPatch.Value got = %v, want %v", tagValue(got.NewestPatch), tt.newestPatch) } }) } } +func tagValue(tag *Tag) string { + if tag == nil { + return "" + } + return tag.Value +} + func TestParseTagString(t *testing.T) { tests := []struct { name string @@ -377,4 +445,3 @@ }) } } - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/nova-3.12.1/renovate.json new/nova-3.12.2/renovate.json --- old/nova-3.12.1/renovate.json 2026-09-15 19:51:18.000000000 +0200 +++ new/nova-3.12.2/renovate.json 2026-10-12 18:50:16.000000000 +0200 @@ -11,58 +11,9 @@ "minimumReleaseAge": "7 days", "enabledManagers": [ "gomod", - "dockerfile", - "circleci", - "custom.regex" + "dockerfile" ], "postUpdateOptions": ["gomodTidy", "gomodUpdateImportPaths"], - "customManagers": [ - { - "description": "HashiCorp Vault download URL in CircleCI", - "customType": "regex", - "managerFilePatterns": ["/(^|/)\\.circleci/config\\.yml$/"], - "matchStrings": [ - "https://releases\\.hashicorp\\.com/vault/(?<currentValue>[\\d.]+)/vault_[\\d.]+_linux_amd64\\.zip" - ], - "depNameTemplate": "hashicorp/vault", - "datasourceTemplate": "hashicorp-releases", - "autoReplaceStringTemplate": "https://releases.hashicorp.com/vault/{{{newValue}}}/vault_{{{newValue}}}_linux_amd64.zip" - }, - { - "description": "HashiCorp Vault archive name in CircleCI (sha256 line must be updated manually)", - "customType": "regex", - "managerFilePatterns": ["/(^|/)\\.circleci/config\\.yml$/"], - "matchStrings": [ - "vault_(?<currentValue>[\\d.]+)_linux_amd64\\.zip" - ], - "depNameTemplate": "hashicorp/vault", - "datasourceTemplate": "hashicorp-releases", - "autoReplaceStringTemplate": "vault_{{{newValue}}}_linux_amd64.zip" - }, - { - "description": "golangci-lint install.sh pin in CircleCI", - "customType": "regex", - "managerFilePatterns": ["/(^|/)\\.circleci/config\\.yml$/"], - "matchStrings": [ - "golangci/golangci-lint/HEAD/install.sh \\| sh -s -- -b /usr/local/bin v(?<currentValue>[0-9.]+)" - ], - "depNameTemplate": "golangci/golangci-lint", - "datasourceTemplate": "github-releases", - "extractVersionTemplate": "^v?(?<version>.*)$", - "autoReplaceStringTemplate": "golangci/golangci-lint/HEAD/install.sh | sh -s -- -b /usr/local/bin v{{{newValue}}}" - }, - { - "description": "Kind node image for rok8s-scripts kubernetes_e2e_tests", - "customType": "regex", - "managerFilePatterns": ["/(^|/)\\.circleci/config\\.yml$/"], - "matchStrings": [ - "kind_node_image:\\s*\"kindest/node:(?<currentValue>v[^\"\\s]+)\"" - ], - "depNameTemplate": "kindest/node", - "datasourceTemplate": "docker", - "autoReplaceStringTemplate": "kind_node_image: \"kindest/node:{{{newValue}}}\"" - } - ], "packageRules": [ { "description": "Group all non-major (minor + patch) updates into a single PR", @@ -84,14 +35,8 @@ }, { "description": "Every upgrade: upstream release must be at least 7 days old", - "matchManagers": ["gomod", "dockerfile", "circleci", "custom.regex"], + "matchManagers": ["gomod", "dockerfile"], "minimumReleaseAge": "7 days" - }, - { - "description": "Group HashiCorp Vault version bumps (sha256 checksum still needs manual update)", - "groupName": "HashiCorp Vault", - "matchManagers": ["custom.regex"], - "matchDepNames": ["hashicorp/vault"] } ] } ++++++ nova.obsinfo ++++++ --- /var/tmp/diff_new_pack.vuznHx/_old 2026-10-13 17:45:00.192455083 +0200 +++ /var/tmp/diff_new_pack.vuznHx/_new 2026-10-13 17:45:00.206455669 +0200 @@ -1,5 +1,5 @@ name: nova -version: 3.12.1 -mtime: 1789494678 -commit: 686e939f41cd8e72b3e888b989622b3aa5d0700d +version: 3.12.2 +mtime: 1791823816 +commit: 42acc2769fb010870b6150f3c215b6a4858ec350 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/nova/vendor.tar.gz /work/SRC/openSUSE:Factory/.nova.new.3698736/vendor.tar.gz differ: char 130, line 2
