getLatestReleaseNameFromGitHub gets the name of the release marked 'latest' on GitHub.
(ctx context.Context)
| 104 | |
| 105 | // getLatestReleaseNameFromGitHub gets the name of the release marked 'latest' on GitHub. |
| 106 | func getLatestReleaseNameFromGitHub(ctx context.Context) (string, error) { |
| 107 | ctx, cancel := context.WithTimeout(ctx, githubTimeout) |
| 108 | defer cancel() |
| 109 | |
| 110 | req, err := http.NewRequestWithContext(ctx, http.MethodGet, fmt.Sprintf(latestReleaseGitHubURLFormat, repo.BuildGitHubRepo), http.NoBody) |
| 111 | if err != nil { |
| 112 | return "", errors.Wrap(err, "unable to get latest release from github") |
| 113 | } |
| 114 | |
| 115 | resp, err := http.DefaultClient.Do(req) |
| 116 | if err != nil { |
| 117 | return "", errors.Wrap(err, "unable to get latest release from github") |
| 118 | } |
| 119 | defer resp.Body.Close() //nolint:errcheck |
| 120 | |
| 121 | if resp.StatusCode != http.StatusOK { |
| 122 | return "", errors.Errorf("invalid status code from GitHub: %v", resp.StatusCode) |
| 123 | } |
| 124 | |
| 125 | var responseObject struct { |
| 126 | Name string `json:"name"` |
| 127 | } |
| 128 | |
| 129 | if err := json.NewDecoder(resp.Body).Decode(&responseObject); err != nil { |
| 130 | return "", errors.Wrap(err, "invalid GitHub API response") |
| 131 | } |
| 132 | |
| 133 | return responseObject.Name, nil |
| 134 | } |
| 135 | |
| 136 | // verifyGitHubReleaseIsComplete downloads checksum file to verify that the release is complete. |
| 137 | func verifyGitHubReleaseIsComplete(ctx context.Context, releaseName string) error { |
no test coverage detected