Why
iOSのビルド&テストにCircleCIを使用していますが、毎回carthage bootstrap
をしていると、それだけでも10分くらい食います。CIが遅いと不便なので、このボトルネックを解消しようと思いました。
実装方法
Carthageを更新するべき時だけ更新する
Cartfile.resolved
に変更があった場合だけ、carthage bootstrap
を走らせます。
script/install
#!/bin/bash
bundle install --path=vendor/bundle
if ! diff Cartfile.resolved Carthage/Cartfile.resolved &>/dev/null; then
carthage bootstrap
cp Cartfile.resolved Carthage
fi
Cartfile.resolved
に変更があったかどうかを知るために、git管理外でCarthage/Cartfile.resolved
を保持しておきます。
.gitignore
# Carthage
Carthage/Checkouts
Carthage/Build
Carthage/Cartfile.resolved
CircleCIの設定
用意したscriptを使います。
また、cache_directories
でCarthageを持っておくのがポイントです。
circle.yml
dependencies:
override:
- . script/install
cache_directories:
- "Carthage"
参考
ほぼこれに近いです
https://robots.thoughtbot.com/caching-carthage-con-circleci