@ -122,24 +122,29 @@ func (r *Resolver) Combine(ctx context.Context, srcs []*Source) ([]byte, ocispec
}
}
}
}
mt := images . MediaTypeDockerSchema2ManifestList //ocispec.MediaTypeImageIndex
dockerMfsts := 0
idx := struct {
for _ , desc := range newDescs {
// MediaType is reserved in the OCI spec but
if strings . HasPrefix ( desc . MediaType , "application/vnd.docker." ) {
// excluded from go types.
dockerMfsts ++
MediaType string ` json:"mediaType,omitempty" `
}
}
ocispec . Index
} {
var mt string
if dockerMfsts == len ( newDescs ) {
// all manifests are Docker types, use Docker manifest list
mt = images . MediaTypeDockerSchema2ManifestList
} else {
// otherwise, use OCI index
mt = ocispec . MediaTypeImageIndex
}
idxBytes , err := json . MarshalIndent ( ocispec . Index {
MediaType : mt ,
MediaType : mt ,
Index : ocispec . Index {
Versioned : specs . Versioned {
Versioned : specs . Versioned {
SchemaVersion : 2 ,
SchemaVersion : 2 ,
} ,
} ,
Manifests : newDescs ,
Manifests : newDescs ,
} ,
} , "" , " " )
}
idxBytes , err := json . MarshalIndent ( idx , "" , " " )
if err != nil {
if err != nil {
return nil , ocispec . Descriptor { } , errors . Wrap ( err , "failed to marshal index" )
return nil , ocispec . Descriptor { } , errors . Wrap ( err , "failed to marshal index" )
}
}