#cargo #header #registries #file-header #registry #download #private

app cargo-sideload

用于处理私有 Cargo 注册表的工具

25 个版本 (7 个重大更新)

0.8.1 2021 年 2 月 9 日
0.7.3 2021 年 1 月 28 日

#446Cargo 插件

Download history 34/week @ 2024-04-01

每月 57 次下载

MIT 许可证

32KB
547

crates.io docs.rs

警告:请小心处理您的访问令牌。

cargo-sideload 是一个用于处理替代 Cargo 注册表的工具包。其主要功能是从经过身份验证的下载端点下载软件包,这是 Cargo 目前不支持的功能。它旨在作为临时解决方案,直到 此功能 被添加到 Cargo。

Cargo 的文档 中有关于处理替代注册表的大量有用信息。

安装

cargo安装 cargo-sideload

用法

  1. 将您的替代注册表添加到 ~/.cargo/config.toml
    [registries]
    test_registry = { index = "https://github.com/picklenerd/test_registry" }
    
  2. registry = "[registry-name]" 添加到使用该注册表的任何依赖项。
    my_lib = { version = "1.0", registry = "test_registry" }
    
  3. 在您的软件包根目录中运行 cargo sideload fetch --registry=[registry-name]
    • 如果您的下载端点需要身份验证或其他头信息,请使用 --headers 参数。
      头格式: [Header-Name]: [Header Value]
  4. 您的软件包现在已存储在本地 Cargo 缓存中。运行 Cargo 命令将像往常一样工作。
  5. 如果您从您的私有注册表添加或更新依赖项,您将需要再次运行 cargo sideload fetch

更多信息

cargosideload --帮助

头信息

通过 cargo sideload fetch 执行的下载请求的 HTTP 头信息可以以几种方式设置。

命令行参数

设置头信息的最直接方法是在后面跟上以逗号分隔的头信息列表,使用 --headers 参数。头信息格式如下:[Header-Name]: [Header Value]

示例: cargo run -- fetch --headers "FIRST-HEADER: 1", "SECOND-HEADER: 2"

环境变量

可以使用环境变量 CARGO_SIDELOAD_HEADER 来设置单个头信息。如果您当前工作目录中有 .env 文件,cargo-sideload 将使用它。使用 --headers 参数传入的头信息将覆盖环境变量头信息。

示例: CARGO_SIDELOAD_HEADER="MY-HEADER: 12345"

配置文件

可以在 cargo-sideload 配置文件中设置默认头信息。如果 --headers 参数或 CARGO_SIDELOAD_HEADER 环境变量中没有其他头信息可用,则会使用这些头信息。下面将介绍如何创建配置文件。

配置文件

配置文件可以用来设置默认的注册表并关联特定注册表的头信息。这使得您可以在不提供 --registry--headers 参数的情况下运行像 cargo sideload fetch 这样的命令。

要使用配置,创建文件 ~/.config/cargo-sideload/config.toml。所有可用的配置选项在下面的示例中列出。默认选项仅在命令行参数和环境变量未设置时使用。

default_registry = "test_registry"
  
[registries.test_registry]
default_headers = [ "Authorization: Blah abcd1234" ] 

[registries.other_registry]
default_headers = [ 
        "PRIVATE-KEY: abcdef",
        "Some-Other-Header: And its value",
]

额外工具

cargo-sideload 随附了一些用于处理私有注册表的额外工具。提供这些额外的子命令是因为现有的工具并不总是与私有注册表或认证下载端点兼容。

cargo sideload list [crate-name] 将列出指定包的每个可用版本的某些信息。不包括已撤回的版本。使用 --latest 将打印包最新版本的详细信息,而使用 --latest-version 只返回最新版本号。

cargo sideload outdated --registry=[registry-name] 将列出指定注册表中所有具有较新版本的依赖项。如果已设置默认注册表,则 --registry 是可选的。可以使用 --packages 指定要检查的包列表。

故障排除

cargo-sideload 使用 pretty_env_logger 包来打印调试信息。使用 RUST_LOG=debug cargo sideload fetch 来查看文件下载的 HTTP 请求和响应的详细信息。您还会看到基于 RUST_LOG 值的 Cargo 和任何其他依赖项的日志。有关更多详细信息,请参阅 env_logger 文档。

如果您输入了错误的认证头,可能会遇到下载的.crate文件实际上是登录页面HTML的情况,或者类似的情况。使用cargo-sideload将告诉Cargo在下载后解压您的.crate文件。如果解压失败,您将收到错误消息,并且下载的文件将被删除。

如果您发现自己处于需要强制重新下载的情况,可以使用--force选项。这将删除现有文件并下载新副本。

如果您尝试运行一个损坏或无效的crate的正常Cargo命令,您将收到类似以下错误消息。如果发生这种情况,您很可能会需要调试您的注册索引中的下载端点或请求中的头。启用日志和使用--force选项可以使此调试过程更加容易。

error: failed to download `my_lib v0.1.0 (registry `https://github.com/picklenerd/test_registry`)`

Caused by:
  unable to get packages from source

Caused by:
  failed to unpack package `my_lib v0.1.0 (registry `https://github.com/picklenerd/test_registry`)`

Caused by:
  failed to iterate over archive

Caused by:
  failed to fill whole buffer

依赖项

~39–55MB
~1M SLoC