Skip to content

Commit cd51702

Browse files
authored
chore(build): fixes detection of GitHub release based on tags (#690)
1 parent 86165c2 commit cd51702

File tree

3 files changed

+34
-18
lines changed

3 files changed

+34
-18
lines changed

packages/build/src/github-repo.spec.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,24 @@ describe('GithubRepo', () => {
140140
).to.deep.equal({ name: 'v0.0.6', sha: 'sha-1' });
141141
});
142142

143+
it('returns the next lowest release if the tag does not exist yet', async() => {
144+
githubRepo = getTestGithubRepo({
145+
paginate: sinon.stub().resolves([
146+
{ name: 'v0.0.6', commit: { sha: 'sha-1' } },
147+
{ name: 'v0.0.30', commit: { sha: 'sha-2' } },
148+
{ name: 'v0.0.30-draft.11', commit: { sha: 'sha-3' } },
149+
{ name: 'v0.0.3-draft.11', commit: { sha: 'sha-4' } },
150+
{ name: 'v0.0.3-draft.2', commit: { sha: 'sha-5' } },
151+
{ name: 'v0.1.3-draft.0', commit: { sha: 'sha-6' } },
152+
{ name: 'v0.1.3-test', commit: { sha: 'sha-7' } },
153+
])
154+
});
155+
156+
expect(
157+
await githubRepo.getPreviousReleaseTag('0.0.7')
158+
).to.deep.equal({ name: 'v0.0.6', sha: 'sha-1' });
159+
});
160+
143161
it('returns undefined if there is no previous release', async() => {
144162
githubRepo = getTestGithubRepo({
145163
paginate: sinon.stub().resolves([
@@ -154,7 +172,7 @@ describe('GithubRepo', () => {
154172
});
155173

156174
expect(
157-
await githubRepo.getMostRecentDraftTagForRelease('0.0.6')
175+
await githubRepo.getPreviousReleaseTag('0.0.6')
158176
).to.be.undefined;
159177
});
160178
});

packages/build/src/github-repo.ts

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -71,17 +71,17 @@ export class GithubRepo {
7171
* @param releaseVersion The successor release
7272
*/
7373
async getPreviousReleaseTag(releaseVersion: string | undefined): Promise<Tag | undefined> {
74-
if (!releaseVersion) {
74+
const releaseSemver = semver.parse(releaseVersion);
75+
if (!releaseSemver) {
7576
return undefined;
7677
}
7778

78-
const releaseTags = (await this.getTagsOrdered()).filter(t => t.name.match(/^v\d+\.\d+\.\d+$/));
79-
for (let i = 0; i < releaseTags.length - 1; i++) {
80-
if (releaseTags[i].name === `v${releaseVersion}`) {
81-
return releaseTags[i + 1];
82-
}
83-
}
84-
return undefined;
79+
return (await this.getTagsOrdered())
80+
.filter(t => t.name.match(/^v\d+\.\d+\.\d+$/))
81+
.find(t => {
82+
const tagSemver = semver.parse(t.name);
83+
return tagSemver && tagSemver.compare(releaseSemver) < 0;
84+
});
8585
}
8686

8787
/**
@@ -109,28 +109,23 @@ export class GithubRepo {
109109
async updateDraftRelease(release: Release): Promise<void> {
110110
const existingRelease = await this.getReleaseByTag(release.tag);
111111
if (!existingRelease) {
112-
const params = {
112+
await this.octokit.repos.createRelease({
113113
...this.repo,
114114
tag_name: release.tag,
115115
name: release.name,
116116
body: release.notes,
117117
draft: true
118-
};
119-
120-
await this.octokit.repos.createRelease(params)
121-
.catch(this._ignoreAlreadyExistsError());
118+
}).catch(this._ignoreAlreadyExistsError());
122119
} else if (!existingRelease.draft) {
123120
throw new Error('Cannot update an existing release after it was published');
124121
} else {
125-
const params = {
122+
await this.octokit.repos.updateRelease({
126123
...this.repo,
127124
release_id: existingRelease.id,
128125
name: release.name,
129126
body: release.notes,
130127
draft: true
131-
};
132-
133-
await this.octokit.repos.updateRelease(params);
128+
});
134129
}
135130
}
136131

packages/build/src/run-draft.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ export async function ensureGithubReleaseExistsAndUpdateChangelogFn(
6565
generateChangelog: typeof generateChangelogFn = generateChangelogFn
6666
): Promise<void> {
6767
const previousReleaseTag = await githubRepo.getPreviousReleaseTag(releaseVersion);
68+
console.info(`mongosh: Detected previous release tag ${previousReleaseTag?.name}`);
69+
6870
let changelog = `See an overview of all solved issues [in Jira](https://jira.mongodb.org/issues/?jql=project%20%3D%20MONGOSH%20AND%20fixVersion%20%3D%20${releaseVersion})`;
6971
if (previousReleaseTag) {
7072
const generatedChangelog = generateChangelog(previousReleaseTag.name);
@@ -73,6 +75,7 @@ export async function ensureGithubReleaseExistsAndUpdateChangelogFn(
7375
}
7476
}
7577

78+
console.info(`mongosh: Updating release ${releaseTag}, changelog:\n${changelog}`);
7679
await githubRepo.updateDraftRelease({
7780
name: releaseVersion,
7881
tag: releaseTag,

0 commit comments

Comments
 (0)