@@ -149,6 +149,7 @@ export default class UploadAssetsPlugin implements IPlugin {
149
149
dryRun = false ,
150
150
id ?: string
151
151
) {
152
+ const releases = Array . isArray ( release ) ? release : [ release ] ;
152
153
const assets = await glob ( this . options . assets ) ;
153
154
154
155
auto . logger . log . info ( endent `
@@ -162,18 +163,14 @@ export default class UploadAssetsPlugin implements IPlugin {
162
163
return [ ] ;
163
164
}
164
165
165
- const responses = await Promise . all (
166
+ const assetUploadRequests = await Promise . all (
166
167
assets . map ( async ( asset ) => {
167
- if ( ! auto . git ) {
168
- return ;
169
- }
170
-
171
168
const file = await readFile ( asset ) ;
172
169
const stats = await stat ( asset ) ;
173
170
const type = await FileType . fromBuffer ( file ) ;
174
171
175
172
const DEFAULT_BASE_URL = "https://api.github.com" ;
176
- const baseUrl = auto . git . options . baseUrl || DEFAULT_BASE_URL ;
173
+ const baseUrl = auto . git ! . options . baseUrl || DEFAULT_BASE_URL ;
177
174
const fileName = path . basename ( asset ) ;
178
175
const extension = path . extname ( fileName ) ;
179
176
const options : RestEndpointMethodTypes [ "repos" ] [ "uploadReleaseAsset" ] [ "parameters" ] = {
@@ -185,8 +182,8 @@ export default class UploadAssetsPlugin implements IPlugin {
185
182
? fileName . replace ( extension , `-${ id } ${ extension } ` )
186
183
: `${ fileName } -${ id } `
187
184
: fileName ,
188
- owner : auto . git . options . owner ,
189
- repo : auto . git . options . repo ,
185
+ owner : auto . git ! . options . owner ,
186
+ repo : auto . git ! . options . repo ,
190
187
headers : {
191
188
"content-length" : stats . size ,
192
189
"content-type" : type ? type . mime : "application/octet-stream" ,
@@ -198,34 +195,53 @@ export default class UploadAssetsPlugin implements IPlugin {
198
195
options . baseUrl = `${ origin } /api/uploads` ;
199
196
}
200
197
201
- const assetResponses : AssetResponse [ ] = [ ] ;
198
+ return options ;
199
+ } )
200
+ ) ;
202
201
203
- // Multiple releases were made
204
- if ( Array . isArray ( release ) ) {
205
- await Promise . all (
206
- release . map ( async ( r ) => {
207
- const {
208
- data : releaseAsset ,
209
- } = await auto . git ! . github . repos . uploadReleaseAsset ( {
210
- ...options ,
211
- release_id : r . data . id ,
212
- } ) ;
213
-
214
- assetResponses . push ( releaseAsset ) ;
215
- } )
216
- ) ;
217
- } else {
218
- const {
219
- data : releaseAsset ,
220
- } = await auto . git . github . repos . uploadReleaseAsset ( {
221
- ...options ,
202
+ const assetNames = assetUploadRequests . map ( ( o ) => o . name ) ;
203
+ await Promise . all (
204
+ releases . map ( async ( release ) => {
205
+ const assetsInRelease = await auto . git ! . github . paginate (
206
+ auto . git ! . github . repos . listReleaseAssets ,
207
+ {
208
+ owner : auto . git ! . options . owner ,
209
+ repo : auto . git ! . options . repo ,
222
210
release_id : release . data . id ,
223
- } ) ;
211
+ }
212
+ ) ;
224
213
225
- assetResponses . push ( releaseAsset ) ;
214
+ for ( const asset of assetsInRelease ) {
215
+ if ( assetNames . includes ( asset . name ) ) {
216
+ // eslint-disable-next-line no-await-in-loop
217
+ await auto . git ! . github . repos . deleteReleaseAsset ( {
218
+ owner : auto . git ! . options . owner ,
219
+ repo : auto . git ! . options . repo ,
220
+ asset_id : asset . id ,
221
+ } ) ;
222
+ }
226
223
}
224
+ } )
225
+ ) ;
226
+
227
+ const responses = await Promise . all (
228
+ assetUploadRequests . map ( async ( options ) => {
229
+ const assetResponses : AssetResponse [ ] = [ ] ;
230
+
231
+ await Promise . all (
232
+ releases . map ( async ( r ) => {
233
+ const {
234
+ data : releaseAsset ,
235
+ } = await auto . git ! . github . repos . uploadReleaseAsset ( {
236
+ ...options ,
237
+ release_id : r . data . id ,
238
+ } ) ;
239
+
240
+ assetResponses . push ( releaseAsset ) ;
241
+ } )
242
+ ) ;
227
243
228
- auto . logger . log . success ( `Uploaded asset: ${ asset } ` ) ;
244
+ auto . logger . log . success ( `Uploaded asset: ${ options . name } ` ) ;
229
245
return assetResponses ;
230
246
} )
231
247
) ;
0 commit comments