Skip to content

Commit

Permalink
Ensure all GitHub releases are fetched when searching provider versions
Browse files Browse the repository at this point in the history
  • Loading branch information
abhay-krishna committed Mar 6, 2023
1 parent b607ca0 commit cc005d0
Showing 1 changed file with 23 additions and 3 deletions.
26 changes: 23 additions & 3 deletions cmd/clusterctl/client/repository/repository_github.go
Original file line number Diff line number Diff line change
Expand Up @@ -280,11 +280,12 @@ func (g *gitHubRepository) getVersions() ([]string, error) {

// get all the releases
// NB. currently Github API does not support result ordering, so it not possible to limit results
var releases []*github.RepositoryRelease
var allReleases []*github.RepositoryRelease
var retryError error
_ = wait.PollImmediate(retryableOperationInterval, retryableOperationTimeout, func() (bool, error) {
var listReleasesErr error
releases, _, listReleasesErr = client.Repositories.ListReleases(context.TODO(), g.owner, g.repository, nil)
// Get the first page of GitHub releases
releases, response, listReleasesErr := client.Repositories.ListReleases(context.TODO(), g.owner, g.repository, nil)
if listReleasesErr != nil {
retryError = g.handleGithubErr(listReleasesErr, "failed to get the list of releases")
// return immediately if we are rate limited
Expand All @@ -293,14 +294,33 @@ func (g *gitHubRepository) getVersions() ([]string, error) {
}
return false, nil
}
allReleases = append(allReleases, releases...)

// https://github.com/google/go-github/blob/master/github/github.go#L536-L546
if response.NextPage != 0 && response.LastPage != 0 {
nextPage := response.NextPage
lastPage := response.LastPage
for pageNum := nextPage; pageNum <= lastPage; pageNum++ {
releases, _, listReleasesErr = client.Repositories.ListReleases(context.TODO(), g.owner, g.repository, &github.ListOptions{Page: pageNum})
if listReleasesErr != nil {
retryError = g.handleGithubErr(listReleasesErr, "failed to get the list of releases")
// return immediately if we are rate limited
if _, ok := listReleasesErr.(*github.RateLimitError); ok {
return false, retryError
}
return false, nil
}
allReleases = append(allReleases, releases...)
}
}
retryError = nil
return true, nil
})
if retryError != nil {
return nil, retryError
}
versions := []string{}
for _, r := range releases {
for _, r := range allReleases {
r := r // pin
if r.TagName == nil {
continue
Expand Down

0 comments on commit cc005d0

Please sign in to comment.