From 2e2fae02d26f2724c6abcd5619636a439d348c5e Mon Sep 17 00:00:00 2001 From: alex-clawd Date: Thu, 2 Apr 2026 13:52:08 -0700 Subject: [PATCH] fix: add tool repository credentials to uv build in tool publish (#5223) * fix: add tool repository credentials to uv build in tool publish When running 'uv build' during tool publish, the build process now has access to tool repository credentials. This mirrors the pattern used in run_crew.py, ensuring private package indexes are properly authenticated during the build. Co-Authored-By: Claude Opus 4.5 * fix: add env kwarg to subprocess.run mock assertions in publish tests The actual code passes env= to subprocess.run but the test assertions were missing this parameter, causing assertion failures. Co-Authored-By: Claude Opus 4.5 --------- Co-authored-by: Claude Opus 4.5 --- lib/crewai/src/crewai/cli/tools/main.py | 16 ++++++++++++++++ lib/crewai/tests/cli/tools/test_main.py | 2 ++ 2 files changed, 18 insertions(+) diff --git a/lib/crewai/src/crewai/cli/tools/main.py b/lib/crewai/src/crewai/cli/tools/main.py index 72c1e6e25..67a508e64 100644 --- a/lib/crewai/src/crewai/cli/tools/main.py +++ b/lib/crewai/src/crewai/cli/tools/main.py @@ -21,6 +21,7 @@ from crewai.cli.utils import ( get_project_description, get_project_name, get_project_version, + read_toml, tree_copy, tree_find_and_replace, ) @@ -116,11 +117,26 @@ class ToolCommand(BaseCommand, PlusAPIMixin): self._print_tools_preview(tools_metadata) self._print_current_organization() + build_env = os.environ.copy() + try: + pyproject_data = read_toml() + sources = pyproject_data.get("tool", {}).get("uv", {}).get("sources", {}) + + for source_config in sources.values(): + if isinstance(source_config, dict): + index = source_config.get("index") + if index: + index_env = build_env_with_tool_repository_credentials(index) + build_env.update(index_env) + except Exception: # noqa: S110 + pass + with tempfile.TemporaryDirectory() as temp_build_dir: subprocess.run( # noqa: S603 ["uv", "build", "--sdist", "--out-dir", temp_build_dir], # noqa: S607 check=True, capture_output=False, + env=build_env, ) tarball_filename = next( diff --git a/lib/crewai/tests/cli/tools/test_main.py b/lib/crewai/tests/cli/tools/test_main.py index aba6f1075..31032a072 100644 --- a/lib/crewai/tests/cli/tools/test_main.py +++ b/lib/crewai/tests/cli/tools/test_main.py @@ -218,6 +218,7 @@ def test_publish_when_not_in_sync_and_force( ["uv", "build", "--sdist", "--out-dir", unittest.mock.ANY], check=True, capture_output=False, + env=unittest.mock.ANY, ) mock_open.assert_called_with(unittest.mock.ANY, "rb") mock_publish.assert_called_with( @@ -279,6 +280,7 @@ def test_publish_success( ["uv", "build", "--sdist", "--out-dir", unittest.mock.ANY], check=True, capture_output=False, + env=unittest.mock.ANY, ) mock_open.assert_called_with(unittest.mock.ANY, "rb") mock_publish.assert_called_with(