Avatar
サーバーサイドSwiftのCI時間短縮をいろいろやって、うまくいってしばらく経った わかったこととして、 swiftpm のビルドキャッシュは、 .build ディレクトリと、ソースツリーのファイルの modified time が一致していればちゃんと再利用される dependencies: で定義する依存先ライブラリは .build/checkouts に配置されているから、 .build をキャッシュすれば自然と modified time も同期されるから簡単。 プロジェクト本体のソースツリーの部分が問題で、 git からチェックアウトするときに modified time は管理されてなくてフレッシュな時刻になっちゃうから、それで本体部分に関しては .build があってもキャッシュが機能しない。 (edited)
📝 2
3:59 AM
それで、ファイルの mtimeとmd5 をスキャンして書き出しておいて、それをまた適用するツールを作って対処した。この書き出し結果を .build に入れて一緒にキャッシュさせるとうまく整合性が同期できる。 ついでにその変化があったかどうかで、キャッシュのストアを更新することで、フレッシュな .build に更新できるようにした。(GitHub Actions の cache を想定)
4:01 AM
CAS (Content Addressable Storage) build に移行すれば、そもそもビルドシステムがキャッシュ用途で mtime みる必要がなくて、こういう努力もいらんよなあ、と思った。