docs.rs 的即将更新

2019 年 9 月 18 日 · Rust 基础设施团队

9 月 30 日,将对 docs.rs 构建环境进行重大更改。 docs.rs 是一项免费服务,用于构建和托管在 crates.io 上发布的所有板条箱的文档。它是 开源 的,由 Rustdoc 团队 维护,并由 基础设施团队 运营。

将会发生什么变化

构建将在 rustops/crates-build-env Docker 镜像中执行。该镜像包含许多已安装的系统依赖项,以确保我们可以构建尽可能多的板条箱。它已被 Crater 使用,并且我们添加了以前在旧版构建环境中安装的所有依赖项。

为了确保我们能够在未来继续运营该服务并提高其可靠性,我们还改进了构建执行的沙箱,添加了新的限制

  • 每个平台现在将有 **15 分钟** 的时间来构建其依赖项和文档。
  • 构建将有 **3 GB 的 RAM** 可用。
  • 网络访问将被 **禁用**(仍然会获取 crates.io 依赖项)。
  • 只有 target/ 目录可写,并且将在每次构建后被清除。

最后,docs.rs 现在将在构建板条箱时使用最新的 nightly 版本,而不是使用手动更新的固定版本的 nightly。

如何为这些更改做好准备

要测试您的板条箱是否可以在新环境中构建,您可以本地下载 Docker 镜像并在其中执行 shell

docker pull rustops/crates-build-env
docker run --rm --memory 3221225472 -it rustops/crates-build-env bash

进入 shell 后,您可以安装 rustup(它默认情况下未安装在镜像中),安装 Rust nightly,克隆您的板条箱的存储库,然后构建文档

cargo fetch
time cargo doc --no-deps

为了帮助您进行测试,这些命令将把可用 RAM 限制为 3 GB 并显示 cargo doc 的总执行时间,但不会阻止网络访问,因为您需要获取依赖项。

如果您的项目需要构建环境中缺少的系统依赖项,请 在 Docker 镜像的 存储库 上打开一个问题,我们会考虑添加它。

如果您的板条箱由于生成文档花费了超过 15 分钟或使用了超过 3 GB 的 RAM 而无法构建,请 打开一个问题,我们会考虑为您的板条箱增加合理的限制。但是,我们 **不会** 为您的板条箱启用网络访问:您需要更改您的板条箱,使其在构建时不需要任何外部资源。

我们建议使用 Cargo 功能 来删除导致构建失败的代码部分,并使用 docs.rs 元数据 启用这些功能。

致谢

新的构建环境基于 Rustwide,它是为 Crater 提供支持的库。它从 Crater 代码库中提取出来,由 Crater 贡献者Rustwide 贡献者 共同创建。

docs.rs 方面的实现工作由 Pietro AlbiniOnur Aslan 完成,由 QuietMisdreavusMark Rousskov 审查了这些更改。