|
|
|
@ -6,6 +6,7 @@ import (
|
|
|
|
|
"context"
|
|
|
|
|
"crypto/rand"
|
|
|
|
|
_ "crypto/sha256" // ensure digests can be computed
|
|
|
|
|
"encoding/base64"
|
|
|
|
|
"encoding/hex"
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"fmt"
|
|
|
|
@ -1157,7 +1158,24 @@ func BuildWithResultHandler(ctx context.Context, nodes []builder.Node, opt map[s
|
|
|
|
|
descs := make([]specs.Descriptor, 0, len(res))
|
|
|
|
|
|
|
|
|
|
for _, r := range res {
|
|
|
|
|
s, ok := r.ExporterResponse[exptypes.ExporterImageDigestKey]
|
|
|
|
|
s, ok := r.ExporterResponse[exptypes.ExporterImageDescriptorKey]
|
|
|
|
|
if ok {
|
|
|
|
|
dt, err := base64.StdEncoding.DecodeString(s)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
var desc specs.Descriptor
|
|
|
|
|
if err := json.Unmarshal(dt, &desc); err != nil {
|
|
|
|
|
return errors.Wrapf(err, "failed to unmarshal descriptor %s", s)
|
|
|
|
|
}
|
|
|
|
|
descs = append(descs, desc)
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
// This is fallback for some very old buildkit versions.
|
|
|
|
|
// Note that the mediatype isn't really correct as most of the time it is image manifest and
|
|
|
|
|
// not manifest list but actually both are handled because for Docker mediatypes the
|
|
|
|
|
// mediatype value in the Accpet header does not seem to matter.
|
|
|
|
|
s, ok = r.ExporterResponse[exptypes.ExporterImageDigestKey]
|
|
|
|
|
if ok {
|
|
|
|
|
descs = append(descs, specs.Descriptor{
|
|
|
|
|
Digest: digest.Digest(s),
|
|
|
|
|