diff --git a/packages/js/src/generators/release-version/release-version.spec.ts b/packages/js/src/generators/release-version/release-version.spec.ts index c70f8d4713a3d..1efacc018b4ec 100644 --- a/packages/js/src/generators/release-version/release-version.spec.ts +++ b/packages/js/src/generators/release-version/release-version.spec.ts @@ -419,6 +419,98 @@ To fix this you will either need to add a package.json file at that location, or `); }); + it(`should not update dependents when they are using version "*"`, async () => { + projectGraph = createWorkspaceWithPackageDependencies(tree, { + 'my-lib': { + projectRoot: 'libs/my-lib', + packageName: 'my-lib', + version: '0.0.1', + packageJsonPath: 'libs/my-lib/package.json', + localDependencies: [], + }, + 'project-with-dependency-on-my-pkg': { + projectRoot: 'libs/project-with-dependency-on-my-pkg', + packageName: 'project-with-dependency-on-my-pkg', + version: '0.0.1', + packageJsonPath: + 'libs/project-with-dependency-on-my-pkg/package.json', + localDependencies: [ + { + projectName: 'my-lib', + dependencyCollection: 'dependencies', + version: '*', + }, + ], + }, + 'project-with-devDependency-on-my-pkg': { + projectRoot: 'libs/project-with-devDependency-on-my-pkg', + packageName: 'project-with-devDependency-on-my-pkg', + version: '0.0.1', + packageJsonPath: + 'libs/project-with-devDependency-on-my-pkg/package.json', + localDependencies: [ + { + projectName: 'my-lib', + dependencyCollection: 'devDependencies', + version: '*', + }, + ], + }, + }); + + expect(readJson(tree, 'libs/my-lib/package.json').version).toEqual( + '0.0.1' + ); + expect( + readJson(tree, 'libs/project-with-dependency-on-my-pkg/package.json') + .version + ).toEqual('0.0.1'); + + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: '4.5.6', // user CLI specifier override set, no prompting should occur + currentVersionResolver: 'disk', + specifierSource: 'prompt', + releaseGroup: createReleaseGroup('independent'), + }); + + expect(readJson(tree, 'libs/my-lib/package.json')) + .toMatchInlineSnapshot(` + { + "name": "my-lib", + "version": "4.5.6", + } + `); + + expect( + readJson(tree, 'libs/project-with-dependency-on-my-pkg/package.json') + ).toMatchInlineSnapshot(` + { + "dependencies": { + "my-lib": "*", + }, + "name": "project-with-dependency-on-my-pkg", + "version": "4.5.6", + } + `); + + expect( + readJson( + tree, + 'libs/project-with-devDependency-on-my-pkg/package.json' + ) + ).toMatchInlineSnapshot(` + { + "devDependencies": { + "my-lib": "*", + }, + "name": "project-with-devDependency-on-my-pkg", + "version": "4.5.6", + } + `); + }); + it(`should update dependents even when filtering to a subset of projects which do not include those dependents`, async () => { expect(readJson(tree, 'libs/my-lib/package.json').version).toEqual( '0.0.1' diff --git a/packages/js/src/generators/release-version/release-version.ts b/packages/js/src/generators/release-version/release-version.ts index 86594f25d25b7..8b585c7d462ca 100644 --- a/packages/js/src/generators/release-version/release-version.ts +++ b/packages/js/src/generators/release-version/release-version.ts @@ -372,6 +372,12 @@ To fix this you will either need to add a package.json file at that location, or 'package.json' ), (json) => { + // Do not update "*" as it already matches all possible versions including the new one + if ( + json[dependentProject.dependencyCollection][packageName] === '*' + ) { + return json; + } json[dependentProject.dependencyCollection][packageName] = newVersion; return json;