From d2c075b372d0eaece29c6bfbb0805cd5fc96d6b0 Mon Sep 17 00:00:00 2001 From: Xu Gao Date: Wed, 21 Oct 2020 11:24:47 -0700 Subject: [PATCH] For out-of-scope package, do not update its dependencies versions along with its own version (#428) * scope bump * Change files --- bin/beachball.js | 0 change/beachball-2020-10-21-10-49-12-bump-scoped-pkg.json | 8 ++++++++ src/__e2e__/bump.test.ts | 4 ++-- src/bump/bumpInPlace.ts | 4 ++-- src/bump/setDependentVersions.ts | 6 +++++- src/commands/canary.ts | 2 +- src/commands/sync.ts | 2 +- 7 files changed, 19 insertions(+), 7 deletions(-) mode change 100644 => 100755 bin/beachball.js create mode 100644 change/beachball-2020-10-21-10-49-12-bump-scoped-pkg.json diff --git a/bin/beachball.js b/bin/beachball.js old mode 100644 new mode 100755 diff --git a/change/beachball-2020-10-21-10-49-12-bump-scoped-pkg.json b/change/beachball-2020-10-21-10-49-12-bump-scoped-pkg.json new file mode 100644 index 000000000..84498f186 --- /dev/null +++ b/change/beachball-2020-10-21-10-49-12-bump-scoped-pkg.json @@ -0,0 +1,8 @@ +{ + "type": "minor", + "comment": "For out-of-scope package, do not update its dependencies versions along with its own version.", + "packageName": "beachball", + "email": "xgao@microsoft.com", + "dependentChangeType": "patch", + "date": "2020-10-21T17:49:12.375Z" +} diff --git a/src/__e2e__/bump.test.ts b/src/__e2e__/bump.test.ts index 3e8212ae7..9fc45a044 100644 --- a/src/__e2e__/bump.test.ts +++ b/src/__e2e__/bump.test.ts @@ -478,7 +478,7 @@ describe('version bumping', () => { expect(changeFiles.length).toBe(1); }); - it('should not bump out-of-scope package even if dependency of the package has change', async () => { + it('should not bump out-of-scope package and its dependencies even if dependency of the package has change', async () => { repositoryFactory = new MonoRepoFactory(); await repositoryFactory.create(); const repo = await repositoryFactory.cloneRepository(); @@ -504,7 +504,7 @@ describe('version bumping', () => { const packageInfos = getPackageInfos(repo.rootPath); expect(packageInfos['foo'].version).toBe('1.0.0'); expect(packageInfos['bar'].version).toBe('1.3.5'); - expect(packageInfos['foo'].dependencies?.bar).toBe('^1.3.5'); + expect(packageInfos['foo'].dependencies?.bar).toBe('^1.3.4'); const changeFiles = getChangeFiles(repo.rootPath); expect(changeFiles.length).toBe(0); diff --git a/src/bump/bumpInPlace.ts b/src/bump/bumpInPlace.ts index 351a75466..edf4ff3dd 100644 --- a/src/bump/bumpInPlace.ts +++ b/src/bump/bumpInPlace.ts @@ -13,7 +13,7 @@ import { setDependentVersions } from './setDependentVersions'; */ export function bumpInPlace(bumpInfo: BumpInfo, options: BeachballOptions) { const { bumpDeps } = options; - const { packageInfos, packageChangeTypes, modifiedPackages } = bumpInfo; + const { packageInfos, scopedPackages, packageChangeTypes, modifiedPackages } = bumpInfo; const changes = { ...packageChangeTypes }; // pass 1: figure out all the change types for all the packages taking into account the bumpDeps option and version groups if (bumpDeps) { @@ -32,7 +32,7 @@ export function bumpInPlace(bumpInfo: BumpInfo, options: BeachballOptions) { }); // pass 3: Bump all the dependencies packages - const dependentModifiedPackages = setDependentVersions(packageInfos); + const dependentModifiedPackages = setDependentVersions(packageInfos, scopedPackages); dependentModifiedPackages.forEach(pkg => modifiedPackages.add(pkg)); return bumpInfo; diff --git a/src/bump/setDependentVersions.ts b/src/bump/setDependentVersions.ts index 27eebd137..685d637d7 100644 --- a/src/bump/setDependentVersions.ts +++ b/src/bump/setDependentVersions.ts @@ -1,9 +1,13 @@ import { PackageInfos, PackageDeps } from '../types/PackageInfo'; import { bumpMinSemverRange } from './bumpMinSemverRange'; -export function setDependentVersions(packageInfos: PackageInfos) { +export function setDependentVersions(packageInfos: PackageInfos, scopedPackages: Set) { const modifiedPackages = new Set(); Object.keys(packageInfos).forEach(pkgName => { + if (!scopedPackages.has(pkgName)) { + return; + } + const info = packageInfos[pkgName]; ['dependencies', 'devDependencies', 'peerDependencies'].forEach(depKind => { const deps: PackageDeps | undefined = (info as any)[depKind]; diff --git a/src/commands/canary.ts b/src/commands/canary.ts index 488c2b1ff..f3cb996b0 100644 --- a/src/commands/canary.ts +++ b/src/commands/canary.ts @@ -27,7 +27,7 @@ export async function canary(options: BeachballOptions) { bumpInfo.packageInfos[pkg].version = newVersion; } - setDependentVersions(bumpInfo.packageInfos); + setDependentVersions(bumpInfo.packageInfos, bumpInfo.scopedPackages); await performBump(bumpInfo, options); diff --git a/src/commands/sync.ts b/src/commands/sync.ts index 1dec30110..bd6aa365c 100644 --- a/src/commands/sync.ts +++ b/src/commands/sync.ts @@ -34,7 +34,7 @@ export async function sync(options: BeachballOptions) { } } - const dependentModifiedPackages = setDependentVersions(packageInfos); + const dependentModifiedPackages = setDependentVersions(packageInfos, scopedPackages); dependentModifiedPackages.forEach(pkg => modifiedPackages.add(pkg)); writePackageJson(modifiedPackages, packageInfos);