MCPcopy
hub / github.com/cli/cli / uploadAsset

Function uploadAsset

pkg/cmd/release/shared/upload.go:161–203  ·  view source on GitHub ↗
(ctx context.Context, httpClient httpDoer, uploadURL string, asset AssetForUpload)

Source from the content-addressed store, hash-verified

159}
160
161func uploadAsset(ctx context.Context, httpClient httpDoer, uploadURL string, asset AssetForUpload) (*ReleaseAsset, error) {
162 u, err := url.Parse(uploadURL)
163 if err != nil {
164 return nil, err
165 }
166 params := u.Query()
167 params.Set("name", asset.Name)
168 params.Set("label", asset.Label)
169 u.RawQuery = params.Encode()
170
171 f, err := asset.Open()
172 if err != nil {
173 return nil, err
174 }
175 defer f.Close()
176
177 req, err := http.NewRequestWithContext(ctx, "POST", u.String(), f)
178 if err != nil {
179 return nil, err
180 }
181 req.ContentLength = asset.Size
182 req.Header.Set("Content-Type", asset.MIMEType)
183 req.GetBody = asset.Open
184
185 resp, err := httpClient.Do(req)
186 if err != nil {
187 return nil, errNetwork{err}
188 }
189 defer resp.Body.Close()
190
191 success := resp.StatusCode >= 200 && resp.StatusCode < 300
192 if !success {
193 return nil, api.HandleHTTPError(resp)
194 }
195
196 var newAsset ReleaseAsset
197 dec := json.NewDecoder(resp.Body)
198 if err := dec.Decode(&newAsset); err != nil {
199 return nil, err
200 }
201
202 return &newAsset, nil
203}
204
205func deleteAsset(ctx context.Context, httpClient httpDoer, assetURL string) error {
206 req, err := http.NewRequestWithContext(ctx, "DELETE", assetURL, nil)

Callers 1

uploadWithDeleteFunction · 0.85

Calls 7

HandleHTTPErrorFunction · 0.92
OpenMethod · 0.80
QueryMethod · 0.65
SetMethod · 0.65
CloseMethod · 0.65
DoMethod · 0.65
StringMethod · 0.45

Tested by

no test coverage detected