in tools/version-tracker/pkg/github/github.go [268:300]
func GetGoVersionForLatestRevision(client *github.Client, org, repo, latestRevision string) (string, error) {
logger.V(6).Info(fmt.Sprintf("Getting Go version corresponding to latest revision %s for [%s/%s] repository", latestRevision, org, repo))
var goVersion string
var err error
projectFullName := fmt.Sprintf("%s/%s", org, repo)
if _, ok := constants.ProjectReleaseAssets[projectFullName]; ok {
release, response, err := client.Repositories.GetReleaseByTag(context.Background(), org, repo, latestRevision)
if err != nil {
if response.StatusCode == http.StatusNotFound {
logger.V(6).Info(fmt.Sprintf("GitHub release for tag %s not found. Falling back to GitHub source of truth file for Go version", latestRevision))
goVersion, err = getGoVersionFromGitHubFile(client, org, repo, projectFullName, latestRevision)
if err != nil {
return "", fmt.Errorf("getting Go version from GitHub source of truth file: %v", err)
}
} else {
return "", fmt.Errorf("calling GetReleaseByTag API for tag %s in [%s/%s] repository: %v", latestRevision, org, repo, err)
}
} else {
goVersion, err = getGoVersionFromGitHubRelease(release, projectFullName, latestRevision)
if err != nil {
return "", fmt.Errorf("getting Go version from GitHub release assets: %v", err)
}
}
} else if _, ok := constants.ProjectGoVersionSourceOfTruth[projectFullName]; ok {
goVersion, err = getGoVersionFromGitHubFile(client, org, repo, projectFullName, latestRevision)
if err != nil {
return "", fmt.Errorf("getting Go version from GitHub source of truth file: %v", err)
}
}
return goVersion, nil
}