Skip to content

Commit 8bdc5e5

Browse files
committed
fix: error message for dangling reference index (#402)
1 parent 9f89059 commit 8bdc5e5

2 files changed

Lines changed: 26 additions & 2 deletions

File tree

notation.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,20 @@ import (
2525
"strings"
2626
"time"
2727

28+
orasRegistry "oras.land/oras-go/v2/registry"
29+
"oras.land/oras-go/v2/registry/remote"
30+
2831
"github.com/notaryproject/notation-core-go/signature"
2932
"github.com/notaryproject/notation-go/internal/envelope"
3033
"github.com/notaryproject/notation-go/log"
3134
"github.com/notaryproject/notation-go/registry"
3235
"github.com/notaryproject/notation-go/verifier/trustpolicy"
3336
"github.com/opencontainers/go-digest"
3437
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
35-
orasRegistry "oras.land/oras-go/v2/registry"
3638
)
3739

3840
var errDoneVerification = errors.New("done verification")
41+
3942
var reservedAnnotationPrefixes = [...]string{"io.cncf.notary"}
4043

4144
// SignerSignOptions contains parameters for Signer.Sign.
@@ -145,7 +148,11 @@ func Sign(ctx context.Context, signer Signer, repo registry.Repository, signOpts
145148
logger.Debugf("Pushing signature of artifact descriptor: %+v, signature media type: %v", targetDesc, signOpts.SignatureMediaType)
146149
_, _, err = repo.PushSignature(ctx, signOpts.SignatureMediaType, sig, targetDesc, annotations)
147150
if err != nil {
148-
logger.Error("Failed to push the signature")
151+
var referrerError *remote.ReferrersError
152+
// do not log an error for failing to delete referral index
153+
if !errors.As(err, &referrerError) || !referrerError.IsReferrersIndexDelete() {
154+
logger.Error("Failed to push the signature")
155+
}
149156
return ocispec.Descriptor{}, ErrorPushSignatureFailed{Msg: err.Error()}
150157
}
151158

notation_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
"github.com/notaryproject/notation-go/registry"
3535
"github.com/notaryproject/notation-go/verifier/trustpolicy"
3636
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
37+
"oras.land/oras-go/v2/registry/remote"
3738
)
3839

3940
var expectedMetadata = map[string]string{"foo": "bar", "bar": "foo"}
@@ -74,6 +75,22 @@ func TestSignSuccessWithUserMetadata(t *testing.T) {
7475
}
7576
}
7677

78+
func TestSignWithDanglingReferrersIndex(t *testing.T) {
79+
repo := mock.NewRepository()
80+
repo.PushSignatureError = &remote.ReferrersError{
81+
Op: "DeleteReferrersIndex",
82+
Err: errors.New("error"),
83+
}
84+
opts := SignOptions{}
85+
opts.ArtifactReference = mock.SampleArtifactUri
86+
opts.SignatureMediaType = jws.MediaTypeEnvelope
87+
88+
_, err := Sign(context.Background(), &dummySigner{}, repo, opts)
89+
if err == nil {
90+
t.Fatalf("no error occurred, expected error")
91+
}
92+
}
93+
7794
func TestSignWithNilRepo(t *testing.T) {
7895
opts := SignOptions{}
7996
opts.ArtifactReference = mock.SampleArtifactUri

0 commit comments

Comments
 (0)