Merge pull request #10218 from kiashok/update-platform-pkg
Update platforms package to v0.2.0
This commit is contained in:
		
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							@@ -21,7 +21,7 @@ require (
 | 
				
			|||||||
	github.com/containerd/go-runc v1.1.0
 | 
						github.com/containerd/go-runc v1.1.0
 | 
				
			||||||
	github.com/containerd/log v0.1.0
 | 
						github.com/containerd/log v0.1.0
 | 
				
			||||||
	github.com/containerd/nri v0.6.1
 | 
						github.com/containerd/nri v0.6.1
 | 
				
			||||||
	github.com/containerd/platforms v0.1.1
 | 
						github.com/containerd/platforms v0.2.0
 | 
				
			||||||
	github.com/containerd/plugin v0.1.0
 | 
						github.com/containerd/plugin v0.1.0
 | 
				
			||||||
	github.com/containerd/ttrpc v1.2.3
 | 
						github.com/containerd/ttrpc v1.2.3
 | 
				
			||||||
	github.com/containerd/typeurl/v2 v2.1.1
 | 
						github.com/containerd/typeurl/v2 v2.1.1
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
									
									
									
									
								
							@@ -57,8 +57,8 @@ github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
 | 
				
			|||||||
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
 | 
					github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
 | 
				
			||||||
github.com/containerd/nri v0.6.1 h1:xSQ6elnQ4Ynidm9u49ARK9wRKHs80HCUI+bkXOxV4mA=
 | 
					github.com/containerd/nri v0.6.1 h1:xSQ6elnQ4Ynidm9u49ARK9wRKHs80HCUI+bkXOxV4mA=
 | 
				
			||||||
github.com/containerd/nri v0.6.1/go.mod h1:7+sX3wNx+LR7RzhjnJiUkFDhn18P5Bg/0VnJ/uXpRJM=
 | 
					github.com/containerd/nri v0.6.1/go.mod h1:7+sX3wNx+LR7RzhjnJiUkFDhn18P5Bg/0VnJ/uXpRJM=
 | 
				
			||||||
github.com/containerd/platforms v0.1.1 h1:gp0xXBoY+1CjH54gJDon0kBjIbK2C4XSX1BGwP5ptG0=
 | 
					github.com/containerd/platforms v0.2.0 h1:clGNvVIcY3k39VJSYdFGohI1b3bP/eeBUVR5+XA28oo=
 | 
				
			||||||
github.com/containerd/platforms v0.1.1/go.mod h1:XOM2BS6kN6gXafPLg80V6y/QUib+xoLyC3qVmHzibko=
 | 
					github.com/containerd/platforms v0.2.0/go.mod h1:XOM2BS6kN6gXafPLg80V6y/QUib+xoLyC3qVmHzibko=
 | 
				
			||||||
github.com/containerd/plugin v0.1.0 h1:CYMyZk9beRAIe1FEKItbMLLAz/z16aXrGc+B+nv0fU4=
 | 
					github.com/containerd/plugin v0.1.0 h1:CYMyZk9beRAIe1FEKItbMLLAz/z16aXrGc+B+nv0fU4=
 | 
				
			||||||
github.com/containerd/plugin v0.1.0/go.mod h1:j6HlpMtkiZMgT4UsfVNxPBUkwdw9KQGU6nCLfRxnq+w=
 | 
					github.com/containerd/plugin v0.1.0/go.mod h1:j6HlpMtkiZMgT4UsfVNxPBUkwdw9KQGU6nCLfRxnq+w=
 | 
				
			||||||
github.com/containerd/ttrpc v1.2.3 h1:4jlhbXIGvijRtNC8F/5CpuJZ7yKOBFGFOOXg1bkISz0=
 | 
					github.com/containerd/ttrpc v1.2.3 h1:4jlhbXIGvijRtNC8F/5CpuJZ7yKOBFGFOOXg1bkISz0=
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								vendor/github.com/containerd/platforms/defaults.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								vendor/github.com/containerd/platforms/defaults.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -16,9 +16,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
package platforms
 | 
					package platforms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DefaultString returns the default string specifier for the platform.
 | 
					// DefaultString returns the default string specifier for the platform,
 | 
				
			||||||
 | 
					// with [PR#6](https://github.com/containerd/platforms/pull/6) the result
 | 
				
			||||||
 | 
					// may now also include the OSVersion from the provided platform specification.
 | 
				
			||||||
func DefaultString() string {
 | 
					func DefaultString() string {
 | 
				
			||||||
	return Format(DefaultSpec())
 | 
						return FormatAll(DefaultSpec())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DefaultStrict returns strict form of Default.
 | 
					// DefaultStrict returns strict form of Default.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										72
									
								
								vendor/github.com/containerd/platforms/platforms.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										72
									
								
								vendor/github.com/containerd/platforms/platforms.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -121,9 +121,12 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var (
 | 
					var (
 | 
				
			||||||
	specifierRe = regexp.MustCompile(`^[A-Za-z0-9_-]+$`)
 | 
						specifierRe    = regexp.MustCompile(`^[A-Za-z0-9_-]+$`)
 | 
				
			||||||
 | 
						osAndVersionRe = regexp.MustCompile(`^([A-Za-z0-9_-]+)(?:\(([A-Za-z0-9_.-]*)\))?$`)
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const osAndVersionFormat = "%s(%s)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Platform is a type alias for convenience, so there is no need to import image-spec package everywhere.
 | 
					// Platform is a type alias for convenience, so there is no need to import image-spec package everywhere.
 | 
				
			||||||
type Platform = specs.Platform
 | 
					type Platform = specs.Platform
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -156,7 +159,7 @@ func (m *matcher) Match(platform specs.Platform) bool {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (m *matcher) String() string {
 | 
					func (m *matcher) String() string {
 | 
				
			||||||
	return Format(m.Platform)
 | 
						return FormatAll(m.Platform)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ParseAll parses a list of platform specifiers into a list of platform.
 | 
					// ParseAll parses a list of platform specifiers into a list of platform.
 | 
				
			||||||
@@ -174,9 +177,12 @@ func ParseAll(specifiers []string) ([]specs.Platform, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Parse parses the platform specifier syntax into a platform declaration.
 | 
					// Parse parses the platform specifier syntax into a platform declaration.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Platform specifiers are in the format `<os>|<arch>|<os>/<arch>[/<variant>]`.
 | 
					// Platform specifiers are in the format `<os>[(<OSVersion>)]|<arch>|<os>[(<OSVersion>)]/<arch>[/<variant>]`.
 | 
				
			||||||
// The minimum required information for a platform specifier is the operating
 | 
					// The minimum required information for a platform specifier is the operating
 | 
				
			||||||
// system or architecture. If there is only a single string (no slashes), the
 | 
					// system or architecture. The OSVersion can be part of the OS like `windows(10.0.17763)`
 | 
				
			||||||
 | 
					// When an OSVersion is specified, then specs.Platform.OSVersion is populated with that value,
 | 
				
			||||||
 | 
					// and an empty string otherwise.
 | 
				
			||||||
 | 
					// If there is only a single string (no slashes), the
 | 
				
			||||||
// value will be matched against the known set of operating systems, then fall
 | 
					// value will be matched against the known set of operating systems, then fall
 | 
				
			||||||
// back to the known set of architectures. The missing component will be
 | 
					// back to the known set of architectures. The missing component will be
 | 
				
			||||||
// inferred based on the local environment.
 | 
					// inferred based on the local environment.
 | 
				
			||||||
@@ -186,23 +192,35 @@ func Parse(specifier string) (specs.Platform, error) {
 | 
				
			|||||||
		return specs.Platform{}, fmt.Errorf("%q: wildcards not yet supported: %w", specifier, errInvalidArgument)
 | 
							return specs.Platform{}, fmt.Errorf("%q: wildcards not yet supported: %w", specifier, errInvalidArgument)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	parts := strings.Split(specifier, "/")
 | 
						// Limit to 4 elements to prevent unbounded split
 | 
				
			||||||
 | 
						parts := strings.SplitN(specifier, "/", 4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, part := range parts {
 | 
						var p specs.Platform
 | 
				
			||||||
		if !specifierRe.MatchString(part) {
 | 
						for i, part := range parts {
 | 
				
			||||||
			return specs.Platform{}, fmt.Errorf("%q is an invalid component of %q: platform specifier component must match %q: %w", part, specifier, specifierRe.String(), errInvalidArgument)
 | 
							if i == 0 {
 | 
				
			||||||
 | 
								// First element is <os>[(<OSVersion>)]
 | 
				
			||||||
 | 
								osVer := osAndVersionRe.FindStringSubmatch(part)
 | 
				
			||||||
 | 
								if osVer == nil {
 | 
				
			||||||
 | 
									return specs.Platform{}, fmt.Errorf("%q is an invalid OS component of %q: OSAndVersion specifier component must match %q: %w", part, specifier, osAndVersionRe.String(), errInvalidArgument)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								p.OS = normalizeOS(osVer[1])
 | 
				
			||||||
 | 
								p.OSVersion = osVer[2]
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								if !specifierRe.MatchString(part) {
 | 
				
			||||||
 | 
									return specs.Platform{}, fmt.Errorf("%q is an invalid component of %q: platform specifier component must match %q: %w", part, specifier, specifierRe.String(), errInvalidArgument)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var p specs.Platform
 | 
					 | 
				
			||||||
	switch len(parts) {
 | 
						switch len(parts) {
 | 
				
			||||||
	case 1:
 | 
						case 1:
 | 
				
			||||||
		// in this case, we will test that the value might be an OS, then look
 | 
							// in this case, we will test that the value might be an OS (with or
 | 
				
			||||||
		// it up. If it is not known, we'll treat it as an architecture. Since
 | 
							// without the optional OSVersion specified) and look it up.
 | 
				
			||||||
 | 
							// If it is not known, we'll treat it as an architecture. Since
 | 
				
			||||||
		// we have very little information about the platform here, we are
 | 
							// we have very little information about the platform here, we are
 | 
				
			||||||
		// going to be a little more strict if we don't know about the argument
 | 
							// going to be a little more strict if we don't know about the argument
 | 
				
			||||||
		// value.
 | 
							// value.
 | 
				
			||||||
		p.OS = normalizeOS(parts[0])
 | 
					 | 
				
			||||||
		if isKnownOS(p.OS) {
 | 
							if isKnownOS(p.OS) {
 | 
				
			||||||
			// picks a default architecture
 | 
								// picks a default architecture
 | 
				
			||||||
			p.Architecture = runtime.GOARCH
 | 
								p.Architecture = runtime.GOARCH
 | 
				
			||||||
@@ -210,10 +228,6 @@ func Parse(specifier string) (specs.Platform, error) {
 | 
				
			|||||||
				p.Variant = cpuVariant()
 | 
									p.Variant = cpuVariant()
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if p.OS == "windows" {
 | 
					 | 
				
			||||||
				p.OSVersion = GetWindowsOsVersion()
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			return p, nil
 | 
								return p, nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -228,31 +242,21 @@ func Parse(specifier string) (specs.Platform, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		return specs.Platform{}, fmt.Errorf("%q: unknown operating system or architecture: %w", specifier, errInvalidArgument)
 | 
							return specs.Platform{}, fmt.Errorf("%q: unknown operating system or architecture: %w", specifier, errInvalidArgument)
 | 
				
			||||||
	case 2:
 | 
						case 2:
 | 
				
			||||||
		// In this case, we treat as a regular os/arch pair. We don't care
 | 
							// In this case, we treat as a regular OS[(OSVersion)]/arch pair. We don't care
 | 
				
			||||||
		// about whether or not we know of the platform.
 | 
							// about whether or not we know of the platform.
 | 
				
			||||||
		p.OS = normalizeOS(parts[0])
 | 
					 | 
				
			||||||
		p.Architecture, p.Variant = normalizeArch(parts[1], "")
 | 
							p.Architecture, p.Variant = normalizeArch(parts[1], "")
 | 
				
			||||||
		if p.Architecture == "arm" && p.Variant == "v7" {
 | 
							if p.Architecture == "arm" && p.Variant == "v7" {
 | 
				
			||||||
			p.Variant = ""
 | 
								p.Variant = ""
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if p.OS == "windows" {
 | 
					 | 
				
			||||||
			p.OSVersion = GetWindowsOsVersion()
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return p, nil
 | 
							return p, nil
 | 
				
			||||||
	case 3:
 | 
						case 3:
 | 
				
			||||||
		// we have a fully specified variant, this is rare
 | 
							// we have a fully specified variant, this is rare
 | 
				
			||||||
		p.OS = normalizeOS(parts[0])
 | 
					 | 
				
			||||||
		p.Architecture, p.Variant = normalizeArch(parts[1], parts[2])
 | 
							p.Architecture, p.Variant = normalizeArch(parts[1], parts[2])
 | 
				
			||||||
		if p.Architecture == "arm64" && p.Variant == "" {
 | 
							if p.Architecture == "arm64" && p.Variant == "" {
 | 
				
			||||||
			p.Variant = "v8"
 | 
								p.Variant = "v8"
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if p.OS == "windows" {
 | 
					 | 
				
			||||||
			p.OSVersion = GetWindowsOsVersion()
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return p, nil
 | 
							return p, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -278,6 +282,20 @@ func Format(platform specs.Platform) string {
 | 
				
			|||||||
	return path.Join(platform.OS, platform.Architecture, platform.Variant)
 | 
						return path.Join(platform.OS, platform.Architecture, platform.Variant)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// FormatAll returns a string specifier that also includes the OSVersion from the
 | 
				
			||||||
 | 
					// provided platform specification.
 | 
				
			||||||
 | 
					func FormatAll(platform specs.Platform) string {
 | 
				
			||||||
 | 
						if platform.OS == "" {
 | 
				
			||||||
 | 
							return "unknown"
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if platform.OSVersion != "" {
 | 
				
			||||||
 | 
							OSAndVersion := fmt.Sprintf(osAndVersionFormat, platform.OS, platform.OSVersion)
 | 
				
			||||||
 | 
							return path.Join(OSAndVersion, platform.Architecture, platform.Variant)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return path.Join(platform.OS, platform.Architecture, platform.Variant)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Normalize validates and translate the platform to the canonical value.
 | 
					// Normalize validates and translate the platform to the canonical value.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// For example, if "Aarch64" is encountered, we change it to "arm64" or if
 | 
					// For example, if "Aarch64" is encountered, we change it to "arm64" or if
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/github.com/containerd/platforms/platforms_other.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/github.com/containerd/platforms/platforms_other.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -28,7 +28,3 @@ func newDefaultMatcher(platform specs.Platform) Matcher {
 | 
				
			|||||||
		Platform: Normalize(platform),
 | 
							Platform: Normalize(platform),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
func GetWindowsOsVersion() string {
 | 
					 | 
				
			||||||
	return ""
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								vendor/github.com/containerd/platforms/platforms_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/containerd/platforms/platforms_windows.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -17,10 +17,7 @@
 | 
				
			|||||||
package platforms
 | 
					package platforms
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	specs "github.com/opencontainers/image-spec/specs-go/v1"
 | 
						specs "github.com/opencontainers/image-spec/specs-go/v1"
 | 
				
			||||||
	"golang.org/x/sys/windows"
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewMatcher returns a Windows matcher that will match on osVersionPrefix if
 | 
					// NewMatcher returns a Windows matcher that will match on osVersionPrefix if
 | 
				
			||||||
@@ -35,8 +32,3 @@ func newDefaultMatcher(platform specs.Platform) Matcher {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
func GetWindowsOsVersion() string {
 | 
					 | 
				
			||||||
	major, minor, build := windows.RtlGetNtVersionNumbers()
 | 
					 | 
				
			||||||
	return fmt.Sprintf("%d.%d.%d", major, minor, build)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							@@ -173,7 +173,7 @@ github.com/containerd/nri/pkg/net/multiplex
 | 
				
			|||||||
github.com/containerd/nri/pkg/runtime-tools/generate
 | 
					github.com/containerd/nri/pkg/runtime-tools/generate
 | 
				
			||||||
github.com/containerd/nri/pkg/stub
 | 
					github.com/containerd/nri/pkg/stub
 | 
				
			||||||
github.com/containerd/nri/types/v1
 | 
					github.com/containerd/nri/types/v1
 | 
				
			||||||
# github.com/containerd/platforms v0.1.1
 | 
					# github.com/containerd/platforms v0.2.0
 | 
				
			||||||
## explicit; go 1.20
 | 
					## explicit; go 1.20
 | 
				
			||||||
github.com/containerd/platforms
 | 
					github.com/containerd/platforms
 | 
				
			||||||
# github.com/containerd/plugin v0.1.0
 | 
					# github.com/containerd/plugin v0.1.0
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user