in internal/cs/dockerengine.go [59:84]
func (e *DockerEngine) PushImage(ctx context.Context, remoteImage RemoteImage) (digest string, err error) {
authBytes, err := json.Marshal(remoteImage.AuthConfig)
if err != nil {
return "", err
}
pushRes, err := e.c.ImagePush(ctx, remoteImage.Ref(), image.PushOptions{
RegistryAuth: base64.URLEncoding.EncodeToString(authBytes),
})
if err != nil {
return "", err
}
defer pushRes.Close()
termFd, isTerm := term.GetFdInfo(os.Stderr)
if err = jsonmessage.DisplayJSONMessagesStream(
// Skip statuses that have irrelevant details such as repo address.
skipStatuses(pushRes, remoteImage.ServerAddress, remoteImage.Tag),
os.Stderr, termFd, isTerm,
extractDigest(&digest)); err != nil {
return "", err
}
if digest == "" {
return "", errors.New("image push response does not contain the image digest")
}
return digest, nil
}