docs.rs 即将迎来的变更

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

docs.rs 构建环境将于 9 月 30 日部署一项突破性变更。docs.rs 是一项免费服务,为所有发布到 crates.io 的 crate 构建并托管文档。它是开源的,由 Rustdoc 团队维护,并由 基础设施团队运营。

将有哪些变化

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

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

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

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

如何为这些变更做准备

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

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

进入 shell 后,您可以安装 rustup(镜像中默认未安装),安装 Rust nightly,克隆您的 crate 仓库,然后构建文档。

cargo fetch
time cargo doc --no-deps

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

如果您的项目需要构建环境中缺少的系统依赖,请在该 Docker 镜像的仓库提交一个问题,我们将考虑添加它。

如果您的 crate 构建失败,因为它生成文档花费的时间超过 15 分钟或使用了超过 3 GB 的 RAM,请提交一个问题,我们将考虑为您的 crate 适当增加限制。但是,我们将**不会**为您的 crate 启用网络访问:您需要修改您的 crate,使其在构建时不需要任何外部资源。

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

致谢

新的构建环境基于 Rustwide,这是一个驱动 Crater 的库。它从 Crater 代码库中提取,由 Crater 贡献者Rustwide 贡献者共同创建。

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