From f161f350d5390dc96c90f2b603ebbc92d08ae147 Mon Sep 17 00:00:00 2001 From: Sven Date: Mon, 25 Nov 2024 11:11:13 +0100 Subject: [PATCH] Use specific versions for all package managers except yarn --- .../pants/backend/javascript/package_manager.py | 3 +++ .../backend/javascript/subsystems/nodejs_tool.py | 6 +++++- .../javascript/subsystems/nodejs_tool_test.py | 14 +++++++++----- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/python/pants/backend/javascript/package_manager.py b/src/python/pants/backend/javascript/package_manager.py index cae04338faf..2d0c12a00bf 100644 --- a/src/python/pants/backend/javascript/package_manager.py +++ b/src/python/pants/backend/javascript/package_manager.py @@ -97,3 +97,6 @@ def npm(cls, version: str | None) -> PackageManager: pack_archive_format="{}-{}.tgz", extra_caches=FrozenDict(), ) + + def spec(self) -> str: + return self.name if self.version is None else f"{self.name}@{self.version}" diff --git a/src/python/pants/backend/javascript/subsystems/nodejs_tool.py b/src/python/pants/backend/javascript/subsystems/nodejs_tool.py index 2f0fbeed07b..9b691af47c4 100644 --- a/src/python/pants/backend/javascript/subsystems/nodejs_tool.py +++ b/src/python/pants/backend/javascript/subsystems/nodejs_tool.py @@ -119,6 +119,10 @@ async def _run_tool_without_resolve(request: NodeJSToolRequest) -> Process: ) ) pkg_manager = PackageManager.from_string(pkg_manager_and_version) + if pkg_manager.name == PackageManager.yarn.__name__: + cmd = pkg_manager.name + else: + cmd = pkg_manager.spec() return await Get( Process, @@ -126,7 +130,7 @@ async def _run_tool_without_resolve(request: NodeJSToolRequest) -> Process: env.binaries.binary_dir + "/corepack", pkg_manager.version, args=( - pkg_manager.name, + cmd, *pkg_manager.download_and_execute_args, request.tool, *request.args, diff --git a/src/python/pants/backend/javascript/subsystems/nodejs_tool_test.py b/src/python/pants/backend/javascript/subsystems/nodejs_tool_test.py index bd88491c2e2..4f38e1f6bbd 100644 --- a/src/python/pants/backend/javascript/subsystems/nodejs_tool_test.py +++ b/src/python/pants/backend/javascript/subsystems/nodejs_tool_test.py @@ -52,8 +52,8 @@ def test_version_option_overrides_default(rule_runner: RuleRunner): "package_manager, expected_argv", [ pytest.param("yarn", ("yarn", "dlx", "--quiet"), id="yarn"), - pytest.param("npm", ("npm", "exec", "--yes", "--"), id="npm"), - pytest.param("pnpm", ("pnpm", "dlx"), id="pnpm"), + pytest.param("npm", ("npm@10.8.2", "exec", "--yes", "--"), id="npm"), + pytest.param("pnpm", ("pnpm@9.5.0", "dlx"), id="pnpm"), ], ) def test_execute_process_with_package_manager( @@ -91,8 +91,8 @@ def test_execute_process_with_package_manager( "package_manager, version", [ pytest.param("yarn", "1.22.22", id="yarn"), - pytest.param("npm", "10.9.0", id="npm"), - pytest.param("pnpm", "9.12.3", id="pnpm"), + pytest.param("npm", "10.8.2", id="npm"), + pytest.param("pnpm", "9.5.0", id="pnpm"), ], ) def test_execute_process_with_package_manager_version_from_configuration( @@ -199,8 +199,12 @@ def request_package_manager_version_for_tool( ) -> str: request = tool.request((), EMPTY_DIGEST, "Inspect package manager version", LogLevel.DEBUG) process = rule_runner.request(Process, [request]) + if process.argv[0].find("corepack") != -1: + args = process.argv[:2] + ("--version",) + else: + args = (package_manager, "--version") result = rule_runner.request( ProcessResult, - [dataclasses.replace(process, argv=(package_manager, "--version"))], + [dataclasses.replace(process, argv=args)], ) return result.stdout.decode().strip()