getLatestRelease queries GitHub API for the latest release of gh-aw
(includePrereleases bool)
| 182 | |
| 183 | // getLatestRelease queries GitHub API for the latest release of gh-aw |
| 184 | func getLatestRelease(includePrereleases bool) (string, error) { |
| 185 | updateCheckLog.Print("Querying GitHub API for latest release...") |
| 186 | |
| 187 | // Always target github.com explicitly: gh-aw is only published to github.com, |
| 188 | // and users in mixed-host environments (e.g. a GHE active auth host) must |
| 189 | // still reach the canonical registry to get the correct release metadata. |
| 190 | client, err := api.NewRESTClient(gitHubDotComRESTClientOptions()) |
| 191 | if err != nil { |
| 192 | return "", fmt.Errorf("failed to create GitHub client: %w", err) |
| 193 | } |
| 194 | |
| 195 | if includePrereleases { |
| 196 | var releases []Release |
| 197 | err = client.Get(fmt.Sprintf("repos/github/gh-aw/releases?per_page=%d", maxReleasesToQuery), &releases) |
| 198 | if err != nil { |
| 199 | return "", fmt.Errorf("failed to query releases: %w", err) |
| 200 | } |
| 201 | |
| 202 | tag := findLatestPublishedReleaseTag(releases) |
| 203 | updateCheckLog.Printf("Latest published release (pre-releases allowed): %s", tag) |
| 204 | return tag, nil |
| 205 | } |
| 206 | |
| 207 | // Query the latest stable release |
| 208 | var release Release |
| 209 | err = client.Get("repos/github/gh-aw/releases/latest", &release) |
| 210 | if err != nil { |
| 211 | return "", fmt.Errorf("failed to query latest release: %w", err) |
| 212 | } |
| 213 | |
| 214 | updateCheckLog.Printf("Latest release: %s (prerelease: %v)", release.TagName, release.Prerelease) |
| 215 | |
| 216 | // /releases/latest already excludes prereleases per the GitHub API contract, |
| 217 | // but guard defensively in case the response ever changes. |
| 218 | if release.Prerelease { |
| 219 | return "", nil |
| 220 | } |
| 221 | |
| 222 | return release.TagName, nil |
| 223 | } |
| 224 | |
| 225 | func gitHubDotComRESTClientOptions() api.ClientOptions { |
| 226 | return api.ClientOptions{ |
no test coverage detected