mirror of
https://github.com/docker/compose.git
synced 2026-10-12 02:13:08 +00:00
fix(publish): report OCI fallback as a bool, not the OCI version
Signed-off-by: hiroto.toyoda <[email protected]>
This commit is contained in:
committed by
Nicolas De loof
parent
f8e64299b4
commit
548be16595
+11
-10
@@ -94,14 +94,15 @@ func DescriptorForEnvFile(path string, content []byte) v1.Descriptor {
|
||||
}
|
||||
}
|
||||
|
||||
// PushManifest pushes the manifest for a Compose OCI artifact and returns
|
||||
// the OCI version actually used.
|
||||
func PushManifest(ctx context.Context, resolver remotes.Resolver, named reference.Named, layers []v1.Descriptor, ociVersion api.OCIVersion) (v1.Descriptor, api.OCIVersion, error) {
|
||||
// PushManifest pushes the manifest for a Compose OCI artifact. The returned
|
||||
// bool reports whether the push fell back from OCI 1.1 to OCI 1.0; it is
|
||||
// only meaningful when err == nil.
|
||||
func PushManifest(ctx context.Context, resolver remotes.Resolver, named reference.Named, layers []v1.Descriptor, ociVersion api.OCIVersion) (v1.Descriptor, bool, error) {
|
||||
// Check if we need an extra empty layer for the manifest config
|
||||
if ociVersion == api.OCIVersion1_1 || ociVersion == "" {
|
||||
err := push(ctx, resolver, named, v1.DescriptorEmptyJSON)
|
||||
if err != nil {
|
||||
return v1.Descriptor{}, "", err
|
||||
return v1.Descriptor{}, false, err
|
||||
}
|
||||
}
|
||||
// prepare to push the manifest by pushing the layers
|
||||
@@ -109,26 +110,26 @@ func PushManifest(ctx context.Context, resolver remotes.Resolver, named referenc
|
||||
for i := range layers {
|
||||
layerDescriptors[i] = layers[i]
|
||||
if err := push(ctx, resolver, named, layers[i]); err != nil {
|
||||
return v1.Descriptor{}, "", err
|
||||
return v1.Descriptor{}, false, err
|
||||
}
|
||||
}
|
||||
|
||||
if ociVersion != "" {
|
||||
// if a version was explicitly specified, use it
|
||||
descriptor, err := createAndPushManifest(ctx, resolver, named, layerDescriptors, ociVersion)
|
||||
return descriptor, ociVersion, err
|
||||
return descriptor, false, err
|
||||
}
|
||||
|
||||
// try to push in the OCI 1.1 format but fallback to OCI 1.0 on 4xx errors
|
||||
// (other than auth) since it's most likely the result of the registry not
|
||||
// having support
|
||||
// (other than auth) since it's most likely the result of the registry
|
||||
// rejecting the OCI 1.1 request
|
||||
descriptor, err := createAndPushManifest(ctx, resolver, named, layerDescriptors, api.OCIVersion1_1)
|
||||
var pushErr pusherrors.ErrUnexpectedStatus
|
||||
if errors.As(err, &pushErr) && isNonAuthClientError(pushErr.StatusCode) {
|
||||
descriptor, err = createAndPushManifest(ctx, resolver, named, layerDescriptors, api.OCIVersion1_0)
|
||||
return descriptor, api.OCIVersion1_0, err
|
||||
return descriptor, true, err
|
||||
}
|
||||
return descriptor, api.OCIVersion1_1, err
|
||||
return descriptor, false, err
|
||||
}
|
||||
|
||||
func push(ctx context.Context, resolver remotes.Resolver, ref reference.Named, descriptor v1.Descriptor) error {
|
||||
|
||||
@@ -120,7 +120,7 @@ func (s *composeService) pushComposeArtifact(ctx context.Context, project *types
|
||||
|
||||
resolver := oci.NewResolver(s.configFile(), desktop.ProxyTransportFor(ctx, s.apiClient()), insecureRegistries...)
|
||||
|
||||
descriptor, usedOCIVersion, err := oci.PushManifest(ctx, resolver, named, layers, options.OCIVersion)
|
||||
descriptor, didFallback, err := oci.PushManifest(ctx, resolver, named, layers, options.OCIVersion)
|
||||
if err != nil {
|
||||
s.events.On(api.Resource{
|
||||
ID: repository,
|
||||
@@ -129,8 +129,8 @@ func (s *composeService) pushComposeArtifact(ctx context.Context, project *types
|
||||
})
|
||||
return err
|
||||
}
|
||||
if options.OCIVersion == "" && usedOCIVersion == api.OCIVersion1_0 {
|
||||
logrus.Warn("registry does not support OCI 1.1 artifacts; falling back to OCI 1.0 format")
|
||||
if didFallback {
|
||||
logrus.Warn("registry rejected the OCI 1.1 artifact push; falling back to OCI 1.0 format")
|
||||
}
|
||||
|
||||
if options.Application {
|
||||
|
||||
Reference in New Issue
Block a user