#cargo-registry #registry #cargo #http #http-api #registry-server

bin+lib cargo-http-registry

当使用crates.io时不希望快速发布crates时

8个版本

0.1.6 2024年8月16日
0.1.5 2023年4月19日
0.1.4 2023年1月8日
0.1.3 2022年3月2日
0.0.0 2020年11月17日

#79 in 配置

Download history 116/week @ 2024-08-10 658/week @ 2024-08-17

779每月下载量

GPL-3.0或更新

46KB
833

pipeline crates.io rustc

cargo-http-registry

cargo-http-registry 是一个 cargo 注册表,允许在不需要使用 crates.io 时快速发布crates。

该应用程序可以用来托管本地注册表,crates可以发布到该注册表。crates的发布通过基于HTTP的API进行,可以通过常规 cargo publish 命令进行接口操作。crates存储在文件系统上,访问它们不需要注册表。

用法

要设置本地注册表,只需运行 cargo-http-registry 并提供注册表根目录的路径

$ cargo-http-registry /tmp/my-registry

如果目录不存在,则会创建它,并根据需要填充。

默认情况下,注册表只在本地上监听 127.0.0.1,但命令行选项允许覆盖此设置。

要使 cargo 了解此注册表,它需要在 cargo 配置文件 中进行声明。注册表可以通过本地文件系统(通过指定其路径)或通过HTTP访问。HTTP地址和端口号可以在注册表的 config.json 中找到(例如,示例中的 /tmp/my-registry/config.json;请参阅 api 键内容)。然后打开您的 ~/.cargo/config.toml(或项目配置)并添加以下行

[registries]
my-registry = { index = "http://127.0.0.1:35503/git" }
# Alternatively, access it via path:
my-registry = { index = "file:///tmp/my-registry" }

此外,请注意,对于HTTP访问,您需要启用 net.git-fetch-with-cli 设置。这可以通过 config.toml 实现,例如添加以下内容:

[net]
git-fetch-with-cli = true

有了这些,现在您可以向注册表发布crate,并从中提取它们。

$ cargo publish --registry my-registry
    Updating `/tmp/my-registry` index
   Packaging my-lib v0.1.0
   Verifying my-lib v0.1.0
   Compiling my-lib v0.1.0
    Finished dev [unoptimized + debuginfo] target(s) in 0.09s
   Uploading my-lib v0.1.0

创建的注册表不需要任何令牌检查。因此,如果您被要求 cargo login 到注册表,可以使用任何字符串。

您还可以调整crate,只允许发布到特定的注册表,这将防止意外推送到 crates.io

--- Cargo.toml
+++ Cargo.toml
@@ -1,9 +1,10 @@
 [package]
 name = "my-lib"
 version = "0.1.0"
 authors = ["Daniel Mueller <[email protected]>"]
 edition = "2018"
+publish = ["my-registry"]

 # See more keys and their definitions at https://doc.rust-lang.net.cn/cargo/reference/manifest.html

 [dependencies]

要从本地注册表消费已发布的crate,只需设置依赖项的 registry

--- Cargo.toml
+++ Cargo.toml
@@ -8,3 +8,4 @@ edition = "2018"

 [dependencies.my-lib]
 version = "0.1"
+registry = "my-registry"

请注意,cargo-http-registry 不是 cargo 子命令,不能用作此类。

此外,请注意,注册表旨在在受信任的环境中使用,例如在单个计算机或本地家庭网络中。原因在于,根据设计,它没有认证方案,也没有采取任何加固代码的尝试。

Docker

在Docker容器中运行注册表

docker run -p 35504:35504 ghcr.io/d-e-s-o/cargo-http-registry:latest /tmp/test-registry --addr 0.0.0.0:35504

在docker compose文件中运行 cargo-http-registry

version: "3"

services:
  registry:
    image: ghcr.io/d-e-s-o/cargo-http-registry:latest
    container_name: cargo-registry
    restart: always
    # Arguments:
    # - Directory where the registry will store its data.
    #   Cargo-http-registry creates the directory if it does not exist.
    # - Server address.
    #   Note that 127.0.0.1 doesn't work in GitHub actions.
    #   Use 0.0.0.0 instead.
    command: /tmp/test-registry --addr 0.0.0.0:35504
    ports:
      - "35504:35504"

依赖项

~22–35MB
~591K SLoC