Skip to content

Commit

Permalink
simplify download artifact
Browse files Browse the repository at this point in the history
Signed-off-by: nikpivkin <[email protected]>
  • Loading branch information
nikpivkin committed Oct 1, 2024
1 parent 9fe203f commit 179e628
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 19 deletions.
42 changes: 24 additions & 18 deletions pkg/oci/artifact.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,27 +224,33 @@ func DownloadArtifact(ctx context.Context, artifacts []*Artifact, dst string, op
return nil
}

if !shouldTryOtherRepo(err) {
return xerrors.Errorf("failed to download artifact from %s: %w", art.Repository(), err)
}
log.Error("Failed to download artifact", log.String("repo", art.Repository()), log.Err(err))

var terr *transport.Error
if errors.As(err, &terr) {
for _, diagnostic := range terr.Errors {
// For better user experience
if diagnostic.Code == transport.DeniedErrorCode || diagnostic.Code == transport.UnauthorizedErrorCode {
// e.g. https://aquasecurity.github.io/trivy/latest/docs/references/troubleshooting/#db
log.Warnf("See %s", doc.URL("/docs/references/troubleshooting/", "db"))
break
}
}

// try the following artifact only if a temporary error occurs
if terr.Temporary() && i < len(artifacts)-1 {
log.Info("Trying to download artifact from other repository...")
continue
}
if i < len(artifacts)-1 {
log.Info("Trying to download artifact from other repository...")
}
return xerrors.Errorf("failed to download artifact from %s", art.Repository())
}

return xerrors.New("failed to download artifact from any source")
}

func shouldTryOtherRepo(err error) bool {
var terr *transport.Error
if !errors.As(err, &terr) {
return false
}

for _, diagnostic := range terr.Errors {
// For better user experience
if diagnostic.Code == transport.DeniedErrorCode || diagnostic.Code == transport.UnauthorizedErrorCode {
// e.g. https://aquasecurity.github.io/trivy/latest/docs/references/troubleshooting/#db
log.Warnf("See %s", doc.URL("/docs/references/troubleshooting/", "db"))
break
}
}

// try the following artifact only if a temporary error occurs
return terr.Temporary()
}
2 changes: 1 addition & 1 deletion pkg/oci/artifact_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ func TestArtifact_Download(t *testing.T) {
layersReturns: layersReturns{
layers: []v1.Layer{txtLayer},
},
wantErr: "failed to download vulnerability DB: failed to download artifact",
wantErr: "unexpected EOF",
},
{
name: "sad: media type doesn't match",
Expand Down

0 comments on commit 179e628

Please sign in to comment.