@@ -281,53 +281,65 @@ export const release = async (
281
281
} ) ;
282
282
return release . data ;
283
283
} catch ( error ) {
284
- if ( error . status === 404 ) {
285
- const tag_name = tag ;
286
- const name = config . input_name || tag ;
287
- const body = releaseBody ( config ) ;
288
- const draft = config . input_draft ;
289
- const prerelease = config . input_prerelease ;
290
- const target_commitish = config . input_target_commitish ;
291
- const make_latest = config . input_make_latest ;
292
- let commitMessage : string = "" ;
293
- if ( target_commitish ) {
294
- commitMessage = ` using commit "${ target_commitish } "` ;
295
- }
296
- console . log (
297
- `👩🏭 Creating new GitHub release for tag ${ tag_name } ${ commitMessage } ...`
298
- ) ;
299
- try {
300
- let release = await releaser . createRelease ( {
301
- owner,
302
- repo,
303
- tag_name,
304
- name,
305
- body,
306
- draft,
307
- prerelease,
308
- target_commitish,
309
- discussion_category_name,
310
- generate_release_notes,
311
- make_latest,
312
- } ) ;
313
- return release . data ;
314
- } catch ( error ) {
315
- // presume a race with competing metrix runs
316
- console . log ( error . response . data ) ;
317
- console . log (
318
- `⚠️ GitHub release failed with status: ${
319
- error . status
320
- } \n${ JSON . stringify ( error . response . data . errors ) } \nretrying... (${
321
- maxRetries - 1
322
- } retries remaining)`
323
- ) ;
324
- return release ( config , releaser , maxRetries - 1 ) ;
325
- }
326
- } else {
284
+ if ( error . status !== 404 ) {
327
285
console . log (
328
286
`⚠️ Unexpected error fetching GitHub release for tag ${ config . github_ref } : ${ error } `
329
287
) ;
330
288
throw error ;
331
289
}
290
+
291
+ const tag_name = tag ;
292
+ const name = config . input_name || tag ;
293
+ const body = releaseBody ( config ) ;
294
+ const draft = config . input_draft ;
295
+ const prerelease = config . input_prerelease ;
296
+ const target_commitish = config . input_target_commitish ;
297
+ const make_latest = config . input_make_latest ;
298
+ let commitMessage : string = "" ;
299
+ if ( target_commitish ) {
300
+ commitMessage = ` using commit "${ target_commitish } "` ;
301
+ }
302
+ console . log (
303
+ `👩🏭 Creating new GitHub release for tag ${ tag_name } ${ commitMessage } ...`
304
+ ) ;
305
+ try {
306
+ let release = await releaser . createRelease ( {
307
+ owner,
308
+ repo,
309
+ tag_name,
310
+ name,
311
+ body,
312
+ draft,
313
+ prerelease,
314
+ target_commitish,
315
+ discussion_category_name,
316
+ generate_release_notes,
317
+ make_latest,
318
+ } ) ;
319
+ return release . data ;
320
+ } catch ( error ) {
321
+ // presume a race with competing matrix runs
322
+ console . log ( `⚠️ GitHub release failed with status: ${ error . status } ` ) ;
323
+ console . log ( `${ JSON . stringify ( error . response . data ) } ` ) ;
324
+
325
+ switch ( error . status ) {
326
+ case 403 :
327
+ console . log (
328
+ "Skip retry — your GitHub token/PAT does not have the required permission to create a release"
329
+ ) ;
330
+ throw error ;
331
+
332
+ case 404 :
333
+ console . log ( "Skip retry - discussion category mismatch" ) ;
334
+ throw error ;
335
+
336
+ case 422 :
337
+ console . log ( "Skip retry - validation failed" ) ;
338
+ throw error ;
339
+ }
340
+
341
+ console . log ( `retrying... (${ maxRetries - 1 } retries remaining)` ) ;
342
+ return release ( config , releaser , maxRetries - 1 ) ;
343
+ }
332
344
}
333
345
} ;
0 commit comments