Closed yuk1ty closed 3 years ago
最近の記事だと https://www.fluvio.io/blog/2021/04/github-actions-best-practices/ が参考になります。 キャッシュに関しては以下の2つのことをやっています。
actions/cache@v2
を使い、 ~/.cargo/registry
と ~/.cargo/git
をキャッシュ
自分のプライベートリポジトリ(1.は元々やっていた)でもこれの真似をしてみたのですが、 9分掛かっていたビルドが7分になりました。 まあ確かに速くはなったのですが、頑張って sccache を入れる(そして将来のトラブルの種を撒く)ほどの効果かというと自分としては疑問に思いました。
https://www.fluvio.io/blog/2021/04/github-actions-best-practices/ の記事の貢献はどちらかというと、「lintやらtestのjobでキャッシュとかrustインストールのためのstepがかぶりがちだが、それをmatrixにより共通化する」方法を示したところだと思います。
CircleCIなんかだと普通に commands:
定義したりYAMLのanchor使ったりして直感的に共通化できるのですが、GitHub Actionsはなんとその両方ともできないのです。
matrixによる共通化は思いつかなかったのでここは非常に恩恵を受けました。
ということで、自分としては
actions/cache@v2
を使い、 ~/.cargo/registry
と ~/.cargo/git
をキャッシュがまずやるべきことかと思います。 sccacheは少なくとも今の段階でやらないで良いんじゃないかな 🤔 matrix使った共通化は余力があればやってみるのが良いかと思います(もしやるぞとなって私にアサインくれたらシュッとやることもできます)。
あ、issueだと思ってコメントしてた 🙄 コードも見ますね。
ありがとうごじます! sccache今の段階でやらないは同意です!w
lint は特に遅くなく build は遅いから、という判断はありだと思います。
rustfmt や clippy は、とくに重いクレートのダウンロードというステップを実行しないのかなーと思ってキャッシュしていませんでした。 ただ、実行時のログを見た限りでは clippy はコンパイルのステップを挟んでいるようだったので、ステップのうちにキャッシュを追加しておきました(気になってコードも読んでみたのですが、clippy は rustc_driver を中で立ち上げているのですね。コンパイルキャッシュがどの程度 Rust で保存されているかについては全然よくわかっておらず、つけてもつけなくても同じかもしれません…)
自分も「clippyはなんかコンパイルしてるしキャッシュは効きそう」くらいの認識しか持ってませんでした 😮 つけなくても同じ可能性はないとは言い切れませんね... それでもつけておけば良いと思います!
そろそろ章によってはビルド時間が気になるものが出てきたので、キャッシュしてみたい。Github Actions 素人なので他にいい方法あったらコメントください。
計測
代表的な重そうなものは下記。
tokio
syn
serde