Go1.5リリース直前、CircleCIでビルドする準備を整えた

まもなくリリースされるはずのGo1.5に備え、とりあえずみんな大好きCircleCIでGo1.5を使ってビルドができるよう準備してみました。

予備知識

とりあえず予備知識は以下の通りです。

  • Go1.5をビルドするために、Go1.4が必要
  • GOROOT_BOOTSTRAP という環境変数が必要で、Go1.4のホームを設定しておく

※こちらのエントリを参照させていただきました。 Go 1.5 以降のビルド手順 - Qiita

circle.ymlをつくる

先にyamlを貼っちゃいましょう。

machine:
  environment:
    GOROOT_BOOTSTRAP: /usr/local/go

  post:
    - mkdir -p ~/.go_workspace/src
    - mkdir -p ~/.go_workspace/pkg
    - mkdir -p ~/.go_workspace/bin
    - git clone https://go.googlesource.com/go $HOME/go
    - ./make.bash:
        pwd: $HOME/go/src
    - cp -R * ~/.go_workspace/bin:
        pwd: $HOME/go/bin
    - cp -R * ~/.go_workspace/pkg:
        pwd: $HOME/go/pkg


dependencies:
  pre:
    - go version

  • CircleCIのコンテナにはGo1.4がプリインストールされているので、Go1.4をダウンロードしてきてビルドというプロセスは必要ないです。CircleCIのGoは/usr/local/go に配置されているので、GOROOT_BOOTSTRAPはこれを設定します。
  • CircleCIのGOPATH(の一部)は~/.go_workspaceなので、ここにsrc, pkg, binのディレクトリを掘っておきます。
  • https://go.googlesource.com/go からソースを$HOME/goにcloneして、make.bashを実行してビルドします。
  • ビルドで生成された$HOME/go/bin$HOME/go/pkgをそれぞれ、~/.go_workspace/bin~/.go_workspace/pkgへコピーします。

CI実行

実行してみました。結果はこちらを。

https://circleci.com/gh/stormcat24/go1.5_circleci/6

go version devel +7cabade が表示されています。正式リリースされれば、ちゃんと1.5と表示されるでしょう。

ただし、今回はcache_directoriesを活用してないので、これをそのまま使うと毎度cloneしてmake.bashが必要なので時間がかかります。CircleCIでGo1.5が正式にサポートされるまでは、cache_directoriesを活用して時間を短縮しましょう。出来上がったbinとpkgをキャッシュしてコピーするでいいんじゃないでしょうか。

ちなみに今回作ったリポジトリはこちら。