Skip to content

chore(project): migrate experimenter and integration tests from Poetry to uv #16255

Description

@jaredlockhart

Problem

The experimenter app and its integration-tests project manage Python dependencies with Poetry. We are standardizing the repo's Python projects on uv, which is now the best supported way to manage Python dependencies (faster installs, native Dependabot support). This completes the migration started with cirrus (#16174) and schemas (#16201).

Change

Both projects (/experimenter and /experimenter/tests):

  • Convert pyproject.toml from [tool.poetry] to PEP 621 [project] + [tool.uv] package = false.
  • Replace poetry.lock with uv.lock.
  • Install dependencies via uv in the Dockerfiles (venv copied across build stages).
  • Switch the Dependabot entries from pip to uv.

To avoid sneaking dependency upgrades into the migration, both uv.locks are frozen to the exact versions from the pre-migration poetry.lock via a [tool.uv] constraint-dependencies block (0 version drift; the block is commented as a migration freeze to drop in a follow-up for controlled upgrades).

Integration-test plumbing (nimbus_integration_tests.sh, nimbus_rust_tests.sh, the Makefile fenix/ios enrollment targets, and the ios/fenix workflows) is switched from poetry -C ... install/run to uv sync/uv run, and pipx install poetry to astral-sh/setup-uv.

Two ruff adjustments follow from PEP 621 declaring the accurate requires-python (py311), not version bumps: import tomllib moves to the stdlib group in two files, and UP042 is added to the ruff ignore list (matching the existing UP006/UP007/UP045 ignores) rather than forcing a StrEnum rewrite.

Acceptance criteria

  • make check passes (lint + full pytest suite).
  • The experimenter image builds and runs via uv.
  • Integration/enrollment suites (Selenium, ios, fenix) pass in CI.
  • Dependabot tracks both uv.locks via the uv ecosystem.

┆Issue is synchronized with this Jira Task

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions