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  }