#cargo-registry #registry #index #packaging #dependencies

app estuary

一个适合 *小规模*crate 发布和分发的替代 cargo 仓库

2 个版本

0.1.1 2020年12月26日
0.1.0 2020年12月7日
0.1.0-alpha2020年12月6日

#582 in HTTP 服务器

每月下载 23

Apache-2.0/MIT

73KB
1.5K SLoC

Estuary

crates.io crates.io CI codecov

一个适合 小规模crate 发布和分发的 替代 cargo 仓库


河口 是淡水与咸水交汇的沿海半封闭水域。

显然,蓝蟹 把这样的环境当作家园。

这里的总体目标是提供一个与 devpi(用于 Python 包)或 verdaccio(用于 npm 包)类似的 Rust 包仓库。

Estuary 旨在成为一个轻量级的 cargo 仓库,适用于内部/私有使用。

DevpiVerdaccio 都提供了一组丰富的功能,包括搜索、被动上游索引镜像以及漂亮的 Web UI。

今天,Estuary 只支持最基本的仓库功能

  • 发布
  • 拉回
  • 下载
  • 几乎没有 UI

这些功能使我们能够使用 cargo install 或在其他 crate 中将 crates 作为依赖项。

Estuary 尚未实现任何形式的身份验证处理,因此仅适用于 内部使用

安装

$ cargo install estuary

可以从 .env 文件加载环境变量(默认关闭)可以通过

$ cargo install estuary --features dotenv

Estuary 依赖于能够通过命令行运行 git

使用

Estuary 服务器

要获取完整配置选项列表,请运行 estuary --help

Estuary 允许通过命令行标志或环境变量来指定配置。

必需配置

  • --base-url/ESTUARY_BASE_URL Estuary服务器的公开URL,例如:http://estuary.example.com
  • --crate-dir/ESTUARY_CRATE_DIR 存储crate文件的路径。
  • --index-dir/ESTUARY_INDEX_DIR 存储git仓库的路径(用于管理包索引)。

注意:Estuary依赖于在命令行上运行git,并期望能在PATH中找到git。如果出于某种原因,你在一个无法这样做的环境中运行Estuary,你应该使用--git-binESTUARY_GIT_BIN指定git二进制文件的路径。

仓库中包含了一个示例Dockerfile,可以作为部署Estuary的良好快速入门指南。

要直接使用示例Dockerfile,你可以按如下方式构建和运行它

# Build the image
docker build -t estuary-quickstart -f example.Dockerfile .

# You'll want to pick a more permanent spot, but this is our volume for package
# and index data.
mkdir /tmp/estuary-data

# Run the image, specifying the port-mapping, volume mount, and base-url
docker run --rm -it -p 1234:7878 -v /tmp/estuary-data:/var/lib/estuary  \
  estuary-quickstart  \
  --base-url=http://localhost:1234

配置Cargo

Estuary在以下URL公开其包索引git仓库

<base-url>/git/index

要使用Estuary通过Cargo发布或安装crate,你需要添加一些配置。

例如,如果你定义了你的基本URLhttp://estuary.example.com,你将在你的.cargo/config.toml中添加以下内容

[registries]
estuary = { index = "http://estuary.example.com/git/index" }

添加此条目到配置后,下一步是“认证”。

$ cargo login --registry estuary

请注意,Estuary目前对令牌不做任何处理以验证访问。当前的令牌没有任何意义,但cargo需要它

从这里,你可以使用以下命令将crate发布到Estuary

$ cargo publish --registry estuary

你可能想要在你的私有包中添加一个publish字段,以确保它们不会意外发布到crates.io。

发布到Estuary的crate可以通过指定注册表名称作为其他crate的依赖项

[dependencies]
my-cool-package = { version = "1.2.3", registry = "estuary" }

也可以使用--registry标志安装二进制crate

$ cargo install --registry estuary my-cool-app

环境变量也可以用于配置Cargo。请参阅有关使用备用注册表向备用注册表发布的文档以了解更多信息。

变更日志

v0.1.1 (2020-12-25)

小型发布,修复了一个非常尴尬的错误 😅。由于该问题大大限制了Estuary的有用性,v0.1.0将被撤回。

已修复

  • 具有依赖关系的crate在发布时失败。#12

v0.1.0 (2020-12-07)

首次发布!

此版本非常基础,只提供了最基本的注册表功能,以便您可以发布和下载crate。

依赖项

~35–47MB
~893K SLoC