From c88491768bbf7db7bbac09eeec750197a3a516a3 Mon Sep 17 00:00:00 2001 From: Michael Rose Date: Mon, 22 Feb 2021 17:39:02 +0100 Subject: [PATCH] chore(build): fix releasing to barque and evergreen checks --- packages/build/src/barque.spec.ts | 7 +++---- packages/build/src/barque.ts | 7 +------ .../src/local/trigger-release-publish.spec.ts | 12 ++++++++++-- .../src/local/trigger-release-publish.ts | 19 +++++++++++++------ packages/build/src/run-publish.spec.ts | 4 +++- packages/build/src/run-publish.ts | 2 +- 6 files changed, 31 insertions(+), 20 deletions(-) diff --git a/packages/build/src/barque.spec.ts b/packages/build/src/barque.spec.ts index d8ae52827c..3479427849 100644 --- a/packages/build/src/barque.spec.ts +++ b/packages/build/src/barque.spec.ts @@ -37,7 +37,6 @@ describe('Barque', () => { appleCodesignIdentity: 'appleCodesignIdentity', isCi: true, platform: 'linux', - distributionBuildVariant: BuildVariant.Linux, repo: { owner: 'owner', repo: 'repo', @@ -60,7 +59,7 @@ describe('Barque', () => { let err; try { - await barque.releaseToBarque(tarballURL); + await barque.releaseToBarque(BuildVariant.Linux, tarballURL); } catch (error) { err = error; } @@ -80,7 +79,7 @@ describe('Barque', () => { let err; try { - await barque.releaseToBarque(tarballURL); + await barque.releaseToBarque(BuildVariant.Linux, tarballURL); } catch (error) { err = error; } @@ -103,7 +102,7 @@ describe('Barque', () => { const tarballURL = 'https://s3.amazonaws.com/mciuploads/mongosh/5ed7ee5d8683818eb28d9d3b5c65837cde4a08f5/mongosh-0.1.0-linux.tgz'; - await barque.releaseToBarque(tarballURL); + await barque.releaseToBarque(BuildVariant.Linux, tarballURL); expect(barque.createCuratorDir).to.have.been.called; expect(barque.extractLatestCurator).to.have.been.called; expect(barque.execCurator).to.not.have.been.called; diff --git a/packages/build/src/barque.ts b/packages/build/src/barque.ts index 0ad4f81e50..8207f68464 100644 --- a/packages/build/src/barque.ts +++ b/packages/build/src/barque.ts @@ -63,12 +63,7 @@ export class Barque { * * @returns {Promise} The promise. */ - async releaseToBarque(tarballURL: string): Promise { - const buildVariant = this.config.distributionBuildVariant; - if (!buildVariant) { - throw new Error('distributionBuildVariant is not set in configuration'); - } - + async releaseToBarque(buildVariant: BuildVariant, tarballURL: string): Promise { const repoConfig = path.join(this.config.rootDir, 'config', 'repo-config.yml'); const curatorDirPath = await this.createCuratorDir(); await this.extractLatestCurator(curatorDirPath); diff --git a/packages/build/src/local/trigger-release-publish.spec.ts b/packages/build/src/local/trigger-release-publish.spec.ts index 8bb54c8559..f2f8cb37ff 100644 --- a/packages/build/src/local/trigger-release-publish.spec.ts +++ b/packages/build/src/local/trigger-release-publish.spec.ts @@ -211,10 +211,11 @@ describe('local trigger-release-publish', () => { expect.fail('Expected error'); }); - it('fails if there are failed tasks', async() => { + it('fails if there are failed tasks and user cancels', async() => { getTasks.resolves([successTask, failedTask]); + const confirm = sinon.stub().resolves(false); try { - await verifyEvergreenStatusFn('sha', evergreenProvider); + await verifyEvergreenStatusFn('sha', evergreenProvider, confirm); } catch (e) { expect(e.message).to.contain('Some Evergreen tasks were not successful'); expect(getTasks).to.have.been.calledWith('mongosh', 'sha'); @@ -222,5 +223,12 @@ describe('local trigger-release-publish', () => { } expect.fail('Expected error'); }); + + it('continues if there are failed tasks but user acknowledges', async() => { + getTasks.resolves([successTask, failedTask]); + const confirm = sinon.stub().resolves(true); + await verifyEvergreenStatusFn('sha', evergreenProvider, confirm); + expect(confirm).to.have.been.called; + }); }); }); diff --git a/packages/build/src/local/trigger-release-publish.ts b/packages/build/src/local/trigger-release-publish.ts index 9a422ddd82..cd3230e72e 100644 --- a/packages/build/src/local/trigger-release-publish.ts +++ b/packages/build/src/local/trigger-release-publish.ts @@ -51,17 +51,24 @@ export async function triggerReleasePublish( export async function verifyEvergreenStatusFn( commitSha: string, - evergreenApiProvider: Promise = EvergreenApi.fromUserConfiguration() + evergreenApiProvider: Promise = EvergreenApi.fromUserConfiguration(), + confirm: typeof confirmFn = confirmFn, ): Promise { const evergreenApi = await evergreenApiProvider; const tasks = await evergreenApi.getTasks('mongosh', commitSha); const unsuccessfulTasks = tasks.filter(t => t.status !== 'success'); - if (unsuccessfulTasks.length) { - console.error('!! Detected the following failed tasks on Evergreen:'); - unsuccessfulTasks.forEach(t => { - console.error(` > ${t.display_name} on ${t.build_variant}`); - }); + if (!unsuccessfulTasks.length) { + return; + } + + console.error('!! Detected the following not successful tasks on Evergreen:'); + unsuccessfulTasks.forEach(t => { + console.error(` > ${t.display_name} on ${t.build_variant}`); + }); + + const stillContinue = await confirm('!! Do you want to continue and still release despite non-successful tasks?'); + if (!stillContinue) { console.error('!! Please trigger a new draft and ensure all tasks complete successfully.'); throw new Error('Some Evergreen tasks were not successful.'); } diff --git a/packages/build/src/run-publish.spec.ts b/packages/build/src/run-publish.spec.ts index dd4111286b..0ff6b4281f 100644 --- a/packages/build/src/run-publish.spec.ts +++ b/packages/build/src/run-publish.spec.ts @@ -56,7 +56,6 @@ describe('publish', () => { appleCodesignIdentity: 'appleCodesignIdentity', isCi: true, platform: 'platform', - distributionBuildVariant: BuildVariant.Linux, repo: { owner: 'owner', repo: 'repo', @@ -178,12 +177,15 @@ describe('publish', () => { expect(barque.releaseToBarque).to.have.been.callCount(3); expect(barque.releaseToBarque).to.have.been.calledWith( + BuildVariant.Linux, 'https://s3.amazonaws.com/mciuploads/project/v0.7.0-draft.42/mongosh-0.7.0-linux.tgz' ); expect(barque.releaseToBarque).to.have.been.calledWith( + BuildVariant.Redhat, 'https://s3.amazonaws.com/mciuploads/project/v0.7.0-draft.42/mongosh-0.7.0-x86_64.rpm' ); expect(barque.releaseToBarque).to.have.been.calledWith( + BuildVariant.Debian, 'https://s3.amazonaws.com/mciuploads/project/v0.7.0-draft.42/mongosh_0.7.0_amd64.deb' ); }); diff --git a/packages/build/src/run-publish.ts b/packages/build/src/run-publish.ts index ed08ea3b86..703d75253c 100644 --- a/packages/build/src/run-publish.ts +++ b/packages/build/src/run-publish.ts @@ -96,7 +96,7 @@ async function publishArtifactsToBarque( const tarballName = getTarballFile(variant, releaseVersion, packageName); const tarballUrl = getEvergreenArtifactUrl(project, mostRecentDraftTag, tarballName.path); console.info(`mongosh: Publishing ${variant} artifact to barque ${tarballUrl}`); - await barque.releaseToBarque(tarballUrl); + await barque.releaseToBarque(variant, tarballUrl); } console.info('mongosh: Submitting to barque complete'); }