(ctx context.Context, client *http.Client, repo string)
| 113 | } |
| 114 | |
| 115 | func getLatestReleaseInfo(ctx context.Context, client *http.Client, repo string) (*ReleaseInfo, error) { |
| 116 | owner, name, err := safeurl.RepoPartsFromNWO(repo) |
| 117 | if err != nil { |
| 118 | return nil, err |
| 119 | } |
| 120 | u, err := safeurl.JoinPathWithHostPrefix("https://api.github.com", "repos", owner, name, "releases", "latest") |
| 121 | if err != nil { |
| 122 | return nil, err |
| 123 | } |
| 124 | req, err := http.NewRequestWithContext(ctx, "GET", u.String(), nil) |
| 125 | if err != nil { |
| 126 | return nil, err |
| 127 | } |
| 128 | res, err := client.Do(req) |
| 129 | if err != nil { |
| 130 | return nil, err |
| 131 | } |
| 132 | defer func() { |
| 133 | _, _ = io.Copy(io.Discard, res.Body) |
| 134 | res.Body.Close() |
| 135 | }() |
| 136 | if res.StatusCode != 200 { |
| 137 | return nil, fmt.Errorf("unexpected HTTP %d", res.StatusCode) |
| 138 | } |
| 139 | dec := json.NewDecoder(res.Body) |
| 140 | var latestRelease ReleaseInfo |
| 141 | if err := dec.Decode(&latestRelease); err != nil { |
| 142 | return nil, err |
| 143 | } |
| 144 | return &latestRelease, nil |
| 145 | } |
| 146 | |
| 147 | func getStateEntry(stateFilePath string) (*StateEntry, error) { |
| 148 | content, err := os.ReadFile(stateFilePath) |
no test coverage detected