platforms: add support for matching amd64 variants

Correctly matches optional variants for amd64
arch. These should be used for standardized values
v1-v4 from https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels.

V1 remains the default and is cleared by default.
Pulling a higher variant will match the highest
available platform lower or equal to the provided one
when platformVector is used.

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
Tonis Tiigi 2022-01-18 19:39:14 -08:00
parent 2d5f9bf870
commit af83e9af10
3 changed files with 35 additions and 3 deletions

View File

@ -38,12 +38,22 @@ func platformVector(platform specs.Platform) []specs.Platform {
switch platform.Architecture { switch platform.Architecture {
case "amd64": 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{ vector = append(vector, specs.Platform{
Architecture: "386", Architecture: "386",
OS: platform.OS, OS: platform.OS,
OSVersion: platform.OSVersion, OSVersion: platform.OSVersion,
OSFeatures: platform.OSFeatures, OSFeatures: platform.OSFeatures,
Variant: platform.Variant,
}) })
case "arm": case "arm":
if armVersion, err := strconv.Atoi(strings.TrimPrefix(platform.Variant, "v")); err == nil && armVersion > 5 { if armVersion, err := strconv.Atoi(strings.TrimPrefix(platform.Variant, "v")); err == nil && armVersion > 5 {

View File

@ -33,6 +33,26 @@ func TestOnly(t *testing.T) {
"linux/386", "linux/386",
}, },
false: { 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/arm/v7",
"linux/arm64", "linux/arm64",
"windows/amd64", "windows/amd64",

View File

@ -86,9 +86,11 @@ func normalizeArch(arch, variant string) (string, string) {
case "i386": case "i386":
arch = "386" arch = "386"
variant = "" variant = ""
case "x86_64", "x86-64": case "x86_64", "x86-64", "amd64":
arch = "amd64" arch = "amd64"
variant = "" if variant == "v1" {
variant = ""
}
case "aarch64", "arm64": case "aarch64", "arm64":
arch = "arm64" arch = "arm64"
switch variant { switch variant {