diff --git a/platforms/compare.go b/platforms/compare.go index c7657e186..3913ef663 100644 --- a/platforms/compare.go +++ b/platforms/compare.go @@ -38,12 +38,22 @@ func platformVector(platform specs.Platform) []specs.Platform { switch platform.Architecture { case "amd64": + if amd64Version, err := strconv.Atoi(strings.TrimPrefix(platform.Variant, "v")); err == nil && amd64Version > 1 { + for amd64Version--; amd64Version >= 1; amd64Version-- { + vector = append(vector, specs.Platform{ + Architecture: platform.Architecture, + OS: platform.OS, + OSVersion: platform.OSVersion, + OSFeatures: platform.OSFeatures, + Variant: "v" + strconv.Itoa(amd64Version), + }) + } + } vector = append(vector, specs.Platform{ Architecture: "386", OS: platform.OS, OSVersion: platform.OSVersion, OSFeatures: platform.OSFeatures, - Variant: platform.Variant, }) case "arm": if armVersion, err := strconv.Atoi(strings.TrimPrefix(platform.Variant, "v")); err == nil && armVersion > 5 { diff --git a/platforms/compare_test.go b/platforms/compare_test.go index b734c2afe..cbe90deea 100644 --- a/platforms/compare_test.go +++ b/platforms/compare_test.go @@ -33,6 +33,26 @@ func TestOnly(t *testing.T) { "linux/386", }, false: { + "linux/amd64/v2", + "linux/arm/v7", + "linux/arm64", + "windows/amd64", + "windows/arm", + }, + }, + }, + { + platform: "linux/amd64/v2", + matches: map[bool][]string{ + true: { + "linux/amd64", + "linux/amd64/v1", + "linux/amd64/v2", + "linux/386", + }, + false: { + "linux/amd64/v3", + "linux/amd64/v4", "linux/arm/v7", "linux/arm64", "windows/amd64", diff --git a/platforms/database.go b/platforms/database.go index cdf8ceb4c..dbe9957ca 100644 --- a/platforms/database.go +++ b/platforms/database.go @@ -86,9 +86,11 @@ func normalizeArch(arch, variant string) (string, string) { case "i386": arch = "386" variant = "" - case "x86_64", "x86-64": + case "x86_64", "x86-64", "amd64": arch = "amd64" - variant = "" + if variant == "v1" { + variant = "" + } case "aarch64", "arm64": arch = "arm64" switch variant {