CircleCI での Scala アプリのビルドの高速化

2019/12/16   #Scala  #sbt  #CircleCI 
このエントリーをはてなブックマークに追加

ScalaのCIパフォーマンスチューニング on CircleCI2.0 - Qiita

を参考に、コンパイル結果のキャッシュをするように設定。
しかし、キャッシュしても test:compile についてはあいかわらずキャッシュが効かないような動き。

Incremental compilation inside docker container broken since SBT 1.1.0 · Issue #4168 · sbt/sbt
Docker 内ではファイルシステムにコンパイル結果を書き出すときにタイムスタンプが秒で切り捨てられるっぽい。

なので、
scala - How to re-use compiled sources in different machines - Stack Overflow
ここに書いてある、
-Dsbt.io.jdktimestamps=true を追加してみた。
これをやると test 前の固まったような待ち時間がなくなり、すぐにテストが走るようになった!

しかしながら、 JDK8 だとこのハックが使えるみたいだが、8 より上だとダメらしい。
Incremental compilation inside docker container broken since SBT 1.1.0 · Issue #4168 · sbt/sbt
にその場合のハックがあるが未検証。
somehowDetectDocker の箇所を CircleCI 独自の環境変数を見るようにすればできそうではある。