@@ -14,12 +14,13 @@ program
1414 . version ( pkg . version )
1515 . usage ( '<command> [<args>]' )
1616 . option ( '--baseurl <baseurl>' , 'API endpoint' , 'https://api.github.com' )
17- . option ( '-T, --token <token>' , 'OAuth2 token' )
18- . option ( '-o, --owner <owner>' , 'The repository owner.' )
19- . option ( '-r, --repo <repo>' , 'The repository name.' )
17+ . option ( '-T, --token <token>' , 'OAuth2 token' , null )
18+ . option ( '-o, --owner <owner>' , 'The repository owner.' , '' )
19+ . option ( '-r, --repo <repo>' , 'The repository name.' , '' )
2020 . option ( '-t, --tag <tag>' , 'The name of the tag.' )
21+ . option ( '--release-id <id>' , 'The release id.' )
2122 . option ( '-c, --commitish <value>' , 'Specifies the commitish value for tag. Unused if the tag already exists.' )
22- . option ( '-n, --name <name>' , 'The name of the release.' )
23+ . option ( '-n, --name <name>' , 'The name of the release.' , '' ) // Note: name is a reserved word and it has to specify a default value.
2324 . option ( '-b, --body <body>' , 'Text describing the contents of the tag.' )
2425 . option ( '-d, --draft [value]' , '`true` makes the release a draft, and `false` publishes the release.' , function ( val ) {
2526 if ( String ( val ) . toLowerCase ( ) === 'false' ) {
@@ -49,8 +50,8 @@ function next(response) {
4950 return false ;
5051 }
5152
52- let link = LinkHeader . parse ( response . headers . link ) . rel ( 'next' ) ;
53- if ( ! link ) {
53+ const link = LinkHeader . parse ( response . headers . link ) . rel ( 'next' ) ;
54+ if ( ! link || ! link [ 0 ] ) {
5455 return false ;
5556 }
5657
@@ -65,25 +66,27 @@ function next(response) {
6566
6667const fn = {
6768 'upload' : async ( ) => {
68- const { owner, repo, tag, commitish, name, body, draft, prerelease } = program ;
69+ const { owner, repo, tag, commitish, name, body, draft, prerelease, releaseId } = program ;
6970 const files = args ;
7071 let release ;
7172
7273 try {
73- console . log ( `> getReleaseByTag: owner=${ owner } , repo=${ repo } , tag=${ tag } ` ) ;
74- const res = await octokit . repos . getReleaseByTag ( {
75- owner : owner ,
76- repo : repo ,
77- tag : tag ,
78- } ) ;
79- release = res . data ;
74+ if ( tag ) {
75+ console . log ( `> getReleaseByTag: owner=${ owner } , repo=${ repo } , tag=${ tag } ` ) ;
76+ const res = await octokit . repos . getReleaseByTag ( { owner, repo, tag } ) ;
77+ release = res . data ;
78+ } else if ( releaseId ) {
79+ console . log ( `> getRelease: owner=${ owner } , repo=${ repo } , release_id=${ releaseId } ` ) ;
80+ const res = await octokit . repos . getRelease ( { owner, repo, release_id : releaseId } ) ;
81+ release = res . data ;
82+ }
8083 } catch ( err ) {
8184 // Ignore
8285 }
8386
8487 try {
8588 if ( ! release ) {
86- console . log ( `> createRelease: tag_name=${ tag } , target_commitish=${ commitish } , name=${ name || tag } , draft=${ ! ! draft } , prerelease=${ ! ! prerelease } ` ) ;
89+ console . log ( `> createRelease: tag_name=${ tag } , target_commitish=${ commitish || '' } , name=${ name || tag } , draft=${ ! ! draft } , prerelease=${ ! ! prerelease } ` ) ;
8790 const res = await octokit . repos . createRelease ( {
8891 owner,
8992 repo,
@@ -131,18 +134,27 @@ const fn = {
131134 }
132135 } ,
133136 'delete' : async ( ) => {
134- const { owner, repo, tag, name , body , draft , prerelease } = program ;
137+ const { owner, repo, tag, releaseId } = program ;
135138 const patterns = args ;
136139 let release ;
137140
138141 try {
139- console . log ( `> getReleaseByTag: owner=${ owner } , repo=${ repo } , tag=${ tag } ` ) ;
140- const res = await octokit . repos . getReleaseByTag ( {
141- owner : owner ,
142- repo : repo ,
143- tag : tag ,
144- } ) ;
145- release = res . data ;
142+ if ( tag ) {
143+ console . log ( `> getReleaseByTag: owner=${ owner } , repo=${ repo } , tag=${ tag } ` ) ;
144+ const res = await octokit . repos . getReleaseByTag ( { owner, repo, tag } ) ;
145+ release = res . data ;
146+ } else if ( releaseId ) {
147+ console . log ( `> getRelease: owner=${ owner } , repo=${ repo } , release_id=${ releaseId } ` ) ;
148+ const res = await octokit . repos . getRelease ( { owner, repo, release_id : releaseId } ) ;
149+ release = res . data ;
150+ }
151+
152+ if ( patterns . length === 0 ) {
153+ const release_id = release . id ;
154+ console . log ( `> deleteRelease: release_id=${ release_id } ` ) ;
155+ await octokit . repos . deleteRelease ( { owner, repo, release_id : release . id } ) ;
156+ return ;
157+ }
146158 } catch ( err ) {
147159 console . error ( err ) ;
148160 return ;
@@ -187,13 +199,22 @@ const fn = {
187199 }
188200 } ,
189201 'list' : async ( ) => {
190- const releases = await octokit . repos . listReleases ( {
191- owner : program . owner ,
192- repo : program . repo ,
193- page : 1 ,
194- } ) ;
195- for ( const release of releases . data ) {
196- console . log ( `${ release . name } (${ release . tag_name } )` ) ;
202+ const { owner, repo } = program ;
203+ let releases = [ ] ;
204+
205+ try {
206+ let page = 1 ;
207+ do {
208+ const res = await octokit . repos . listReleases ( { owner, repo, page } ) ;
209+ releases = releases . concat ( res . data ) ;
210+ page = next ( res ) ;
211+ } while ( page )
212+ } catch ( err ) {
213+ console . log ( err ) ;
214+ }
215+
216+ for ( const release of releases ) {
217+ console . log ( `* tag_name=${ JSON . stringify ( release . tag_name ) } , name=${ JSON . stringify ( release . name ) } , id=${ release . id } ` ) ;
197218 }
198219 } ,
199220} [ command ] ;
0 commit comments