Skip to content

Commit 7322429

Browse files
authored
Support OCI Manifest Lists (#82)
1 parent baf781f commit 7322429

File tree

4 files changed

+21
-6
lines changed

4 files changed

+21
-6
lines changed

v2/cmd/voucher_client/digest.go

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ func getCanonicalReference(client *http.Client, ref reference.Reference) (refere
3131
if nil != err {
3232
return nil, fmt.Errorf("making canonical reference failed: %s", err)
3333
}
34+
3435
return canonicalRef, nil
3536
}
3637
return nil, fmt.Errorf("reference cannot be converted to a canonical reference")

v2/docker/digest.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"errors"
55
"net/http"
66

7+
"github.com/docker/distribution/manifest/manifestlist"
78
"github.com/docker/distribution/manifest/ocischema"
89
"github.com/docker/distribution/manifest/schema1"
910
"github.com/docker/distribution/manifest/schema2"
@@ -24,6 +25,8 @@ func GetDigestFromTagged(client *http.Client, image reference.NamedTagged) (dige
2425
}
2526

2627
request.Header.Add("Accept", ocischema.SchemaVersion.MediaType)
28+
request.Header.Add("Accept", manifestlist.OCISchemaVersion.MediaType)
29+
request.Header.Add("Accept", manifestlist.MediaTypeManifestList)
2730
request.Header.Add("Accept", schema2.MediaTypeManifest)
2831
request.Header.Add("Accept", schema1.MediaTypeManifest)
2932
request.Header.Add("Accept", schema1.MediaTypeSignedManifest)
@@ -39,7 +42,7 @@ func GetDigestFromTagged(client *http.Client, image reference.NamedTagged) (dige
3942
}
4043

4144
imageDigest := digest.Digest(resp.Header.Get("Docker-Content-Digest"))
42-
if "" == string(imageDigest) {
45+
if string(imageDigest) == "" {
4346
return blank, errors.New("empty digest returned for image")
4447
}
4548

v2/docker/ocischema/manifest.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,14 @@ import (
1616
// IsManifest returns true if the passed manifest is a schema2 manifest.
1717
func IsManifest(m distribution.Manifest) bool {
1818
switch m.(type) {
19-
case *ocischema.DeserializedManifest, manifestlist.DeserializedManifestList:
19+
case *ocischema.DeserializedManifest:
2020
return true
21+
case *manifestlist.DeserializedManifestList:
22+
mType, _, _ := m.Payload()
23+
if mType == manifestlist.OCISchemaVersion.MediaType {
24+
return true
25+
}
26+
return false
2127
default:
2228
return false
2329
}
@@ -61,7 +67,7 @@ func resolveManifestFromList(client *http.Client, ref reference.Named, mfs *mani
6167
if err != nil {
6268
return ocischema.Manifest{}, fmt.Errorf("preparing request to fetch manifest from list: %w", err)
6369
}
64-
req.Header.Add("Accept", manifestlist.OCISchemaVersion.MediaType)
70+
req.Header.Add("Accept", ocischema.SchemaVersion.MediaType)
6571

6672
resp, err := client.Do(req)
6773
if err != nil {

v2/docker/schema2/manifest.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88

99
"github.com/docker/distribution"
1010
"github.com/docker/distribution/manifest/manifestlist"
11-
"github.com/docker/distribution/manifest/schema2"
1211
v2 "github.com/docker/distribution/manifest/schema2"
1312
"github.com/docker/distribution/reference"
1413
"github.com/grafeas/voucher/v2/docker/uri"
@@ -17,8 +16,14 @@ import (
1716
// IsManifest returns true if the passed manifest is a schema2 manifest.
1817
func IsManifest(m distribution.Manifest) bool {
1918
switch m.(type) {
20-
case *v2.DeserializedManifest, *manifestlist.DeserializedManifestList:
19+
case *v2.DeserializedManifest:
2120
return true
21+
case *manifestlist.DeserializedManifestList:
22+
mType, _, _ := m.Payload()
23+
if mType == manifestlist.MediaTypeManifestList {
24+
return true
25+
}
26+
return false
2227
default:
2328
return false
2429
}
@@ -62,7 +67,7 @@ func resolveManifestFromList(client *http.Client, ref reference.Named, mfs *mani
6267
if err != nil {
6368
return v2.Manifest{}, fmt.Errorf("preparing request to fetch manifest from list: %w", err)
6469
}
65-
req.Header.Add("Accept", schema2.MediaTypeManifest)
70+
req.Header.Add("Accept", v2.MediaTypeManifest)
6671

6772
resp, err := client.Do(req)
6873
if err != nil {

0 commit comments

Comments
 (0)