Add new uv-keyring crate that vendors the keyring-rs crate (#14725)

This PR is a first step toward support for storing credentials in the
system keyring. The `keyring-rs` crate is the best option for system
keyring integration, but the latest version (v4) requires either that
Linux users have `libdbus` installed or that it is built with `libdbus`
vendored in. This is because v4 depends on
[dbus-secret-service](https://github.com/open-source-cooperative/dbus-secret-service),
which was created as an alternative to
[secret-service](https://github.com/open-source-cooperative/secret-service-rs)
so that users are not required to use an async runtime. Since uv does
use an async runtime, this is not a good tradeoff for uv.

This PR:
* Vendors `keyring-rs` crate into a new `uv-keyring` workspace crate
* Moves to the async `secret-service` crate that does not require
clients on Linux to have `libdbus` on their machines. This includes
updating `CredentialsAPI` trait (and implementations) to use async
methods.
* Adds `uv-keyring` tests to `cargo test` jobs. For `cargo test |
ubuntu`, this meant setting up secret service and priming gnome-keyring
as an earlier step.
* Removes iOS code paths
* Patches in @oconnor663 's changes from his [`keyring-rs`
PR](https://github.com/open-source-cooperative/keyring-rs/pull/261)
* Applies many clippy-driven updates
This commit is contained in:
John Mumm
2025-08-15 15:57:56 +02:00
committed by GitHub
parent 77fe8d2e60
commit 880eb286e8
15 changed files with 4474 additions and 11 deletions
+14 -3
View File
@@ -232,6 +232,17 @@ jobs:
- name: "Install required Python versions"
run: uv python install
- name: "Install secret service"
run: |
sudo apt update -y
sudo apt install -y gnome-keyring
- name: "Start gnome-keyring"
# run gnome-keyring with 'foobar' as password for the login keyring
# this will create a new login keyring and unlock it
# the login password doesn't matter, but the keyring must be unlocked for the tests to work
run: gnome-keyring-daemon --components=secrets --daemonize --unlock <<< 'foobar'
- name: "Install cargo nextest"
uses: taiki-e/install-action@a416ddeedbd372e614cc1386e8b642692f66865e # v2.57.1
with:
@@ -243,7 +254,7 @@ jobs:
UV_HTTP_RETRIES: 5
run: |
cargo nextest run \
--features python-patch \
--features python-patch,keyring-tests,secret-service \
--workspace \
--status-level skip --failure-output immediate-final --no-fail-fast -j 20 --final-status-level slow
@@ -282,7 +293,7 @@ jobs:
run: |
cargo nextest run \
--no-default-features \
--features python,python-managed,pypi,git,performance,crates-io \
--features python,python-managed,pypi,git,performance,crates-io,keyring-tests,apple-native \
--workspace \
--status-level skip --failure-output immediate-final --no-fail-fast -j 12 --final-status-level slow
@@ -334,7 +345,7 @@ jobs:
run: |
cargo nextest run \
--no-default-features \
--features python,pypi,python-managed \
--features python,pypi,python-managed,keyring-tests,windows-native \
--workspace \
--status-level skip --failure-output immediate-final --no-fail-fast -j 20 --final-status-level slow