Skip to content

Commit

Permalink
Add fallback for windows platforms without osversion
Browse files Browse the repository at this point in the history
The background for this change:

1. Windows host-process containers do not have an OS version set
2. Buildx v0.10 started pushing manifest lists by default, but it never
   has the OSVersion in the platform data (not that there is any way to
   specify what particular OS version you want). The change means that
   containerd cannot run images created with the new buildx on Windows
   because there is no matching OSVersion in the list of manifests.

Signed-off-by: Brian Goff <[email protected]>
  • Loading branch information
cpuguy83 committed Feb 13, 2023
1 parent edb8eba commit 8442521
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
5 changes: 4 additions & 1 deletion platforms/defaults_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,10 @@ func (m windowsmatcher) Match(p specs.Platform) bool {
match := m.defaultMatcher.Match(p)

if match && m.OS == "windows" {
return strings.HasPrefix(p.OSVersion, m.osVersionPrefix) && m.defaultMatcher.Match(p)
if strings.HasPrefix(p.OSVersion, m.osVersionPrefix) {
return true
}
return p.OSVersion == ""
}

return match
Expand Down
4 changes: 2 additions & 2 deletions platforms/defaults_windows_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ func TestMatchComparerMatch_WCOW(t *testing.T) {
Architecture: "amd64",
OS: "windows",
},
match: false,
match: true,
},
{
platform: imagespec.Platform{
Expand Down Expand Up @@ -251,11 +251,11 @@ func TestMatchComparerLess(t *testing.T) {
{
Architecture: "amd64",
OS: "windows",
OSVersion: "10.0.17764.1",
},
{
Architecture: "amd64",
OS: "windows",
OSVersion: "10.0.17764.1",
},
{
Architecture: "amd64",
Expand Down
14 changes: 14 additions & 0 deletions platforms/platforms_windows_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,23 @@ package platforms
import (
"testing"

specs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/stretchr/testify/require"
)

func TestNormalize(t *testing.T) {
require.Equal(t, DefaultSpec(), Normalize(DefaultSpec()))
}

func TestFallbackOnOSVersion(t *testing.T) {
p := specs.Platform{
OS: "windows",
Architecture: "amd64",
OSVersion: "99.99.99.99",
}

other := specs.Platform{OS: p.OS, Architecture: p.Architecture}

m := NewMatcher(p)
require.True(t, m.Match(other))
}

0 comments on commit 8442521

Please sign in to comment.