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 Albini 和 Onur Aslan 完成,由 QuietMisdreavus 和 Mark Rousskov 审查了这些更改。