in ecr/resolver.go [250:287]
func parseImageManifestMediaType(ctx context.Context, body string) (string, error) {
// The unsigned variant of Docker v2 Schema 1 manifest mediaType.
const mediaTypeDockerSchema1ManifestUnsigned = "application/vnd.docker.distribution.manifest.v1+json"
var manifest manifestProbe
err := json.Unmarshal([]byte(body), &manifest)
if err != nil {
return "", errors.Wrapf(ErrInvalidManifest, "failed to unmarshall %q as a manifest", body)
}
switch manifest.SchemaVersion {
case 2:
// Defer to the manifest declared type.
if manifest.MediaType != "" {
return manifest.MediaType, nil
}
// Is a manifest list.
if len(manifest.Manifests) > 0 {
return images.MediaTypeDockerSchema2ManifestList, nil
}
// Is a single image manifest.
return images.MediaTypeDockerSchema2Manifest, nil
case 1:
// Defer to the manifest declared type.
if manifest.MediaType != "" {
return manifest.MediaType, nil
}
// Is Signed Docker Schema 1 manifest.
if len(manifest.Signatures) > 0 {
return images.MediaTypeDockerSchema1Manifest, nil
}
// Is Unsigned Docker Schema 1 manifest.
return mediaTypeDockerSchema1ManifestUnsigned, nil
default:
return "", errors.Wrapf(ErrInvalidManifest, "unsupported schema version %d", manifest.SchemaVersion)
}
}