diff --git a/commands/release.go b/commands/release.go index ff40cc006afa462821cc2f864e43d6455f4072b9..517a865e60c87962e9bfe768ee1ced60d123566e 100644 --- a/commands/release.go +++ b/commands/release.go @@ -156,13 +156,16 @@ func uploadReleaseAssets(gh *github.Client, release *octokit.Release, assetsDir go func() { defer wg.Done() + uploadUrl, err := release.UploadURL.Expand(octokit.M{"name": fi.Name()}) + utils.Check(err) + contentType := detectContentType(path, fi) file, err := os.Open(path) utils.Check(err) defer file.Close() - err = gh.UploadReleaseAsset(release, file, fi, contentType) + err = gh.UploadReleaseAsset(uploadUrl, file, contentType) utils.Check(err) }() } diff --git a/github/client.go b/github/client.go index 4ad693377cd81fe0ca2d8e30da7fe63e078e6203..e97c6c6f0a0730853000f7ee7650449885b5e592 100644 --- a/github/client.go +++ b/github/client.go @@ -2,9 +2,7 @@ package github import ( "fmt" - "github.com/jingweno/gh/utils" "github.com/jingweno/go-octokit/octokit" - "net/http" "net/url" "os" ) @@ -119,7 +117,6 @@ func (client *Client) Releases(project *Project) (releases []octokit.Release, er releases, result := client.octokit().Releases(client.requestURL(url)).All() if result.HasError() { err = result.Err - return } return @@ -134,38 +131,16 @@ func (client *Client) CreateRelease(project *Project, params octokit.ReleasePara release, result := client.octokit().Releases(client.requestURL(url)).Create(params) if result.HasError() { err = result.Err - return } return } -func (client *Client) UploadReleaseAsset(release *octokit.Release, asset *os.File, fi os.FileInfo, contentType string) (err error) { - uploadUrl, err := octokit.Hyperlink(release.UploadURL).Expand(octokit.M{"name": fi.Name()}) - utils.Check(err) - +func (client *Client) UploadReleaseAsset(uploadUrl *url.URL, asset *os.File, contentType string) (err error) { c := client.octokit() - - request, err := http.NewRequest("POST", uploadUrl.String(), asset) - utils.Check(err) - - request.Header.Add("Content-Type", contentType) - request.ContentLength = fi.Size() - - if c.AuthMethod != nil { - request.Header.Add("Authorization", c.AuthMethod.String()) - } - - if basicAuth, ok := c.AuthMethod.(octokit.BasicAuth); ok && basicAuth.OneTimePassword != "" { - request.Header.Add("X-GitHub-OTP", basicAuth.OneTimePassword) - } - - httpClient := &http.Client{} - response, err := httpClient.Do(request) - utils.Check(err) - - if response.StatusCode != 201 { - err = fmt.Errorf("Error uploading the release asset %s, %s", fi.Name(), response.Status) + result := c.Uploads(uploadUrl).UploadAsset(asset, contentType) + if result.HasError() { + err = result.Err } return }