From 8c43259b251fd675312d07e614bae49d65b01824 Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Fri, 14 Jun 2024 22:47:55 -0700 Subject: [PATCH] bug: fix referring to a relative directory from a git hosted tool --- pkg/loader/url.go | 38 +++++++++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/pkg/loader/url.go b/pkg/loader/url.go index 983112c3..95249478 100644 --- a/pkg/loader/url.go +++ b/pkg/loader/url.go @@ -105,20 +105,13 @@ func loadURL(ctx context.Context, cache *cache.Client, base *source, name string return nil, false, err } - resp, err := http.DefaultClient.Do(req) + data, err := getWithDefaults(req) if err != nil { - return nil, false, err - } else if resp.StatusCode != http.StatusOK { - return nil, false, fmt.Errorf("error loading %s: %s", url, resp.Status) + return nil, false, fmt.Errorf("error loading %s: %v", url, err) } log.Debugf("opened %s", url) - data, err := io.ReadAll(resp.Body) - if err != nil { - return nil, false, fmt.Errorf("error loading %s: %v", url, err) - } - result := &source{ Content: data, Remote: true, @@ -138,6 +131,33 @@ func loadURL(ctx context.Context, cache *cache.Client, base *source, name string return result, true, nil } +func getWithDefaults(req *http.Request) ([]byte, error) { + originalPath := req.URL.Path + for i, def := range types.DefaultFiles { + base := path.Base(originalPath) + if !strings.Contains(base, ".") { + req.URL.Path = path.Join(originalPath, def) + } + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return nil, err + } + defer resp.Body.Close() + + if resp.StatusCode == http.StatusNotFound && i != len(types.DefaultFiles)-1 { + continue + } + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("error loading %s: %s", req.URL.String(), resp.Status) + } + + return io.ReadAll(resp.Body) + } + panic("unreachable") +} + func ContentFromURL(url string) (string, error) { cache, err := cache.New() if err != nil {