MCPcopy
hub / github.com/docker/compose / PushManifest

Function PushManifest

internal/oci/push.go:97–129  ·  view source on GitHub ↗
(ctx context.Context, resolver remotes.Resolver, named reference.Named, layers []v1.Descriptor, ociVersion api.OCIVersion)

Source from the content-addressed store, hash-verified

95}
96
97func PushManifest(ctx context.Context, resolver remotes.Resolver, named reference.Named, layers []v1.Descriptor, ociVersion api.OCIVersion) (v1.Descriptor, error) {
98 // Check if we need an extra empty layer for the manifest config
99 if ociVersion == api.OCIVersion1_1 || ociVersion == "" {
100 err := push(ctx, resolver, named, v1.DescriptorEmptyJSON)
101 if err != nil {
102 return v1.Descriptor{}, err
103 }
104 }
105 // prepare to push the manifest by pushing the layers
106 layerDescriptors := make([]v1.Descriptor, len(layers))
107 for i := range layers {
108 layerDescriptors[i] = layers[i]
109 if err := push(ctx, resolver, named, layers[i]); err != nil {
110 return v1.Descriptor{}, err
111 }
112 }
113
114 if ociVersion != "" {
115 // if a version was explicitly specified, use it
116 return createAndPushManifest(ctx, resolver, named, layerDescriptors, ociVersion)
117 }
118
119 // try to push in the OCI 1.1 format but fallback to OCI 1.0 on 4xx errors
120 // (other than auth) since it's most likely the result of the registry not
121 // having support
122 descriptor, err := createAndPushManifest(ctx, resolver, named, layerDescriptors, api.OCIVersion1_1)
123 var pushErr pusherrors.ErrUnexpectedStatus
124 if errors.As(err, &pushErr) && isNonAuthClientError(pushErr.StatusCode) {
125 // TODO(milas): show a warning here (won't work with logrus)
126 return createAndPushManifest(ctx, resolver, named, layerDescriptors, api.OCIVersion1_0)
127 }
128 return descriptor, err
129}
130
131func push(ctx context.Context, resolver remotes.Resolver, ref reference.Named, descriptor v1.Descriptor) error {
132 fullRef, err := reference.WithDigest(reference.TagNameOnly(ref), descriptor.Digest)

Callers 1

publishMethod · 0.92

Calls 3

pushFunction · 0.85
createAndPushManifestFunction · 0.85
isNonAuthClientErrorFunction · 0.85

Tested by

no test coverage detected