Scala でも travis-ci

travis-ci http://travis-ci.org/
という、githubと連携して、いわゆる CI(継続的インテグレーション)を簡単に行えるサービスがあります。
もともとRubyのみで始まったらしいんですが、現在はかなりの言語に対応していてScalaでも使えるんですね。*1

たとえば Scalatra とかが利用してます最近、独自jenkinsに移行して利用やめたかも?
https://github.com/scalatra/scalatra/blob/0703c7c466e58965f574fd804c40d1ba828c49d9/.travis.yml


Scalaでの設定のやり方が書いてある公式ページ↓
http://about.travis-ci.org/docs/user/languages/scala/

現状sbtの0.11系に対応してるらしいです。一度最初に設定すれば、githubにpushするたびにsbtでのtestを勝手に実行してくれます

試しにやってみたら以下の様な感じになりました。

travis-ci のページで実際にどのようにbuildされて、成功したのか失敗したのか確認できる↓

登録して設定したあとはこんな感じで設定ファイルを追加しておくのと、テストの成功か失敗かの状態を表示するためにREADMEに一行追加しておくだけです
https://github.com/xuwei-k/githubot/commit/a6934d07fe9521842275f9cde3c6d896ae768a31
https://github.com/xuwei-k/githubot/commit/aaae1d0991143996b5efdaf1e3715bc1d2b76317

これ別に、 "src/test/scala" 以下の「いわゆる普通のテスト」をまだ1行も書いていないとしても、sbtのtestを実行してくれるということは、テストの前のフェーズの

  • build.sbt の設定が正しいか?
  • 依存ライブラリが解決できるか?
  • mainのソースがコンパイルできるか?

などは確かめることができるはずなので、特に.ymlの設定ファイルが増えるのが気にならなければ設定しておいて損はないとおもいます。
travis-ciのサーバー側でivyのキャッシュがどうなっているのかわからないけど、
「たまたまivyのローカルキャッシュがあって依存ライブラリの解決が成功していたけど、実は必要な resolver を追加し忘れていた」
というミスに気づく可能性がちょっと上がったりするかもしれないとか。

ただ、普通のテスト以外のscripted testやg8-testなどをやる場合は、そのままだと出来ない気がするので、ちょっと工夫が必要かもしれませんが。

追記:
.sbtrc に alias 書いたら
https://github.com/xuwei-k/sbtplugin.g8/commit/76921595394d6fc6c1ead88a8a962a6b8d35f5bd#diff-0
ちゃんと以下のように、 g8-test を実行できました
http://travis-ci.org/#!/xuwei-k/sbtplugin.g8/builds/1174211

これつまり .sbtrc に

alias test = "実行したいタスク"

を書いてしまえば、travis-ci 上でなんでもできちゃうのか・・・?



追記: 続き書いたからこっちも読んだほうがいいよ
travic-ci でカスタムのビルドの設定

*1: そもそもtravis-ci知らなかったけど、Scalaでも使えるのを id:Yoshiori さんがやってて気づいた https://github.com/yoshiori/akemi/blob/11d916bc4169d3432e8e4dd5f94e83f57ae7ae8c/.travis.yml travis用の設定ファイルも生成するg8テンプレートとかもつくってますね https://github.com/yoshiori/scala-sbt.g8/blob/eed67424bbdbb6b2ea7283359cf0d70e9247f62e/src/main/g8/.travis.yml