Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion packages/build/src/github-repo.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,24 @@ describe('GithubRepo', () => {
).to.deep.equal({ name: 'v0.0.6', sha: 'sha-1' });
});

it('returns the next lowest release if the tag does not exist yet', async() => {
githubRepo = getTestGithubRepo({
paginate: sinon.stub().resolves([
{ name: 'v0.0.6', commit: { sha: 'sha-1' } },
{ name: 'v0.0.30', commit: { sha: 'sha-2' } },
{ name: 'v0.0.30-draft.11', commit: { sha: 'sha-3' } },
{ name: 'v0.0.3-draft.11', commit: { sha: 'sha-4' } },
{ name: 'v0.0.3-draft.2', commit: { sha: 'sha-5' } },
{ name: 'v0.1.3-draft.0', commit: { sha: 'sha-6' } },
{ name: 'v0.1.3-test', commit: { sha: 'sha-7' } },
])
});

expect(
await githubRepo.getPreviousReleaseTag('0.0.7')
).to.deep.equal({ name: 'v0.0.6', sha: 'sha-1' });
});

it('returns undefined if there is no previous release', async() => {
githubRepo = getTestGithubRepo({
paginate: sinon.stub().resolves([
Expand All @@ -154,7 +172,7 @@ describe('GithubRepo', () => {
});

expect(
await githubRepo.getMostRecentDraftTagForRelease('0.0.6')
await githubRepo.getPreviousReleaseTag('0.0.6')
).to.be.undefined;
});
});
Expand Down
29 changes: 12 additions & 17 deletions packages/build/src/github-repo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,17 +71,17 @@ export class GithubRepo {
* @param releaseVersion The successor release
*/
async getPreviousReleaseTag(releaseVersion: string | undefined): Promise<Tag | undefined> {
if (!releaseVersion) {
const releaseSemver = semver.parse(releaseVersion);
if (!releaseSemver) {
return undefined;
}

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

/**
Expand Down Expand Up @@ -109,28 +109,23 @@ export class GithubRepo {
async updateDraftRelease(release: Release): Promise<void> {
const existingRelease = await this.getReleaseByTag(release.tag);
if (!existingRelease) {
const params = {
await this.octokit.repos.createRelease({
...this.repo,
tag_name: release.tag,
name: release.name,
body: release.notes,
draft: true
};

await this.octokit.repos.createRelease(params)
.catch(this._ignoreAlreadyExistsError());
}).catch(this._ignoreAlreadyExistsError());
} else if (!existingRelease.draft) {
throw new Error('Cannot update an existing release after it was published');
} else {
const params = {
await this.octokit.repos.updateRelease({
...this.repo,
release_id: existingRelease.id,
name: release.name,
body: release.notes,
draft: true
};

await this.octokit.repos.updateRelease(params);
});
}
}

Expand Down
3 changes: 3 additions & 0 deletions packages/build/src/run-draft.ts
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ export async function ensureGithubReleaseExistsAndUpdateChangelogFn(
generateChangelog: typeof generateChangelogFn = generateChangelogFn
): Promise<void> {
const previousReleaseTag = await githubRepo.getPreviousReleaseTag(releaseVersion);
console.info(`mongosh: Detected previous release tag ${previousReleaseTag?.name}`);

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})`;
if (previousReleaseTag) {
const generatedChangelog = generateChangelog(previousReleaseTag.name);
Expand All @@ -73,6 +75,7 @@ export async function ensureGithubReleaseExistsAndUpdateChangelogFn(
}
}

console.info(`mongosh: Updating release ${releaseTag}, changelog:\n${changelog}`);
await githubRepo.updateDraftRelease({
name: releaseVersion,
tag: releaseTag,
Expand Down