diff --git a/pkg/libhelm/validate_repo.go b/pkg/libhelm/validate_repo.go index b11dfa4d3..984329bc4 100644 --- a/pkg/libhelm/validate_repo.go +++ b/pkg/libhelm/validate_repo.go @@ -1,18 +1,15 @@ package libhelm import ( + "errors" "fmt" "net/http" "net/url" "path" "strings" "time" - - "github.com/pkg/errors" ) -const invalidChartRepo = "%q is not a valid chart repository or cannot be reached" - func ValidateHelmRepositoryURL(repoUrl string, client *http.Client) error { if repoUrl == "" { return errors.New("URL is required") @@ -20,30 +17,32 @@ func ValidateHelmRepositoryURL(repoUrl string, client *http.Client) error { url, err := url.ParseRequestURI(repoUrl) if err != nil { - return errors.Wrap(err, fmt.Sprintf("invalid helm chart URL: %s", repoUrl)) + return fmt.Errorf("invalid helm repository URL '%s': %w", repoUrl, err) } if !strings.EqualFold(url.Scheme, "http") && !strings.EqualFold(url.Scheme, "https") { - return errors.New(fmt.Sprintf("invalid helm chart URL: %s", repoUrl)) + return fmt.Errorf("invalid helm repository URL '%s'", repoUrl) } url.Path = path.Join(url.Path, "index.yaml") if client == nil { client = &http.Client{ - Timeout: time.Second * 10, + Timeout: time.Second * 10, + Transport: http.DefaultTransport, } } + const invalidChartRepo = "%s is not a valid chart repository or cannot be reached: %w" response, err := client.Head(url.String()) if err != nil { - return errors.Wrapf(err, invalidChartRepo, repoUrl) + return fmt.Errorf(invalidChartRepo, repoUrl, err) } - // Success is indicated with 2xx status codes + // Success is indicated with 2xx status codes. 3xx status codes indicate a redirect. statusOK := response.StatusCode >= 200 && response.StatusCode < 300 if !statusOK { - return errors.Errorf(invalidChartRepo, repoUrl) + return fmt.Errorf(invalidChartRepo, repoUrl, err) } return nil