Skip to content

Commit 87fca20

Browse files
committed
fix(github): Fix making github releases latest or not
Also includes #567
1 parent 26d1692 commit 87fca20

File tree

1 file changed

+36
-13
lines changed

1 file changed

+36
-13
lines changed

src/targets/github.ts

+36-13
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,8 @@ export class GitHubTarget extends BaseTarget {
111111
public async createDraftRelease(
112112
version: string,
113113
revision: string,
114-
changes?: Changeset
114+
changes?: Changeset,
115+
isLatest = true
115116
): Promise<GitHubRelease> {
116117
const tag = versionToTag(version, this.githubConfig.tagPrefix);
117118
this.logger.info(`Git tag: "${tag}"`);
@@ -127,15 +128,6 @@ export class GitHubTarget extends BaseTarget {
127128
};
128129
}
129130

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-
139131
const { data } = await this.github.repos.createRelease({
140132
draft: true,
141133
name: tag,
@@ -336,7 +328,7 @@ export class GitHubTarget extends BaseTarget {
336328
*
337329
* @param release Release object
338330
*/
339-
public async publishRelease(release: GitHubRelease) {
331+
public async publishRelease(release: GitHubRelease, isLatest = true) {
340332
if (isDryRun()) {
341333
this.logger.info(`[dry-run] Not publishing the draft release`);
342334
return;
@@ -345,6 +337,7 @@ export class GitHubTarget extends BaseTarget {
345337
await this.github.repos.updateRelease({
346338
...this.githubConfig,
347339
release_id: release.id,
340+
make_latest: isLatest ? 'true' : 'false',
348341
draft: false,
349342
});
350343
}
@@ -407,10 +400,40 @@ export class GitHubTarget extends BaseTarget {
407400
}))
408401
);
409402

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+
410432
const draftRelease = await this.createDraftRelease(
411433
version,
412434
revision,
413-
changelog
435+
changelog,
436+
isLatest
414437
);
415438

416439
await Promise.all(
@@ -419,7 +442,7 @@ export class GitHubTarget extends BaseTarget {
419442
)
420443
);
421444

422-
await this.publishRelease(draftRelease);
445+
await this.publishRelease(draftRelease, isLatest);
423446
}
424447
}
425448

0 commit comments

Comments
 (0)