From 3bfcb9ac3bc9ae388ab62b45da24b8e3a5b3fd9a Mon Sep 17 00:00:00 2001 From: gagik Date: Tue, 4 Feb 2025 12:01:52 +0100 Subject: [PATCH 1/3] fix(ci): commit changes from bumping packages --- packages/build/src/npm-packages/bump.ts | 14 +++++ .../build/src/npm-packages/publish.spec.ts | 44 +-------------- packages/build/src/npm-packages/publish.ts | 53 ++++++------------- packages/build/src/publish-mongosh.ts | 3 +- 4 files changed, 32 insertions(+), 82 deletions(-) diff --git a/packages/build/src/npm-packages/bump.ts b/packages/build/src/npm-packages/bump.ts index ee8644bea1..948cca8305 100644 --- a/packages/build/src/npm-packages/bump.ts +++ b/packages/build/src/npm-packages/bump.ts @@ -105,3 +105,17 @@ export function bumpAuxiliaryPackages() { }, }); } + +export function commitBumpedPackages() { + spawnSync('git', ['add', '.'], { + stdio: 'inherit', + cwd: PROJECT_ROOT, + encoding: 'utf8', + }); + + spawnSync('git', ['commit', '-m', 'chore(release): bump packages'], { + stdio: 'inherit', + cwd: PROJECT_ROOT, + encoding: 'utf8', + }); +} diff --git a/packages/build/src/npm-packages/publish.spec.ts b/packages/build/src/npm-packages/publish.spec.ts index 64b5b6f923..34c9c5984e 100644 --- a/packages/build/src/npm-packages/publish.spec.ts +++ b/packages/build/src/npm-packages/publish.spec.ts @@ -6,7 +6,6 @@ import { publishToNpm } from './publish'; describe('npm-packages publishToNpm', function () { let listNpmPackages: SinonStub; - let markBumpedFilesAsAssumeUnchanged: SinonStub; let spawnSync: SinonStub; const lernaBin = path.resolve( __dirname, @@ -21,7 +20,6 @@ describe('npm-packages publishToNpm', function () { beforeEach(function () { listNpmPackages = sinon.stub(); - markBumpedFilesAsAssumeUnchanged = sinon.stub(); spawnSync = sinon.stub(); }); @@ -32,17 +30,8 @@ describe('npm-packages publishToNpm', function () { ]; listNpmPackages.returns(packages); - publishToNpm( - { isDryRun: false, useAuxiliaryPackagesOnly: false }, - listNpmPackages, - markBumpedFilesAsAssumeUnchanged, - spawnSync - ); + publishToNpm({ isDryRun: false }, listNpmPackages); - expect(markBumpedFilesAsAssumeUnchanged).to.have.been.calledWith( - packages, - true - ); expect(spawnSync).to.have.been.calledWith( lernaBin, [ @@ -56,36 +45,5 @@ describe('npm-packages publishToNpm', function () { ], sinon.match.any ); - expect(markBumpedFilesAsAssumeUnchanged).to.have.been.calledWith( - packages, - false - ); - }); - - it('reverts the assume unchanged even on spawn failure', function () { - const packages = [{ name: 'packageA', version: '0.7.0' }]; - listNpmPackages.returns(packages); - spawnSync.throws(new Error('meeep')); - - try { - publishToNpm( - { isDryRun: false, useAuxiliaryPackagesOnly: false }, - listNpmPackages, - markBumpedFilesAsAssumeUnchanged, - spawnSync - ); - } catch (e: any) { - expect(markBumpedFilesAsAssumeUnchanged).to.have.been.calledWith( - packages, - true - ); - expect(spawnSync).to.have.been.called; - expect(markBumpedFilesAsAssumeUnchanged).to.have.been.calledWith( - packages, - false - ); - return; - } - expect.fail('Expected error'); }); }); diff --git a/packages/build/src/npm-packages/publish.ts b/packages/build/src/npm-packages/publish.ts index 586d7693f6..e2ff42a255 100644 --- a/packages/build/src/npm-packages/publish.ts +++ b/packages/build/src/npm-packages/publish.ts @@ -1,19 +1,11 @@ import path from 'path'; -import { - EXCLUDE_RELEASE_PACKAGES, - LERNA_BIN, - MONGOSH_RELEASE_PACKAGES, - PROJECT_ROOT, -} from './constants'; +import { LERNA_BIN, PROJECT_ROOT } from './constants'; import type { LernaPackageDescription } from './list'; -import { listNpmPackages as listNpmPackagesFn } from './list'; import { spawnSync as spawnSyncFn } from '../helpers/spawn-sync'; import type { SpawnSyncOptionsWithStringEncoding } from 'child_process'; export function publishToNpm( - { isDryRun = false, useAuxiliaryPackagesOnly = false }, - listNpmPackages: typeof listNpmPackagesFn = listNpmPackagesFn, - markBumpedFilesAsAssumeUnchangedFn: typeof markBumpedFilesAsAssumeUnchanged = markBumpedFilesAsAssumeUnchanged, + { isDryRun = false }, spawnSync: typeof spawnSyncFn = spawnSyncFn ): void { const commandOptions: SpawnSyncOptionsWithStringEncoding = { @@ -25,37 +17,22 @@ export function publishToNpm( ...(isDryRun ? { npm_config_dry_run: 'true' } : {}), }, }; - const allReleasablePackages = listNpmPackages().filter( - (packageConfig) => !EXCLUDE_RELEASE_PACKAGES.includes(packageConfig.name) - ); - - const packages: LernaPackageDescription[] = useAuxiliaryPackagesOnly - ? allReleasablePackages.filter( - (packageConfig) => - !MONGOSH_RELEASE_PACKAGES.includes(packageConfig.name) - ) - : allReleasablePackages; // Lerna requires a clean repository for a publish from-package // we use git update-index --assume-unchanged on files we know have been bumped - markBumpedFilesAsAssumeUnchangedFn(packages, true); - try { - spawnSync( - LERNA_BIN, - [ - 'publish', - 'from-package', - '--no-private', - '--no-changelog', - '--exact', - '--yes', - '--no-verify-access', - ], - commandOptions - ); - } finally { - markBumpedFilesAsAssumeUnchangedFn(packages, false); - } + spawnSync( + LERNA_BIN, + [ + 'publish', + 'from-package', + '--no-private', + '--no-changelog', + '--exact', + '--yes', + '--no-verify-access', + ], + commandOptions + ); } export function markBumpedFilesAsAssumeUnchanged( diff --git a/packages/build/src/publish-mongosh.ts b/packages/build/src/publish-mongosh.ts index ded7d901b3..ebf76b8dfd 100644 --- a/packages/build/src/publish-mongosh.ts +++ b/packages/build/src/publish-mongosh.ts @@ -18,6 +18,7 @@ import { bumpMongoshReleasePackages as bumpMongoshReleasePackagesFn, bumpAuxiliaryPackages as bumpAuxiliaryPackagesFn, } from './npm-packages'; +import { commitBumpedPackages } from './npm-packages/bump'; export async function publishMongosh( config: Config, @@ -67,6 +68,7 @@ export async function publishMongosh( bumpAuxiliaryPackages(); await bumpMongoshReleasePackages(releaseVersion); + commitBumpedPackages(); await publishArtifactsToBarque( barque, @@ -94,7 +96,6 @@ export async function publishMongosh( publishToNpm({ isDryRun: config.isDryRun, - useAuxiliaryPackagesOnly: config.useAuxiliaryPackagesOnly, }); await publishToHomebrew( From 163ef84979782f8821b3287066bbb1522d2e1870 Mon Sep 17 00:00:00 2001 From: gagik Date: Tue, 4 Feb 2025 12:29:38 +0100 Subject: [PATCH 2/3] fix(ci): commit changes from bumping packages --- packages/build/src/npm-packages/bump.ts | 5 ++- packages/build/src/publish-auxiliary.ts | 2 +- packages/build/src/publish-mongosh.spec.ts | 38 +++++++++++++++------- packages/build/src/publish-mongosh.ts | 15 +++++---- 4 files changed, 39 insertions(+), 21 deletions(-) diff --git a/packages/build/src/npm-packages/bump.ts b/packages/build/src/npm-packages/bump.ts index 948cca8305..5810855de5 100644 --- a/packages/build/src/npm-packages/bump.ts +++ b/packages/build/src/npm-packages/bump.ts @@ -7,6 +7,7 @@ import { import { promises as fs } from 'fs'; import path from 'path'; +import { spawnSync as spawnSyncFn } from '../helpers'; import { getPackagesInTopologicalOrder } from '@mongodb-js/monorepo-tools'; /** Bumps only the main mongosh release packages to the set version. */ @@ -106,7 +107,9 @@ export function bumpAuxiliaryPackages() { }); } -export function commitBumpedPackages() { +export function commitBumpedPackages( + spawnSync: typeof spawnSyncFn = spawnSyncFn +) { spawnSync('git', ['add', '.'], { stdio: 'inherit', cwd: PROJECT_ROOT, diff --git a/packages/build/src/publish-auxiliary.ts b/packages/build/src/publish-auxiliary.ts index d994d84972..8be5a20fb2 100644 --- a/packages/build/src/publish-auxiliary.ts +++ b/packages/build/src/publish-auxiliary.ts @@ -7,9 +7,9 @@ export function publishAuxiliaryPackages(config: Config) { 'This should only be used when publishing auxiliary packages' ); } - publishToNpm(config); pushTags({ useAuxiliaryPackagesOnly: true, isDryRun: config.isDryRun || false, }); + publishToNpm(config); } diff --git a/packages/build/src/publish-mongosh.spec.ts b/packages/build/src/publish-mongosh.spec.ts index bdf8ae80a7..d1014b21cf 100644 --- a/packages/build/src/publish-mongosh.spec.ts +++ b/packages/build/src/publish-mongosh.spec.ts @@ -49,6 +49,7 @@ describe('publishMongosh', function () { let barque: Barque; let pushTags: typeof pushTagsType; const getEvergreenArtifactUrl = getArtifactUrl; + let spawnSync: sinon.SinonStub; beforeEach(function () { config = { ...dummyConfig }; @@ -61,6 +62,7 @@ describe('publishMongosh', function () { pushTags = sinon.spy(); bumpMongoshReleasePackages = sinon.spy(); bumpAuxiliaryPackages = sinon.spy(); + spawnSync = sinon.stub().resolves(); githubRepo = createStubRepo(); mongoHomebrewCoreForkRepo = createStubRepo(); @@ -108,7 +110,8 @@ describe('publishMongosh', function () { shouldDoPublicRelease, getEvergreenArtifactUrl, bumpMongoshReleasePackages, - bumpAuxiliaryPackages + bumpAuxiliaryPackages, + spawnSync ); } catch (e: any) { return expect(e.message).to.contain('Could not find prior draft tag'); @@ -137,7 +140,8 @@ describe('publishMongosh', function () { shouldDoPublicRelease, getEvergreenArtifactUrl, bumpMongoshReleasePackages, - bumpAuxiliaryPackages + bumpAuxiliaryPackages, + spawnSync ); } catch (e: any) { return expect(e.message).to.contain('Version mismatch'); @@ -161,7 +165,8 @@ describe('publishMongosh', function () { shouldDoPublicRelease, getEvergreenArtifactUrl, bumpMongoshReleasePackages, - bumpAuxiliaryPackages + bumpAuxiliaryPackages, + spawnSync ); expect(barque.releaseToBarque).to.have.been.callCount(26); @@ -195,7 +200,8 @@ describe('publishMongosh', function () { shouldDoPublicRelease, getEvergreenArtifactUrl, bumpMongoshReleasePackages, - bumpAuxiliaryPackages + bumpAuxiliaryPackages, + spawnSync ); expect(createAndPublishDownloadCenterConfig).to.have.been.calledWith( @@ -221,7 +227,8 @@ describe('publishMongosh', function () { shouldDoPublicRelease, getEvergreenArtifactUrl, bumpMongoshReleasePackages, - bumpAuxiliaryPackages + bumpAuxiliaryPackages, + spawnSync ); expect(githubRepo.promoteRelease).to.have.been.calledWith(config); @@ -242,7 +249,8 @@ describe('publishMongosh', function () { shouldDoPublicRelease, getEvergreenArtifactUrl, bumpMongoshReleasePackages, - bumpAuxiliaryPackages + bumpAuxiliaryPackages, + spawnSync ); expect(writeBuildInfo).to.have.been.calledOnceWith(config); @@ -264,7 +272,8 @@ describe('publishMongosh', function () { shouldDoPublicRelease, getEvergreenArtifactUrl, bumpMongoshReleasePackages, - bumpAuxiliaryPackages + bumpAuxiliaryPackages, + spawnSync ); expect(publishToHomebrew).to.have.been.calledWith( @@ -298,7 +307,8 @@ describe('publishMongosh', function () { shouldDoPublicRelease, getEvergreenArtifactUrl, bumpMongoshReleasePackages, - bumpAuxiliaryPackages + bumpAuxiliaryPackages, + spawnSync ); expect(createAndPublishDownloadCenterConfig).not.to.have.been.called; @@ -319,7 +329,8 @@ describe('publishMongosh', function () { shouldDoPublicRelease, getEvergreenArtifactUrl, bumpMongoshReleasePackages, - bumpAuxiliaryPackages + bumpAuxiliaryPackages, + spawnSync ); expect(githubRepo.promoteRelease).not.to.have.been.called; @@ -340,7 +351,8 @@ describe('publishMongosh', function () { shouldDoPublicRelease, getEvergreenArtifactUrl, bumpMongoshReleasePackages, - bumpAuxiliaryPackages + bumpAuxiliaryPackages, + spawnSync ); expect(publishToNpm).not.to.have.been.called; @@ -361,7 +373,8 @@ describe('publishMongosh', function () { shouldDoPublicRelease, getEvergreenArtifactUrl, bumpMongoshReleasePackages, - bumpAuxiliaryPackages + bumpAuxiliaryPackages, + spawnSync ); expect(publishToHomebrew).not.to.have.been.called; @@ -382,7 +395,8 @@ describe('publishMongosh', function () { shouldDoPublicRelease, getEvergreenArtifactUrl, bumpMongoshReleasePackages, - bumpAuxiliaryPackages + bumpAuxiliaryPackages, + spawnSync ); expect(barque.releaseToBarque).not.to.have.been.called; diff --git a/packages/build/src/publish-mongosh.ts b/packages/build/src/publish-mongosh.ts index ebf76b8dfd..f1cae0a556 100644 --- a/packages/build/src/publish-mongosh.ts +++ b/packages/build/src/publish-mongosh.ts @@ -19,6 +19,7 @@ import { bumpAuxiliaryPackages as bumpAuxiliaryPackagesFn, } from './npm-packages'; import { commitBumpedPackages } from './npm-packages/bump'; +import { spawnSync as spawnSyncFn } from './helpers'; export async function publishMongosh( config: Config, @@ -34,7 +35,8 @@ export async function publishMongosh( shouldDoPublicRelease: typeof shouldDoPublicReleaseFn = shouldDoPublicReleaseFn, getEvergreenArtifactUrl: typeof getArtifactUrlFn = getArtifactUrlFn, bumpMongoshReleasePackages: typeof bumpMongoshReleasePackagesFn = bumpMongoshReleasePackagesFn, - bumpAuxiliaryPackages: typeof bumpAuxiliaryPackagesFn = bumpAuxiliaryPackagesFn + bumpAuxiliaryPackages: typeof bumpAuxiliaryPackagesFn = bumpAuxiliaryPackagesFn, + spawnSync: typeof spawnSyncFn = spawnSyncFn ): Promise { if (!shouldDoPublicRelease(config)) { console.warn( @@ -68,7 +70,11 @@ export async function publishMongosh( bumpAuxiliaryPackages(); await bumpMongoshReleasePackages(releaseVersion); - commitBumpedPackages(); + commitBumpedPackages(spawnSync); + pushTags({ + useAuxiliaryPackagesOnly: false, + isDryRun: config.isDryRun || false, + }); await publishArtifactsToBarque( barque, @@ -106,11 +112,6 @@ export async function publishMongosh( !!config.isDryRun ); - pushTags({ - useAuxiliaryPackagesOnly: false, - isDryRun: config.isDryRun || false, - }); - console.info('mongosh: finished release process.'); } From abe8252b79fdd3794274206e078ab3ac652a1317 Mon Sep 17 00:00:00 2001 From: gagik Date: Tue, 4 Feb 2025 12:37:23 +0100 Subject: [PATCH 3/3] fix: use git push --tags --- packages/build/src/npm-packages/push-tags.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/build/src/npm-packages/push-tags.ts b/packages/build/src/npm-packages/push-tags.ts index 217f504f9d..1a20a05157 100644 --- a/packages/build/src/npm-packages/push-tags.ts +++ b/packages/build/src/npm-packages/push-tags.ts @@ -72,7 +72,7 @@ export function pushTags( } if (!isDryRun) { - spawnSync('git', ['push', '--follow-tags'], commandOptions); + spawnSync('git', ['push', '--tags'], commandOptions); } }