@@ -75,18 +75,33 @@ func Successors(ctx context.Context, fetcher Fetcher, node ocispec.Descriptor) (
75
75
}
76
76
nodes = append (nodes , manifest .Config )
77
77
return append (nodes , manifest .Layers ... ), nil
78
- case docker .MediaTypeManifestList , ocispec . MediaTypeImageIndex :
78
+ case docker .MediaTypeManifestList :
79
79
content , err := FetchAll (ctx , fetcher , node )
80
80
if err != nil {
81
81
return nil , err
82
82
}
83
83
84
- // docker manifest list and oci index are equivalent for successors.
84
+ // OCI manifest index schema can be used to marshal docker manifest list
85
85
var index ocispec.Index
86
86
if err := json .Unmarshal (content , & index ); err != nil {
87
87
return nil , err
88
88
}
89
89
return index .Manifests , nil
90
+ case ocispec .MediaTypeImageIndex :
91
+ content , err := FetchAll (ctx , fetcher , node )
92
+ if err != nil {
93
+ return nil , err
94
+ }
95
+
96
+ var index ocispec.Index
97
+ if err := json .Unmarshal (content , & index ); err != nil {
98
+ return nil , err
99
+ }
100
+ var nodes []ocispec.Descriptor
101
+ if index .Subject != nil {
102
+ nodes = append (nodes , * index .Subject )
103
+ }
104
+ return append (nodes , index .Manifests ... ), nil
90
105
case spec .MediaTypeArtifactManifest :
91
106
content , err := FetchAll (ctx , fetcher , node )
92
107
if err != nil {
0 commit comments