From 4024a8274b2a5c50f7fa6b858743eb01e2bf5a9b Mon Sep 17 00:00:00 2001 From: "James O. D. Hunt" Date: Thu, 12 Nov 2020 10:04:00 +0000 Subject: [PATCH 1/3] release: Make error format string consistent Use `%s` for both semver parameters. Signed-off-by: James O. D. Hunt --- src/runtime/cli/release.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/cli/release.go b/src/runtime/cli/release.go index b37abf9b57..e4ac1f246e 100644 --- a/src/runtime/cli/release.go +++ b/src/runtime/cli/release.go @@ -322,7 +322,7 @@ func getNewReleaseType(current semver.Version, latest semver.Version) (string, e } else if latest.Patch == current.Patch && len(latest.Pre) > 0 { desc = "pre-release" } else { - return "", fmt.Errorf("BUG: unhandled scenario: current version: %s, latest version: %v", current, latest) + return "", fmt.Errorf("BUG: unhandled scenario: current version: %s, latest version: %s", current, latest) } return desc, nil From 2e0bf40adb02a8e8e23cf92d1ec02e49f64caae9 Mon Sep 17 00:00:00 2001 From: "James O. D. Hunt" Date: Thu, 12 Nov 2020 10:06:15 +0000 Subject: [PATCH 2/3] tests: Ensure semver build metadata is ignored According to the Semantic Versioning specification, build metadata must be ignored for version comparisions, so add some explicit tests for this scenario to `TestGetNewReleaseType()`. Signed-off-by: James O. D. Hunt --- src/runtime/cli/release_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/runtime/cli/release_test.go b/src/runtime/cli/release_test.go index 370dcdfbae..b6c74c323c 100644 --- a/src/runtime/cli/release_test.go +++ b/src/runtime/cli/release_test.go @@ -458,6 +458,21 @@ func TestGetNewReleaseType(t *testing.T) { } data := []testData{ + // Check build metadata (ignored for version comparisions) + {"2.0.0+build", "2.0.0", true, ""}, + {"2.0.0+build-1", "2.0.0+build-2", true, ""}, + {"1.12.0+build", "1.12.0", true, ""}, + + {"2.0.0-rc3+foo", "2.0.0", false, "major"}, + {"2.0.0-rc3+foo", "2.0.0-rc4", false, "pre-release"}, + {"1.12.0+foo", "1.13.0", false, "minor"}, + + {"1.12.0+build", "2.0.0", false, "major"}, + {"1.12.0+build", "1.13.0", false, "minor"}, + {"1.12.0-rc2+build", "1.12.1", false, "patch"}, + {"1.12.0-rc2+build", "1.12.1-foo", false, "patch pre-release"}, + {"1.12.0-rc4+wibble", "1.12.0", false, "major"}, + {"2.0.0-alpha3", "1.0.0", true, ""}, {"1.0.0", "1.0.0", true, ""}, {"2.0.0", "1.0.0", true, ""}, From 8f38265be430d4d1adcf132b6b23c9784fe6beb8 Mon Sep 17 00:00:00 2001 From: "James O. D. Hunt" Date: Thu, 12 Nov 2020 10:07:18 +0000 Subject: [PATCH 3/3] release: Fix release candidate to major version upgrade check Fix `kata-runtime kata-check`'s network version check which was failing when the user was running a release candidate build and the latest release was a major one, two examples of the error being: - `BUG: unhandled scenario: current version: 1.12.0-rc0, latest version: 1.12.0` - `BUG: unhandled scenario: current version: 2.0.0-rc0, latest version: 2.0.0` Fixes: #1104. Signed-off-by: James O. D. Hunt --- src/runtime/cli/release.go | 6 ++++++ src/runtime/cli/release_test.go | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/runtime/cli/release.go b/src/runtime/cli/release.go index e4ac1f246e..87e4966124 100644 --- a/src/runtime/cli/release.go +++ b/src/runtime/cli/release.go @@ -321,6 +321,12 @@ func getNewReleaseType(current semver.Version, latest semver.Version) (string, e } } else if latest.Patch == current.Patch && len(latest.Pre) > 0 { desc = "pre-release" + } else if latest.Major == current.Major && + latest.Minor == current.Minor && + latest.Patch == current.Patch { + if len(current.Pre) > 0 && len(latest.Pre) == 0 { + desc = "major" + } } else { return "", fmt.Errorf("BUG: unhandled scenario: current version: %s, latest version: %s", current, latest) } diff --git a/src/runtime/cli/release_test.go b/src/runtime/cli/release_test.go index b6c74c323c..b6d94ac0f5 100644 --- a/src/runtime/cli/release_test.go +++ b/src/runtime/cli/release_test.go @@ -488,6 +488,12 @@ func TestGetNewReleaseType(t *testing.T) { {"1.0.0", "1.0.3", false, "patch"}, {"1.0.0-beta29", "1.0.0-beta30", false, "pre-release"}, {"1.0.0", "1.0.3-alpha99.1b", false, "patch pre-release"}, + + {"2.0.0-rc0", "2.0.0", false, "major"}, + {"2.0.0-rc1", "2.0.0", false, "major"}, + + {"1.12.0-rc0", "1.12.0", false, "major"}, + {"1.12.0-rc5", "1.12.0", false, "major"}, } for i, d := range data {