Skip to content

Commit a470d49

Browse files
committed
Fix reporting release URL when creating with assets
1 parent 1ad9b0b commit a470d49

File tree

3 files changed

+64
-8
lines changed

3 files changed

+64
-8
lines changed

pkg/cmd/release/create/create.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,10 +279,11 @@ func createRun(opts *CreateOptions) error {
279279
}
280280

281281
if !opts.Draft {
282-
err := publishRelease(httpClient, newRelease.APIURL)
282+
rel, err := publishRelease(httpClient, newRelease.APIURL)
283283
if err != nil {
284284
return err
285285
}
286+
newRelease = rel
286287
}
287288
}
288289

pkg/cmd/release/create/create_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bytes"
55
"encoding/json"
66
"fmt"
7+
"io"
78
"io/ioutil"
89
"net/http"
910
"os"
@@ -290,6 +291,36 @@ func Test_createRun(t *testing.T) {
290291
wantStdout: "https://github.com/OWNER/REPO/releases/tag/v1.2.3\n",
291292
wantStderr: ``,
292293
},
294+
{
295+
name: "publish after uploading files",
296+
isTTY: true,
297+
opts: CreateOptions{
298+
TagName: "v1.2.3",
299+
Name: "",
300+
Body: "",
301+
BodyProvided: true,
302+
Draft: false,
303+
Target: "",
304+
Assets: []*shared.AssetForUpload{
305+
{
306+
Name: "ball.tgz",
307+
Open: func() (io.ReadCloser, error) {
308+
return ioutil.NopCloser(bytes.NewBufferString(`TARBALL`)), nil
309+
},
310+
},
311+
},
312+
Concurrency: 1,
313+
},
314+
wantParams: map[string]interface{}{
315+
"tag_name": "v1.2.3",
316+
"name": "",
317+
"body": "",
318+
"draft": true,
319+
"prerelease": false,
320+
},
321+
wantStdout: "https://github.com/OWNER/REPO/releases/tag/v1.2.3-final\n",
322+
wantStderr: ``,
323+
},
293324
}
294325
for _, tt := range tests {
295326
t.Run(tt.name, func(t *testing.T) {
@@ -300,8 +331,14 @@ func Test_createRun(t *testing.T) {
300331

301332
fakeHTTP := &httpmock.Registry{}
302333
fakeHTTP.Register(httpmock.REST("POST", "repos/OWNER/REPO/releases"), httpmock.StatusStringResponse(201, `{
334+
"url": "https://api.github.com/releases/123",
335+
"upload_url": "https://api.github.com/assets/upload",
303336
"html_url": "https://github.com/OWNER/REPO/releases/tag/v1.2.3"
304337
}`))
338+
fakeHTTP.Register(httpmock.REST("POST", "assets/upload"), httpmock.StatusStringResponse(201, `{}`))
339+
fakeHTTP.Register(httpmock.REST("PATCH", "releases/123"), httpmock.StatusStringResponse(201, `{
340+
"html_url": "https://github.com/OWNER/REPO/releases/tag/v1.2.3-final"
341+
}`))
305342

306343
tt.opts.IO = io
307344
tt.opts.HttpClient = func() (*http.Client, error) {
@@ -326,6 +363,19 @@ func Test_createRun(t *testing.T) {
326363
require.NoError(t, err)
327364
assert.Equal(t, tt.wantParams, params)
328365

366+
if len(tt.opts.Assets) > 0 {
367+
q := fakeHTTP.Requests[1].URL.Query()
368+
assert.Equal(t, tt.opts.Assets[0].Name, q.Get("name"))
369+
assert.Equal(t, tt.opts.Assets[0].Label, q.Get("label"))
370+
371+
bb, err := ioutil.ReadAll(fakeHTTP.Requests[2].Body)
372+
require.NoError(t, err)
373+
var updateParams interface{}
374+
err = json.Unmarshal(bb, &updateParams)
375+
require.NoError(t, err)
376+
assert.Equal(t, map[string]interface{}{"draft": false}, updateParams)
377+
}
378+
329379
assert.Equal(t, tt.wantStdout, stdout.String())
330380
assert.Equal(t, tt.wantStderr, stderr.String())
331381
})

pkg/cmd/release/create/http.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"bytes"
55
"encoding/json"
66
"fmt"
7-
"io"
87
"io/ioutil"
98
"net/http"
109

@@ -50,24 +49,30 @@ func createRelease(httpClient *http.Client, repo ghrepo.Interface, params map[st
5049
return &newRelease, err
5150
}
5251

53-
func publishRelease(httpClient *http.Client, releaseURL string) error {
52+
func publishRelease(httpClient *http.Client, releaseURL string) (*shared.Release, error) {
5453
req, err := http.NewRequest("PATCH", releaseURL, bytes.NewBufferString(`{"draft":false}`))
5554
if err != nil {
56-
return err
55+
return nil, err
5756
}
5857

5958
req.Header.Add("Content-Type", "application/json")
6059

6160
resp, err := httpClient.Do(req)
6261
if err != nil {
63-
return err
62+
return nil, err
6463
}
6564

6665
defer resp.Body.Close()
6766
if resp.StatusCode > 299 {
68-
return api.HandleHTTPError(resp)
67+
return nil, api.HandleHTTPError(resp)
68+
}
69+
70+
b, err := ioutil.ReadAll(resp.Body)
71+
if err != nil {
72+
return nil, err
6973
}
7074

71-
_, err = io.Copy(ioutil.Discard, resp.Body)
72-
return err
75+
var release shared.Release
76+
err = json.Unmarshal(b, &release)
77+
return &release, err
7378
}

0 commit comments

Comments
 (0)