diff --git a/pkg/host/github.go b/pkg/host/github.go index e6dd9d33cc0c6fba38565f8c6bceeec6dc136817..29a7a851a59fd616ff8cfb58eb6eeef52f77cf81 100644 --- a/pkg/host/github.go +++ b/pkg/host/github.go @@ -2,16 +2,32 @@ package host import ( "path/filepath" + "regexp" "strings" ) // ZipURL returns the URL of the zip archive given a github repository URL. func ZipURL(url string) string { + var version = "master" + url = strings.TrimSuffix(strings.TrimPrefix(url, "/"), "/") - if strings.HasSuffix(url, "zip/master") { + zipRegex, _ := regexp.Compile(`zip/(\S+)$`) + if zipRegex.MatchString(url) { return url } - return "https://codeload.github.com/" + filepath.Join(url, "/zip/master") + // So this could identify a port number, but since we only support github + // I don't believe using it as a version modifier is a problem. Though + // perhaps we should use something else instead? + if strings.Contains(url, ":") { + parts := strings.SplitAfter(url, ":") + + url = parts[0] + version = parts[1] + + url = strings.TrimSuffix(url, ":") + } + + return "https://codeload.github.com/" + filepath.Join(url, "/zip/"+version) }