latestVersionFiltered fetches the latest release version matching a tag prefix. Needed for multi-module repos like golang/tools where tags look like "gopls/v0.21.1".
(ctx context.Context, owner, repo, tagPrefix string)
| 316 | // latestVersionFiltered fetches the latest release version matching a tag prefix. |
| 317 | // Needed for multi-module repos like golang/tools where tags look like "gopls/v0.21.1". |
| 318 | func (r *Registry) latestVersionFiltered(ctx context.Context, owner, repo, tagPrefix string) (string, error) { |
| 319 | url := fmt.Sprintf("https://api.github.com/repos/%s/%s/releases?per_page=50", owner, repo) |
| 320 | |
| 321 | var releases []githubRelease |
| 322 | if err := r.getJSON(ctx, url, &releases); err != nil { |
| 323 | return "", fmt.Errorf("fetching releases for %s/%s: %w", owner, repo, err) |
| 324 | } |
| 325 | |
| 326 | for _, rel := range releases { |
| 327 | if strings.HasPrefix(rel.TagName, tagPrefix) { |
| 328 | return rel.TagName, nil |
| 329 | } |
| 330 | } |
| 331 | |
| 332 | return "", fmt.Errorf("no release found for %s/%s with tag prefix %q", owner, repo, tagPrefix) |
| 333 | } |
| 334 | |
| 335 | // doGet performs an authenticated GET request and returns the response. |
| 336 | // The caller is responsible for closing the response body. |
no test coverage detected