11/* eslint no-console: 0 */
22/* eslint max-len: 0 */
3- import path from 'path' ;
43import fs from 'fs' ;
5-
4+ import path from 'path' ;
5+ import Octokit from '@octokit/rest' ;
66import program from 'commander' ;
7- import minimatch from 'minimatch' ;
8- import pkg from '../package.json' ;
97import * as LinkHeader from 'http-link-header' ;
10- const URL = require ( 'url-parse' ) ;
118import * as mime from 'mime-types' ;
9+ import minimatch from 'minimatch' ;
10+ import parse from 'url-parse' ;
11+ import pkg from '../package.json' ;
1212
13- import Octokit from '@octokit/rest' ;
1413const octokit = new Octokit ( ) ;
1514
1615program
@@ -22,7 +21,6 @@ program
2221 . option ( '-t, --tag <tag>' , 'tag' )
2322 . option ( '-n, --name <name>' , 'name' )
2423 . option ( '-b, --body <body>' , 'body' , false )
25- . option ( '-a, --anonymous' , 'Use github API without token mainly for testing' , false )
2624 . option ( '-d, --draft [value]' , 'draft' , function ( val ) {
2725 if ( String ( val ) . toLowerCase ( ) === 'false' ) {
2826 return false ;
@@ -40,21 +38,30 @@ program.parse(process.argv);
4038
4139const [ command , ...args ] = program . args ;
4240
43- if ( ! program . anonymous ) {
41+ if ( ! command !== 'list' ) {
4442 octokit . authenticate ( {
4543 type : 'oauth' ,
4644 token : program . token || process . env . GITHUB_TOKEN
4745 } ) ;
4846}
4947
5048function next ( response ) {
51- if ( ! response . headers || ! response . headers . link ) return false ;
52-
53- let link = LinkHeader . parse ( response . headers . link ) . rel ( 'next' ) ;
54- if ( ! link ) return false ;
55- link = URL ( link [ 0 ] . uri , null , true ) . query
56- if ( ! link ) return false ;
57- return parseInt ( link . page ) ;
49+ if ( ! response . headers || ! response . headers . link ) {
50+ return false ;
51+ }
52+
53+ let link = LinkHeader . parse ( response . headers . link ) . rel ( 'next' ) ;
54+ if ( ! link ) {
55+ return false ;
56+ }
57+
58+ const url = parse ( link [ 0 ] . uri , null , true ) ;
59+ if ( ! url . query ) {
60+ return false ;
61+ }
62+
63+ const nextPage = parseInt ( url . query . page ) ;
64+ return nextPage ;
5865}
5966
6067const fn = {
@@ -64,31 +71,33 @@ const fn = {
6471 let release ;
6572
6673 try {
67- console . log ( '> releases# getReleaseByTag' ) ;
68- release = await octokit . repos . getReleaseByTag ( {
74+ console . log ( `> getReleaseByTag: owner= ${ owner } , repo= ${ repo } , tag= ${ tag } ` ) ;
75+ const res = await octokit . repos . getReleaseByTag ( {
6976 owner : owner ,
7077 repo : repo ,
71- tag : tag
78+ tag : tag ,
7279 } ) ;
80+ release = res . data ;
7381 } catch ( err ) {
7482 // Ignore
7583 }
7684
7785 try {
7886 if ( ! release ) {
79- console . log ( '> releases# createRelease' ) ;
80- result = await octokit . repos . createRelease ( {
87+ console . log ( `> createRelease: tag_name= ${ tag } , name= ${ name || tag } , draft= ${ ! ! draft } , prerelease= ${ ! ! prerelease } ` ) ;
88+ const res = await octokit . repos . createRelease ( {
8189 owner,
8290 repo,
8391 tag_name : tag ,
8492 name : name || tag ,
8593 body : body || '' ,
8694 draft : ! ! draft ,
87- prerelease : ! ! prerelease
88- } )
95+ prerelease : ! ! prerelease ,
96+ } ) ;
97+ release = res . data ;
8998 } else {
90- console . log ( '> releases# updateRelease' ) ;
91- release = await octokit . repos . updateRelease ( {
99+ console . log ( `> updateRelease: release_id= ${ release . id } , tag_name= ${ tag } , name= ${ name || tag } ` ) ;
100+ const res = await octokit . repos . updateRelease ( {
92101 owner,
93102 repo,
94103 release_id : release . id ,
@@ -97,23 +106,23 @@ const fn = {
97106 body : ( body === undefined ) ? release . body || '' : body || '' ,
98107 draft : ( draft === undefined ) ? ! ! release . draft : false ,
99108 prerelease : ( prerelease === undefined ) ? ! ! release . prerelease : false ,
100- } )
109+ } ) ;
110+ release = res . data ;
101111 }
102112
103113 if ( files . length > 0 ) {
104- console . log ( '> releases# uploadReleaseAsset' ) ;
114+ console . log ( `> uploadReleaseAsset: assets_url= ${ release . assets_url } ` ) ;
105115 for ( let i = 0 ; i < files . length ; ++ i ) {
106116 const file = files [ i ] ;
107- console . log ( '#%d name="%s" filePath="%s"' , i + 1 , path . basename ( file ) , file ) ;
108-
117+ console . log ( ` #${ i + 1 } : name="${ path . basename ( file ) } " filePath="${ file } "` ) ;
109118 await octokit . repos . uploadReleaseAsset ( {
110- url : release . data . upload_url ,
119+ url : release . upload_url ,
111120 file : fs . createReadStream ( file ) ,
112121 headers : {
113- 'content-type ' : mime . lookup ( ' file' ) || 'application/octet-stream' ,
114- 'content-length ' : fs . statSync ( file ) . size ,
122+ 'Content-Type ' : mime . lookup ( file ) || 'application/octet-stream' ,
123+ 'Content-Length ' : fs . statSync ( file ) . size ,
115124 } ,
116- name : path . basename ( asset ) ,
125+ name : path . basename ( file ) ,
117126 } ) ;
118127 }
119128 }
@@ -127,72 +136,77 @@ const fn = {
127136 let release ;
128137
129138 try {
130- console . log ( '> releases# getReleaseByTag' ) ;
131- release = await octokit . repos . getReleaseByTag ( {
139+ console . log ( `> getReleaseByTag: owner= ${ owner } , repo= ${ repo } , tag= ${ tag } ` ) ;
140+ const res = await octokit . repos . getReleaseByTag ( {
132141 owner : owner ,
133142 repo : repo ,
134- tag : tag
143+ tag : tag ,
135144 } ) ;
145+ release = res . data ;
136146 } catch ( err ) {
137147 console . error ( err ) ;
138148 return ;
139149 }
140150
141151 try {
142- console . log ( '> releases#listAssetsForRelease' ) ;
152+ const release_id = release . id ;
153+ console . log ( `> listAssetsForRelease: release_id=${ release_id } ` ) ;
143154
144155 let assets = [ ] ;
145- let _assets = null ;
146156 let page = 1 ;
147157 do {
148- let _assets = await octokit . repos . listAssetsForRelease ( { owner, repo, release_id, per_page , page} )
149- assets = assets . concat ( _assets . data )
150- page = next ( _assets )
158+ const res = await octokit . repos . listAssetsForRelease ( { owner, repo, release_id, page } ) ;
159+ assets = assets . concat ( res . data ) ;
160+ page = next ( res ) ;
151161 } while ( page )
152162
153163 const deleteAssets = assets . filter ( asset => {
154164 return patterns . some ( pattern => minimatch ( asset . name , pattern ) ) ;
155165 } ) ;
156- console . log ( 'assets=%d, deleteAssets=%d' , assets . length , deleteAssets . length ) ;
166+ console . log ( ` assets= ${ assets . length } , deleteAssets= ${ deleteAssets . length } ` ) ;
157167
158168 if ( deleteAssets . length > 0 ) {
159- console . log ( '> releases# deleteReleaseAsset' ) ;
169+ console . log ( '> deleteReleaseAsset: ' ) ;
160170 for ( let i = 0 ; i < deleteAssets . length ; ++ i ) {
161171 const asset = deleteAssets [ i ] ;
162- console . log ( '#%d' , i + 1 , {
172+ console . log ( ` # ${ i + 1 } :` , {
163173 id : asset . id ,
164174 name : asset . name ,
165175 label : asset . label ,
166176 state : asset . state ,
167177 size : asset . size ,
168178 download_count : asset . download_count ,
169179 created_at : asset . created_at ,
170- updated_at : asset . updated_at
180+ updated_at : asset . updated_at ,
171181 } ) ;
172- await octokit . repos . deleteReleaseAsset ( { owner, repo, asset_id : asset . id } )
182+ await octokit . repos . deleteReleaseAsset ( { owner, repo, asset_id : asset . id } ) ;
173183 }
174184 }
175185 } catch ( err ) {
176186 console . error ( err ) ;
177187 }
178188 } ,
179189 'list' : async ( ) => {
180- const releases = await octokit . repos . listReleases ( { owner : program . owner , repo : program . repo , page : 1 } ) ;
190+ const releases = await octokit . repos . listReleases ( {
191+ owner : program . owner ,
192+ repo : program . repo ,
193+ page : 1 ,
194+ } ) ;
181195 for ( const release of releases . data ) {
182196 console . log ( `${ release . name } (${ release . tag_name } )` ) ;
183197 }
184198 } ,
185199} [ command ] ;
186200
187201async function main ( ) {
188- try {
189- typeof fn === 'function' && await fn ( ) ;
190- } catch ( err ) {
191- // message has token in the response
192- const message = err . message . replace ( / h t t p s ? : [ ^ \s ] * / g, ( match ) => match . replace ( / \? .* / , '' ) )
193- console . log ( message ) ;
194- process . exit ( 1 ) ;
195- }
202+ try {
203+ typeof fn === 'function' && await fn ( ) ;
204+ } catch ( err ) {
205+ // message has token in the response
206+ const message = err . message . replace ( / h t t p s ? : [ ^ \s ] * / g, ( match ) => match . replace ( / \? .* / , '' ) ) ;
207+ console . log ( message ) ;
208+ process . exit ( 1 ) ;
209+ }
196210}
197211
198212main ( )
0 commit comments