github.com/olli-ai/jx/v2@v2.0.400-0.20210921045218-14731b4dd448/pkg/gits/releases/releases.go (about) 1 package releases 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/pkg/errors" 8 9 "github.com/olli-ai/jx/v2/pkg/gits" 10 ) 11 12 // ReleaseDownloadCount returns the total number of downloads for the given set of releases 13 func ReleaseDownloadCount(releases []*gits.GitRelease) int { 14 count := 0 15 for _, release := range releases { 16 count += release.DownloadCount 17 } 18 return count 19 } 20 21 // GetRelease will find the GitRelease for the given owner/repo, looking for a tag called <version> or v<version> 22 func GetRelease(version string, owner string, repo string, provider gits.GitProvider) (*gits.GitRelease, error) { 23 release, err := provider.GetRelease(owner, repo, version) 24 if err != nil { 25 // normally tags are v<version> so try that 26 tag := fmt.Sprintf("v%s", version) 27 release, err = provider.GetRelease(owner, repo, tag) 28 if err != nil { 29 if ReleaseNotFoundError(err) { 30 return nil, nil 31 } 32 return nil, errors.Wrapf(err, "getting release for %s (tried %s and %s)", version, version, tag) 33 34 } 35 } 36 return release, nil 37 } 38 39 // ReleaseNotFoundError determines if the reason for the error is that the release is not found 40 func ReleaseNotFoundError(err error) bool { 41 return strings.HasSuffix(err.Error(), "404 Not Found []") 42 }