From 32bcfdff0abcd0979cf2f29d108a8c37df957ac3 Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Sat, 30 Aug 2025 13:13:34 -0500 Subject: [PATCH] Add case for `uv auth login` in registry integration tests (#15593) Adds an alternative third-party registry test mode that uses `uv auth login` instead of the environment variables to provide configuration. --- .github/workflows/ci.yml | 28 ++++++++++++++++++++++++++-- scripts/registries-test.py | 38 +++++++++++++++++++++++++++++--------- 2 files changed, 55 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1a84c2e6f..168b96b06 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1779,8 +1779,32 @@ jobs: echo "::add-mask::$UV_TEST_GCP_TOKEN" echo "UV_TEST_GCP_TOKEN=$UV_TEST_GCP_TOKEN" >> $GITHUB_ENV - - name: "Run registry tests" - run: ./uv run -p "${PYTHON_VERSION}" scripts/registries-test.py --uv ./uv --color always --all + - name: "Run registry tests with environment variable backend" + run: ./uv run -p "${PYTHON_VERSION}" scripts/registries-test.py --uv ./uv --color always --all --auth-method env + env: + RUST_LOG: uv=debug + UV_TEST_ARTIFACTORY_TOKEN: ${{ secrets.UV_TEST_ARTIFACTORY_TOKEN }} + UV_TEST_ARTIFACTORY_URL: ${{ secrets.UV_TEST_ARTIFACTORY_URL }} + UV_TEST_ARTIFACTORY_USERNAME: ${{ secrets.UV_TEST_ARTIFACTORY_USERNAME }} + UV_TEST_AWS_URL: ${{ secrets.UV_TEST_AWS_URL }} + UV_TEST_AWS_USERNAME: aws + UV_TEST_AZURE_TOKEN: ${{ secrets.UV_TEST_AZURE_TOKEN }} + UV_TEST_AZURE_URL: ${{ secrets.UV_TEST_AZURE_URL }} + UV_TEST_AZURE_USERNAME: dummy + UV_TEST_CLOUDSMITH_TOKEN: ${{ secrets.UV_TEST_CLOUDSMITH_TOKEN }} + UV_TEST_CLOUDSMITH_URL: ${{ secrets.UV_TEST_CLOUDSMITH_URL }} + UV_TEST_CLOUDSMITH_USERNAME: ${{ secrets.UV_TEST_CLOUDSMITH_USERNAME }} + UV_TEST_GCP_URL: ${{ secrets.UV_TEST_GCP_URL }} + UV_TEST_GCP_USERNAME: oauth2accesstoken + UV_TEST_GEMFURY_TOKEN: ${{ secrets.UV_TEST_GEMFURY_TOKEN }} + UV_TEST_GEMFURY_URL: ${{ secrets.UV_TEST_GEMFURY_URL }} + UV_TEST_GEMFURY_USERNAME: ${{ secrets.UV_TEST_GEMFURY_USERNAME }} + UV_TEST_GITLAB_TOKEN: ${{ secrets.UV_TEST_GITLAB_TOKEN }} + UV_TEST_GITLAB_URL: ${{ secrets.UV_TEST_GITLAB_URL }} + UV_TEST_GITLAB_USERNAME: token + + - name: "Run registry tests with text store backend" + run: ./uv run -p "${PYTHON_VERSION}" scripts/registries-test.py --uv ./uv --color always --all --auth-method text-store env: RUST_LOG: uv=debug UV_TEST_ARTIFACTORY_TOKEN: ${{ secrets.UV_TEST_ARTIFACTORY_TOKEN }} diff --git a/scripts/registries-test.py b/scripts/registries-test.py index 2d4c1d2aa..84aaa062e 100644 --- a/scripts/registries-test.py +++ b/scripts/registries-test.py @@ -178,6 +178,7 @@ def run_test( verbosity: int, timeout: int, requires_python: str, + auth_method: str, ) -> bool: print(uv) """Attempt to install a package from this registry.""" @@ -189,19 +190,32 @@ def run_test( f"** Using default test package name: {package}. To choose a different package, set UV_TEST_{registry_name.upper()}_PKG" ) print(f"\nAttempting to install {package}") - env[f"UV_INDEX_{registry_name.upper()}_USERNAME"] = username - env[f"UV_INDEX_{registry_name.upper()}_PASSWORD"] = token + + if auth_method == "env": + env[f"UV_INDEX_{registry_name.upper()}_USERNAME"] = username + env[f"UV_INDEX_{registry_name.upper()}_PASSWORD"] = token + elif auth_method == "text-store": + # Use uv's text store for authentication + subprocess.check_call( + [ + uv, + "auth", + "login", + f"{registry_url}", + "--username", + username, + "--password", + token, + ], + env=env, + ) + else: + raise ValueError(f"Unknown authentication method: {auth_method}") with tempfile.TemporaryDirectory() as project_dir: setup_test_project(registry_name, registry_url, project_dir, requires_python) - cmd = [ - uv, - "add", - package, - "--directory", - project_dir, - ] + cmd = [uv, "add", package, "--directory", project_dir, "--no-cache"] if verbosity: cmd.extend(["-" + "v" * verbosity]) @@ -297,6 +311,11 @@ def parse_args() -> argparse.Namespace: default="3.12", help="minimum Python version for tests (default: 3.12)", ) + parser.add_argument( + "--auth-method", + choices=["env", "text-store"], + default="env", + ) parser.add_argument("--color", choices=["always", "auto", "never"], default="auto") return parser.parse_args() @@ -371,6 +390,7 @@ def main() -> None: args.verbose, args.timeout, args.required_python, + args.auth_method, ): passed.append(registry_name) else: