Репозитории формата Cargo используют sparse-индекс (Cargo 1.70 и новее). В примерах используются условные имена cargo-hosted и cargo-proxy.

Подключение

Опишите реестр в ~/.cargo/config.toml; для репозиториев, требующих аутентификации, явно укажите провайдер учётных данных:

[registry]
global-credential-providers = ["cargo:token"]

[registries.galleon]
index = "sparse+https://<GALLEON_HOST>/repository/cargo-hosted/"

Токен — готовая строка Basic <BASE64>; сохраните её командой cargo login:

printf 'Basic <BASE64>\n' | cargo login --registry galleon

Proxy для crates.io

Чтобы все публичные зависимости шли через Galleon, настройте подмену источника — реестр объявляется и в [registries], чтобы к нему можно было привязать токен:

[registries.galleon-proxy]
index = "sparse+https://<GALLEON_HOST>/repository/cargo-proxy/"

[source.crates-io]
replace-with = "galleon-proxy"

[source.galleon-proxy]
registry = "sparse+https://<GALLEON_HOST>/repository/cargo-proxy/"

Если proxy-репозиторий требует аутентификации, сохраните токен и для него: cargo login --registry galleon-proxy (та же строка Basic <BASE64>).

Использование

Зависимость из hosted-реестра указывается в Cargo.toml с именем реестра:

mycrate = { version = "1", registry = "galleon" }

Публикация

Крейт отправляется в hosted-реестр по имени, объявленному в registries.galleon:

cargo publish --registry galleon

Особенности

Особенности формата:

  • Повторная публикация существующей версии отклоняется с кодом 409; имена сравниваются без учёта регистра, а - и _ считаются одним символом.
  • cargo yank поддерживается: версия помечается в индексе, но файл не удаляется — сборки с точной версией в Cargo.lock продолжают работать. Требуется привилегия edit.
  • cargo search и cargo owner не поддерживаются.