Haskellプロジェクト(Stack)のTravis CIでの実行速度を高速化する
プロジェクトの.stack-work/
をまるごとキャッシュしてしまう.
cache:
timeout: 1000
directories:
- $HOME/.local
- $HOME/.stack
- .stack-work/
単純明快ですがこれに長らく気がついてませんでした.
私が今取り扱っているHaskellプロジェクトにはextra-deps
が多く,
これらをビルドするのには$HOME/.stack
をキャッシュするだけでは足りないので,
毎回これらをビルドするのにテストと同じぐらいの時間がかかっていました.
単純に.stack-work/
をキャッシュすることで解決です.
ついでに差分ビルドも効くようになって少しだけの修正ならビルドも少なかったり, 再実行だったらテストだけ動いてくれたりします.
ただし.stack-work/
はファイル数が異様に多いので,
このキャッシュを解凍すること自体に300秒ぐらいかかります.
定期的なキャッシュの削除が更に必要になるかもしれませんね.
本当はTravis CIのCPUを強化してハッシュ計算を早くしたいんですが, お金を出しても並列数が伸びるだけでCPUは強化されないんですよね…