GeekFactory

int128.hatenablog.com

CircleCIのmacOSビルドをOSSで利用する

kubelogin というKubernetes向けのツールをOSSで開発しているのですが、Goのビルド条件によって動作が異なる問題 *1 が出てきて、macOSでビルドを実行する必要が出てきました。ちょうど下記の記事でCircleCIがOSS向けにmacOSをサポートしていることを知りました。

medium.com

CircleCIにメールで問い合わせたところ、すぐにOSS向けのmacOSビルドを有効にしてもらえました。先ほどの問題も無事に解決しました。ありがとうございます!

OSS向けのmacOSビルドを有効にするにはCircleCIのFreeプランが適用されている必要があります。私の場合はGitHub Marketplaceのプランになっていたため、GitHub Marketplace上でプランを解約したらCircleCIがFreeプランに戻りました。

CircleCIでmacOS executorを利用するのはとても簡単で、ジョブの設定を docker から macos に変更するだけです。今回はGoのビルドでDocker executorとmacOS executorを併用しているので、以下の点にハマりました。

  • macOS executorでは自分でGoをダウンロードして配置する必要があります。Homebrewも利用できますが、ソースコードからビルドになるので時間がかかるので、ビルド済みパッケージを配置する方が時間が短くなると思います。
  • $GOPATH/pkg をキャッシュしている場合はDockerとmacOSで別々にする必要があります。Docker executorで作成されたtar ballをmacOS executorで展開しようとするとエラーになります。(Go 1.14.4で確認)

$CIRCLE_BRANCH などの環境変数macOS executorでも同じように使えます。

GitHub ActionsもmacOSビルドをサポートしており、こちらは問い合わせしなくても使えるのですが、今回はこれまでのビルドスクリプトをそのまま利用したかったためCircleCIを選択しました。