Help us understand the problem. What is going on with this article?

[Rust] docs.rsのビルド環境が変わります

はじめに

docs.rscrates.ioで公開されたRustのクレートのドキュメントを生成・ホスティングしてくれるサービスです。このdocs.rsでドキュメントを生成する環境が変更されるということで以下のアナウンスが出ています。変更タイミングは2019/9/30です。

Upcoming docs.rs changes

詳細はリンク先を見ていただければいいのですが、簡単なまとめと新環境でのビルド確認方法について書いておきます。

新ビルド環境のまとめ

  • ビルドは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分あれば十分なようです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away