如何方便地托管 crate 的最新文档?

How to conveniently host a crate's up-to-date documentation?

我最近在 crates.io 上发布了我的第一个 crate,我想知道我是否可以用更简单的方式维护它的文档。

相当多的 crates 文档托管在 GitHub 页面上,所以我想我会试一试。我创建了一个 user.github.io 存储库,使用 cargo doc 生成了文档并将它们推送给它。一切正常,可以从 crates.io.

查看文档

但是,更新它们很不方便;如果我修改 crate 的文档,我需要:

  1. 将这些更改推送到 crate 的 repo
  2. 通过 cargo doc
  3. 生成更新的文档
  4. 将文档文件移动到 GitHub 页面的文件夹
  5. 将文档推送到文档的存储库

我很确定我没有做对 - 特别是第 3 点。我可以做些什么来简化这个过程?有没有更好的方法?

对于许多 crate,Docs.rs is a good solution. It describes itself 为:

Docs.rs (formerly cratesfyi) is an open source project to host documentation of crates for the Rust Programming Language.

Docs.rs automatically builds crates' documentation released on crates.io using the nightly release of the Rust compiler.

这需要权衡:

  • 文档是自动为您生成和托管的,您甚至不必选择加入。
  • 每个版本的 crate 的文档都可用。
  • 如果你有平台特定的条件编译,可以显示不同平台的文档。
  • 只有 发布的 版本的 crate 会被记录。如果没有新版本,您不能在文档中发布拼写错误。
  • 您受惠于第三方实体继续提供此服务。
  • 您无法(目前?)控制使用哪些功能标志。

有些人更喜欢对他们的文档有更多的控制权,或者不属于 Docs.rs 的目标受众。其中许多案例选择配置其 CI 基础设施以生成文档并将结果推送到某处。

一个常见的实现是使用 Travis CI and GitHub Pages,因为许多项目已经在使用这些服务。可以使用任何 CI 系统和 HTML 托管服务,只要您能够轻松连接两者即可。

一般概念是:

  1. 在 CI 中添加构建文档的步骤。
  2. 当检测到某种类型的构建时,将生成的文档推送到托管服务。
    • 构建类型的可能选择:任何分支;主分支;标签;等等
    • 小心 避免暴露任何凭据。一个常见的错误(我自己犯过)是使用像 git push https://${GH_TOKEN}@github.com/... 这样的命令。如果此命令失败, 令牌将打印到 stderr,将其公开给全世界。其他不太明显的情况也会在失败时暴露令牌,因此请彻底检查。

有些人发布了详细介绍他们如何设置的博客文章。我没有验证过其中任何一个都是正常的,但它们可能包含帮助您配置特定解决方案的详细信息。