@@ -22,64 +22,52 @@ async function runOnce() {
22
22
core . info ( `name: ${ name } ` ) ;
23
23
core . info ( `token: ${ token } ` ) ;
24
24
25
- const octokit = new github . GitHub ( token ) ;
25
+ const octokit = github . getOctokit ( token ) ;
26
26
27
- // Delete the previous release since we can't overwrite one. This may happen
28
- // due to retrying an upload or it may happen because we're doing the dev
29
- // release.
30
- const releases = await octokit . paginate ( "GET /repos/:owner/:repo/releases" , { owner, repo } ) ;
31
- for ( const release of releases ) {
32
- if ( release . tag_name !== name ) {
33
- continue ;
34
- }
35
- const release_id = release . id ;
36
- core . info ( `deleting release ${ release_id } ` ) ;
37
- await octokit . repos . deleteRelease ( { owner, repo, release_id } ) ;
38
- }
39
-
40
- // We also need to update the `dev` tag while we're at it on the `dev` branch.
41
- if ( name == 'dev' ) {
27
+ // Try to load the release for this tag, and if it doesn't exist then make a
28
+ // new one. We might race with other builders on creation, though, so if the
29
+ // creation fails try again to get the release by the tag.
30
+ let release = null ;
31
+ try {
32
+ core . info ( `fetching release` ) ;
33
+ release = await octokit . rest . repos . getReleaseByTag ( { owner, repo, tag : name } ) ;
34
+ } catch ( e ) {
35
+ console . log ( "ERROR: " , JSON . stringify ( e , null , 2 ) ) ;
36
+ core . info ( `creating a release` ) ;
42
37
try {
43
- core . info ( `updating dev tag` ) ;
44
- await octokit . git . updateRef ( {
45
- owner,
46
- repo,
47
- ref : 'tags/dev' ,
48
- sha,
49
- force : true ,
50
- } ) ;
51
- } catch ( e ) {
52
- console . log ( "ERROR: " , JSON . stringify ( e , null , 2 ) ) ;
53
- core . info ( `creating dev tag` ) ;
54
- await octokit . git . createTag ( {
38
+ release = await octokit . rest . repos . createRelease ( {
55
39
owner,
56
40
repo,
57
- tag : 'dev' ,
58
- message : 'dev release' ,
59
- object : sha ,
60
- type : 'commit' ,
41
+ tag_name : name ,
42
+ prerelease : name === 'dev' ,
61
43
} ) ;
44
+ } catch ( e ) {
45
+ console . log ( "ERROR: " , JSON . stringify ( e , null , 2 ) ) ;
46
+ core . info ( `fetching one more time` ) ;
47
+ release = await octokit . rest . repos . getReleaseByTag ( { owner, repo, tag : name } ) ;
62
48
}
63
49
}
64
-
65
- // Creates an official GitHub release for this `tag`, and if this is `dev`
66
- // then we know that from the previous block this should be a fresh release.
67
- core . info ( `creating a release` ) ;
68
- const release = await octokit . repos . createRelease ( {
69
- owner,
70
- repo,
71
- tag_name : name ,
72
- prerelease : name === 'dev' ,
73
- } ) ;
50
+ console . log ( "found release: " , JSON . stringify ( release . data , null , 2 ) ) ;
74
51
75
52
// Upload all the relevant assets for this release as just general blobs.
76
53
for ( const file of glob . sync ( files ) ) {
77
54
const size = fs . statSync ( file ) . size ;
55
+ const name = path . basename ( file ) ;
56
+ for ( const asset of release . data . assets ) {
57
+ if ( asset . name !== name )
58
+ continue ;
59
+ console . log ( `deleting prior asset ${ asset . id } ` ) ;
60
+ await octokit . rest . repos . deleteReleaseAsset ( {
61
+ owner,
62
+ repo,
63
+ asset_id : asset . id ,
64
+ } ) ;
65
+ }
78
66
core . info ( `upload ${ file } ` ) ;
79
- await octokit . repos . uploadReleaseAsset ( {
67
+ await octokit . rest . repos . uploadReleaseAsset ( {
80
68
data : fs . createReadStream ( file ) ,
81
69
headers : { 'content-length' : size , 'content-type' : 'application/octet-stream' } ,
82
- name : path . basename ( file ) ,
70
+ name,
83
71
url : release . data . upload_url ,
84
72
} ) ;
85
73
}
0 commit comments