From ae50c820c4c7a0318414fb4dccba48fbc7c63ae7 Mon Sep 17 00:00:00 2001 From: nikpivkin Date: Tue, 1 Oct 2024 11:51:05 +0600 Subject: [PATCH] simplify download artifact Signed-off-by: nikpivkin --- pkg/oci/artifact.go | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/pkg/oci/artifact.go b/pkg/oci/artifact.go index 84a9bfc8471d..7e0f42b6d0e0 100644 --- a/pkg/oci/artifact.go +++ b/pkg/oci/artifact.go @@ -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() +}