func GetGoVersionForLatestRevision()

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
}