@@ -111,7 +111,8 @@ export class GitHubTarget extends BaseTarget {
111
111
public async createDraftRelease (
112
112
version : string ,
113
113
revision : string ,
114
- changes ?: Changeset
114
+ changes ?: Changeset ,
115
+ isLatest = true
115
116
) : Promise < GitHubRelease > {
116
117
const tag = versionToTag ( version , this . githubConfig . tagPrefix ) ;
117
118
this . logger . info ( `Git tag: "${ tag } "` ) ;
@@ -127,15 +128,6 @@ export class GitHubTarget extends BaseTarget {
127
128
} ;
128
129
}
129
130
130
- const { data : latestRelease } = await this . github . repos . getLatestRelease ( {
131
- owner : this . githubConfig . owner ,
132
- repo : this . githubConfig . repo ,
133
- } ) ;
134
-
135
- const isLatest = isPreview
136
- ? false
137
- : isLatestRelease ( latestRelease , version ) ;
138
-
139
131
const { data } = await this . github . repos . createRelease ( {
140
132
draft : true ,
141
133
name : tag ,
@@ -336,7 +328,7 @@ export class GitHubTarget extends BaseTarget {
336
328
*
337
329
* @param release Release object
338
330
*/
339
- public async publishRelease ( release : GitHubRelease ) {
331
+ public async publishRelease ( release : GitHubRelease , isLatest = true ) {
340
332
if ( isDryRun ( ) ) {
341
333
this . logger . info ( `[dry-run] Not publishing the draft release` ) ;
342
334
return ;
@@ -345,6 +337,7 @@ export class GitHubTarget extends BaseTarget {
345
337
await this . github . repos . updateRelease ( {
346
338
...this . githubConfig ,
347
339
release_id : release . id ,
340
+ make_latest : isLatest ? 'true' : 'false' ,
348
341
draft : false ,
349
342
} ) ;
350
343
}
@@ -407,10 +400,40 @@ export class GitHubTarget extends BaseTarget {
407
400
} ) )
408
401
) ;
409
402
403
+ let latestRelease : { tag_name : string } | undefined = undefined ;
404
+ try {
405
+ latestRelease = (
406
+ await this . github . repos . getLatestRelease ( {
407
+ owner : this . githubConfig . owner ,
408
+ repo : this . githubConfig . repo ,
409
+ } )
410
+ ) . data ;
411
+ } catch ( error ) {
412
+ // if the error is a 404 error, it means that no release exists yet
413
+ // all other errors should be rethrown
414
+ if ( error . status !== 404 ) {
415
+ throw error ;
416
+ }
417
+ }
418
+
419
+ const latestReleaseTag = latestRelease ?. tag_name ;
420
+ this . logger . info (
421
+ latestReleaseTag
422
+ ? `Previous release: ${ latestReleaseTag } `
423
+ : 'No previous release found'
424
+ ) ;
425
+
426
+ const isPreview =
427
+ this . githubConfig . previewReleases && isPreviewRelease ( version ) ;
428
+ const isLatest = isPreview
429
+ ? false
430
+ : isLatestRelease ( latestRelease , version ) ;
431
+
410
432
const draftRelease = await this . createDraftRelease (
411
433
version ,
412
434
revision ,
413
- changelog
435
+ changelog ,
436
+ isLatest
414
437
) ;
415
438
416
439
await Promise . all (
@@ -419,7 +442,7 @@ export class GitHubTarget extends BaseTarget {
419
442
)
420
443
) ;
421
444
422
- await this . publishRelease ( draftRelease ) ;
445
+ await this . publishRelease ( draftRelease , isLatest ) ;
423
446
}
424
447
}
425
448
0 commit comments