From 81a91394f0bac187dede4c7dffd5bc033b5603ef Mon Sep 17 00:00:00 2001 From: Chao Guo <10736839+g-chao@users.noreply.github.com> Date: Tue, 25 Jun 2024 21:38:41 -0700 Subject: [PATCH 1/5] fix: normalize workspace dependencies' version when calculating packageJsonInjectedDependenciesHash --- .../build-tests-subspace/repo-state.json | 2 +- libraries/rush-lib/src/api/Subspace.ts | 37 ++++++++++++++++++- rush.json | 2 +- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index 43d9919959f..da55ddba3fa 100644 --- a/common/config/subspaces/build-tests-subspace/repo-state.json +++ b/common/config/subspaces/build-tests-subspace/repo-state.json @@ -2,5 +2,5 @@ { "pnpmShrinkwrapHash": "c040a0d59aada7e1f9bdf0916df7079547de3a85", "preferredVersionsHash": "ce857ea0536b894ec8f346aaea08cfd85a5af648", - "packageJsonInjectedDependenciesHash": "f3a12861197ad52c4c30bdaceed213a8dfe77a23" + "packageJsonInjectedDependenciesHash": "5ae59c4febdaa2b4d21f7e19b0d7a8a5b56f4e60" } diff --git a/libraries/rush-lib/src/api/Subspace.ts b/libraries/rush-lib/src/api/Subspace.ts index e28268fb775..80e88bac0b6 100644 --- a/libraries/rush-lib/src/api/Subspace.ts +++ b/libraries/rush-lib/src/api/Subspace.ts @@ -13,7 +13,7 @@ import { CommonVersionsConfiguration } from './CommonVersionsConfiguration'; import { RepoStateFile } from '../logic/RepoStateFile'; import type { PnpmPackageManager } from './packageManager/PnpmPackageManager'; import { PnpmOptionsConfiguration } from '../logic/pnpm/PnpmOptionsConfiguration'; -import type { IPackageJson } from '@rushstack/node-core-library'; +import type { IPackageJson, IPackageJsonDependencyTable } from '@rushstack/node-core-library'; import { SubspacePnpmfileConfiguration } from '../logic/pnpm/SubspacePnpmfileConfiguration'; import type { ISubspacePnpmfileShimSettings } from '../logic/pnpm/IPnpmfile'; @@ -379,6 +379,10 @@ export class Subspace { return undefined; } + const allWorkspaceProjectSet: Set = new Set( + this._rushConfiguration.projects.map((rushProject) => rushProject.packageName) + ); + // get all related package.json while (relatedProjects.length > 0) { const rushProject: RushConfigurationProject = relatedProjects.pop()!; @@ -395,6 +399,23 @@ export class Subspace { resolutions } = rushProject.packageJson; + this._handleWorkspaceDependencyForPackageJsonInjectedDependenciesHash( + allWorkspaceProjectSet, + dependencies + ); + this._handleWorkspaceDependencyForPackageJsonInjectedDependenciesHash( + allWorkspaceProjectSet, + devDependencies + ); + this._handleWorkspaceDependencyForPackageJsonInjectedDependenciesHash( + allWorkspaceProjectSet, + optionalDependencies + ); + this._handleWorkspaceDependencyForPackageJsonInjectedDependenciesHash( + allWorkspaceProjectSet, + peerDependencies + ); + allPackageJson.push({ name, bin, @@ -421,4 +442,18 @@ export class Subspace { return packageJsonInjectedDependenciesHash; } + + /** @internal */ + private _handleWorkspaceDependencyForPackageJsonInjectedDependenciesHash( + allWorkspaceProjectSet: Set, + dependencies: IPackageJsonDependencyTable | undefined + ): void { + if (dependencies) { + for (const packageName of Object.keys(dependencies)) { + if (allWorkspaceProjectSet.has(packageName)) { + dependencies[packageName] = 'workspace:*'; + } + } + } + } } diff --git a/rush.json b/rush.json index 5d01e0a3693..95e74696044 100644 --- a/rush.json +++ b/rush.json @@ -16,7 +16,7 @@ * path segment in the "$schema" field for all your Rush config files. This will ensure * correct error-underlining and tab-completion for editors such as VS Code. */ - "rushVersion": "5.129.3", + "rushVersion": "5.129.5", /** * The next field selects which package manager should be installed and determines its version. From 5cdf0c0d2563fd29bc6202abd73e497044c94615 Mon Sep 17 00:00:00 2001 From: Chao Guo <10736839+g-chao@users.noreply.github.com> Date: Tue, 25 Jun 2024 21:40:32 -0700 Subject: [PATCH 2/5] chore: rush change --- ...eJsonInjectedDependenciesHash_2024-06-26-04-40.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 common/changes/@microsoft/rush/chao-improve-getPackageJsonInjectedDependenciesHash_2024-06-26-04-40.json diff --git a/common/changes/@microsoft/rush/chao-improve-getPackageJsonInjectedDependenciesHash_2024-06-26-04-40.json b/common/changes/@microsoft/rush/chao-improve-getPackageJsonInjectedDependenciesHash_2024-06-26-04-40.json new file mode 100644 index 00000000000..d20d8736f57 --- /dev/null +++ b/common/changes/@microsoft/rush/chao-improve-getPackageJsonInjectedDependenciesHash_2024-06-26-04-40.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/rush", + "comment": "Normalize workspace dependencies' version when calculating packageJsonInjectedDependenciesHash to improve its accuracy ", + "type": "none" + } + ], + "packageName": "@microsoft/rush" +} \ No newline at end of file From b032360edefd6cb05af1a294dc7cda8897bff724 Mon Sep 17 00:00:00 2001 From: Chao Guo <10736839+g-chao@users.noreply.github.com> Date: Wed, 26 Jun 2024 09:26:20 -0700 Subject: [PATCH 3/5] chore: comments --- libraries/rush-lib/src/api/Subspace.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libraries/rush-lib/src/api/Subspace.ts b/libraries/rush-lib/src/api/Subspace.ts index 80e88bac0b6..dd3a57e83d0 100644 --- a/libraries/rush-lib/src/api/Subspace.ts +++ b/libraries/rush-lib/src/api/Subspace.ts @@ -443,7 +443,12 @@ export class Subspace { return packageJsonInjectedDependenciesHash; } - /** @internal */ + /** @internal + * + * No need to recognize workspace dependencies' version field when calculating packageJsonInjectedDependenciesHash. + * It is because we always using the whatever latest version in the Monorepo when PNPM installs them. + * + */ private _handleWorkspaceDependencyForPackageJsonInjectedDependenciesHash( allWorkspaceProjectSet: Set, dependencies: IPackageJsonDependencyTable | undefined From 8aa41d209586fe2e62846d4d74e5cae0fef67ef3 Mon Sep 17 00:00:00 2001 From: Chao Guo <10736839+g-chao@users.noreply.github.com> Date: Wed, 26 Jun 2024 13:49:57 -0700 Subject: [PATCH 4/5] fix: only need to handle peerDependencies --- libraries/rush-lib/src/api/Subspace.ts | 46 ++++++-------------------- 1 file changed, 10 insertions(+), 36 deletions(-) diff --git a/libraries/rush-lib/src/api/Subspace.ts b/libraries/rush-lib/src/api/Subspace.ts index dd3a57e83d0..8b9248143b6 100644 --- a/libraries/rush-lib/src/api/Subspace.ts +++ b/libraries/rush-lib/src/api/Subspace.ts @@ -13,7 +13,7 @@ import { CommonVersionsConfiguration } from './CommonVersionsConfiguration'; import { RepoStateFile } from '../logic/RepoStateFile'; import type { PnpmPackageManager } from './packageManager/PnpmPackageManager'; import { PnpmOptionsConfiguration } from '../logic/pnpm/PnpmOptionsConfiguration'; -import type { IPackageJson, IPackageJsonDependencyTable } from '@rushstack/node-core-library'; +import type { IPackageJson } from '@rushstack/node-core-library'; import { SubspacePnpmfileConfiguration } from '../logic/pnpm/SubspacePnpmfileConfiguration'; import type { ISubspacePnpmfileShimSettings } from '../logic/pnpm/IPnpmfile'; @@ -399,22 +399,15 @@ export class Subspace { resolutions } = rushProject.packageJson; - this._handleWorkspaceDependencyForPackageJsonInjectedDependenciesHash( - allWorkspaceProjectSet, - dependencies - ); - this._handleWorkspaceDependencyForPackageJsonInjectedDependenciesHash( - allWorkspaceProjectSet, - devDependencies - ); - this._handleWorkspaceDependencyForPackageJsonInjectedDependenciesHash( - allWorkspaceProjectSet, - optionalDependencies - ); - this._handleWorkspaceDependencyForPackageJsonInjectedDependenciesHash( - allWorkspaceProjectSet, - peerDependencies - ); + // special handing for peerDependencies + // for workspace packages, the version range is meaningless here. + if (peerDependencies) { + for (const packageName of Object.keys(peerDependencies)) { + if (allWorkspaceProjectSet.has(packageName)) { + peerDependencies[packageName] = 'workspace:*'; + } + } + } allPackageJson.push({ name, @@ -442,23 +435,4 @@ export class Subspace { return packageJsonInjectedDependenciesHash; } - - /** @internal - * - * No need to recognize workspace dependencies' version field when calculating packageJsonInjectedDependenciesHash. - * It is because we always using the whatever latest version in the Monorepo when PNPM installs them. - * - */ - private _handleWorkspaceDependencyForPackageJsonInjectedDependenciesHash( - allWorkspaceProjectSet: Set, - dependencies: IPackageJsonDependencyTable | undefined - ): void { - if (dependencies) { - for (const packageName of Object.keys(dependencies)) { - if (allWorkspaceProjectSet.has(packageName)) { - dependencies[packageName] = 'workspace:*'; - } - } - } - } } From 034bea649f1b6bca789008e398fe86c31e40267f Mon Sep 17 00:00:00 2001 From: Chao Guo <10736839+g-chao@users.noreply.github.com> Date: Wed, 26 Jun 2024 13:51:11 -0700 Subject: [PATCH 5/5] chore: rush change --- ...getPackageJsonInjectedDependenciesHash_2024-06-26-04-40.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/changes/@microsoft/rush/chao-improve-getPackageJsonInjectedDependenciesHash_2024-06-26-04-40.json b/common/changes/@microsoft/rush/chao-improve-getPackageJsonInjectedDependenciesHash_2024-06-26-04-40.json index d20d8736f57..7e622d89389 100644 --- a/common/changes/@microsoft/rush/chao-improve-getPackageJsonInjectedDependenciesHash_2024-06-26-04-40.json +++ b/common/changes/@microsoft/rush/chao-improve-getPackageJsonInjectedDependenciesHash_2024-06-26-04-40.json @@ -2,7 +2,7 @@ "changes": [ { "packageName": "@microsoft/rush", - "comment": "Normalize workspace dependencies' version when calculating packageJsonInjectedDependenciesHash to improve its accuracy ", + "comment": "Fix an edge case for workspace peer dependencies when calculating packageJsonInjectedDependenciesHash to improve its accuracy ", "type": "none" } ],