• 作成:

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は強化されないんですよね…