はじめに
docs.rsはcrates.ioで公開されたRustのクレートのドキュメントを生成・ホスティングしてくれるサービスです。このdocs.rsでドキュメントを生成する環境が変更されるということで以下のアナウンスが出ています。変更タイミングは2019/9/30です。
詳細はリンク先を見ていただければいいのですが、簡単なまとめと新環境でのビルド確認方法について書いておきます。
新ビルド環境のまとめ
- ビルドはDockerイメージ(rustops/crates-build-env)内で行われる
- 実行時間は最大15分(ターゲットプラットフォーム毎)
- メモリ使用量は最大3GB
- ビルド中のネットワークアクセス禁止
- ビルド中の
target/
以外のディレクトリへの書き込み禁止
これまで依存ライブラリ不足などでビルドに失敗した場合は、メンテナが手動でサーバにインストールするなどで対応していたようですが、Dockerイメージにすることでそのあたりを運用しやすくするということだと思われます。
ネットワークアクセス禁止と書き込み禁止はたいていのクレートには関係ないと思いますが、build.rs
でいろいろやっている場合は影響があるかもしれません。
新環境でのビルドを試す
Dockerイメージになったことで、手元でもdocs.rsと同じ環境でビルドできるようになります。
まず以下のようにDocker環境に入ります。
$ docker pull rustops/crates-build-env
$ docker run --rm --memory 3221225472 -it rustops/crates-build-env bash
Docker内ではRustのインストール、gitリポジトリのクローン、ビルドを行います。
(Rustは最新のnightlyが使われるようです)
# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain nightly -y
# source $HOME/.cargo/env
# git clone https://github.com/dalance/sv-parser
# cd sv-parser/sv-parser
# cargo fetch
# time cargo doc --no-deps
依存クレートのfetchにかかる時間は15分制限には含まれないようなので、まずcargo fetch
で依存クレートを取得してから時間を測ります。最後のcargo doc
の実行時間が15分を超えなければOKです。
手元で一番大きなクレート(sv-parser)で試してみました。Tokeiでソースコードのサイズを測ったところRustのコードで4万行ほどです。
-------------------------------------------------------------------------------
Language Files Lines Code Comments Blanks
-------------------------------------------------------------------------------
Markdown 1 89 89 0 0
Rust 182 44469 39673 811 3985
SystemVerilog 4 31 26 0 5
TOML 8 154 136 0 18
-------------------------------------------------------------------------------
Total 195 44743 39924 811 4008
-------------------------------------------------------------------------------
リリースビルドだと10分近くかかりますが、docだけなら3分ほどでした。
(実行環境はXeon Gold 6134 @ 3.20GHz)
Documenting sv-parser v0.1.4 (/sv-parser/sv-parser)
Finished dev [unoptimized + debuginfo] target(s) in 2m 55s
real 2m55.417s
user 3m49.382s
sys 0m14.006s
docs.rsで使われているCPUが何なのか分かりませんが、15分あれば十分なようです。