image/cache: Require Major and Minor match for Windows OSVersion

The platform comparison was backported from the branch that vendors
containerd 1.7.

In this branch the vendored containerd version is older and doesn't have
the same comparison logic for Windows specific OSVersion.

Require both major and minor components of Windows OSVersion to match.

Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
This commit is contained in:
Paweł Gronowski 2024-02-06 16:10:23 +01:00
parent f110a9d310
commit b3888ed899
No known key found for this signature in database
GPG key ID: B85EFCFE26DEF92A
2 changed files with 7 additions and 6 deletions

View file

@ -26,6 +26,13 @@ func comparePlatform(builderPlatform, imagePlatform ocispec.Platform) bool {
builderParts := strings.Split(builderPlatform.OSVersion, ".")
imageParts := strings.Split(imagePlatform.OSVersion, ".")
// Major and minor must match.
for i := 0; i < 2; i++ {
if len(builderParts) > i && len(imageParts) > i && builderParts[i] != imageParts[i] {
return false
}
}
if len(builderParts) >= 3 && len(imageParts) >= 3 {
// Keep only Major & Minor.
builderParts[0] = imageParts[0]

View file

@ -193,12 +193,6 @@ func TestPlatformCompare(t *testing.T) {
},
} {
tc := tc
// OSVersion comparison is only performed by containerd platform
// matcher if built on Windows.
if (tc.image.OSVersion != "" || tc.builder.OSVersion != "") && runtime.GOOS != "windows" {
continue
}
t.Run(tc.name, func(t *testing.T) {
assert.Check(t, is.Equal(comparePlatform(tc.builder, tc.image), tc.expected))
})