diff --git a/registry/repository.go b/registry/repository.go index 3a8cc70f..e25616e8 100644 --- a/registry/repository.go +++ b/registry/repository.go @@ -199,7 +199,7 @@ func (c *repositoryClient) uploadSignatureManifest(ctx context.Context, subject, Subject: &subject, ManifestAnnotations: annotations, Layers: []ocispec.Descriptor{blobDesc}, - ConfigDescriptor: configDesc, + ConfigDescriptor: &configDesc, } return oras.PackManifest(ctx, c.GraphTarget, oras.PackManifestVersion1_1_RC4, "", opts) @@ -207,27 +207,28 @@ func (c *repositoryClient) uploadSignatureManifest(ctx context.Context, subject, // pushNotationManifestConfig pushes an empty notation manifest config, if it // doesn't exist. -func pushNotationManifestConfig(ctx context.Context, pusher content.Pusher) (*ocispec.Descriptor, error) { +func pushNotationManifestConfig(ctx context.Context, pusher content.Storage) (ocispec.Descriptor, error) { // generate a empty config descriptor for notation manifest - configContent := []byte("{}") - desc := content.NewDescriptorFromBytes(ArtifactTypeNotation, configContent) + desc := ocispec.Descriptor{ + MediaType: ArtifactTypeNotation, + Digest: ocispec.DescriptorEmptyJSON.Digest, + Size: ocispec.DescriptorEmptyJSON.Size, + } // check if the config exists - if ros, ok := pusher.(content.ReadOnlyStorage); ok { - exists, err := ros.Exists(ctx, desc) - if err != nil { - return nil, fmt.Errorf("failed to check existence: %s: %s: %w", desc.Digest.String(), desc.MediaType, err) - } - if exists { - return &desc, nil - } + exists, err := pusher.Exists(ctx, desc) + if err != nil { + return ocispec.Descriptor{}, fmt.Errorf("failed to check existence: %s: %s: %w", desc.Digest.String(), desc.MediaType, err) + } + if exists { + return desc, nil } // push the config - if err := pusher.Push(ctx, desc, bytes.NewReader(configContent)); err != nil && !errors.Is(err, errdef.ErrAlreadyExists) { - return nil, fmt.Errorf("failed to push: %s: %s: %w", desc.Digest.String(), desc.MediaType, err) + if err := pusher.Push(ctx, desc, bytes.NewReader(ocispec.DescriptorEmptyJSON.Data)); err != nil && !errors.Is(err, errdef.ErrAlreadyExists) { + return ocispec.Descriptor{}, fmt.Errorf("failed to push: %s: %s: %w", desc.Digest.String(), desc.MediaType, err) } - return &desc, nil + return desc, nil } // signatureReferrers returns referrer nodes of desc in target filtered by