🙆

GitLab CIのRust向けキャッシュ設定

2022/02/13に公開

TL;DR

variables:
  CARGO_HOME: $CI_PROJECT_DIR/cargo
script:
  - mkdir -p $CARGO_HOME
  - ln -s /usr/local/cargo/bin $CARGO_HOME/bin
  - ln -s /usr/local/cargo/env $CARGO_HOME/env
  - # build, test, etc.
cache:
  - key: "crates.io"
    paths:
      - cargo/bin/
      - cargo/registry/index/
      - cargo/registry/cache/
      - cargo/git/db/
  - key:
    files:
      - Cargo.lock
    paths:
      - target/

解説

$CARGO_HOME$CI_PROJECT_DIR の下にしないとcache出来ない模様。
更に、ただディレクトリを変更するとbin以下のファイルが見つからなくなるのでシンボリックリンクを張っている。(念の為envも)

target 以下は Cargo.lock をキーにしている。
これが変わってなければビルド結果使いまわしても大丈夫でしょという判断。
(もっと良い方法があれば教えて下さい)

参考ページ

https://docs.gitlab.com/ee/ci/caching/
https://doc.rust-lang.org/cargo/guide/cargo-home.html#caching-the-cargo-home-in-ci

Discussion