in tools/version-tracker/pkg/github/github.go [358:430]
func getGoVersionFromGitHubRelease(release *github.RepositoryRelease, projectFullName, latestRevision string) (string, error) {
var tarballName, tarballUrl string
projectReleaseAsset := constants.ProjectReleaseAssets[projectFullName]
searchAssetName := projectReleaseAsset.AssetName
assetVersionReplacement := latestRevision
if constants.ProjectReleaseAssets[projectFullName].TrimLeadingVersionPrefix {
assetVersionReplacement = latestRevision[1:]
}
if strings.Count(searchAssetName, "%s") > 0 {
searchAssetName = fmt.Sprintf(searchAssetName, assetVersionReplacement)
}
if projectReleaseAsset.OverrideAssetURL != "" {
tarballName = searchAssetName
tarballUrl = projectReleaseAsset.OverrideAssetURL
if strings.Count(tarballUrl, "%s") > 0 {
tarballUrl = fmt.Sprintf(tarballUrl, assetVersionReplacement)
}
} else {
for _, asset := range release.Assets {
if *asset.Name == searchAssetName {
tarballName = *asset.Name
tarballUrl = *asset.BrowserDownloadURL
break
}
}
}
cwd, err := os.Getwd()
if err != nil {
return "", fmt.Errorf("retrieving current working directory: %v", err)
}
tarballDownloadPath := filepath.Join(cwd, "github-release-downloads")
err = os.MkdirAll(tarballDownloadPath, 0o755)
if err != nil {
return "", fmt.Errorf("failed to create GitHub release downloads folder: %v", err)
}
tarballFilePath := filepath.Join(tarballDownloadPath, tarballName)
err = file.Download(tarballUrl, tarballFilePath)
if err != nil {
return "", fmt.Errorf("downloading release tarball from URL [%s]: %v", tarballUrl, err)
}
binaryName := projectReleaseAsset.BinaryName
if strings.Count(binaryName, "%s") > 0 {
binaryName = fmt.Sprintf(binaryName, assetVersionReplacement)
}
if projectReleaseAsset.Extract {
tarballFile, err := os.Open(tarballFilePath)
if err != nil {
return "", fmt.Errorf("opening tarball filepath: %v", err)
}
err = tar.ExtractFileFromTarball(tarballDownloadPath, tarballFile, binaryName)
if err != nil {
return "", fmt.Errorf("extracting tarball file: %v", err)
}
}
binaryFilePath := filepath.Join(tarballDownloadPath, binaryName)
goVersion, err := version.GetGoVersion(binaryFilePath)
if err != nil {
return "", fmt.Errorf("getting Go version embedded in binary [%s]: %v", binaryFilePath, err)
}
err = os.RemoveAll(tarballDownloadPath)
if err != nil {
return "", fmt.Errorf("removing tarball download path: %v", err)
}
return goVersion, nil
}