2010-04-25

Integrity思い出しメモ

Integrity | Continuous Integration server

ちょっと調べた範囲で git + Ruby 以外のアプリをどうやってテストするのかをメモ。

git 以外に対応できるか?

lib/integrity/repository.rb

def checkout
  run "git clone #{@uri} #{directory}", false unless cloned?
  run "git fetch origin"
  run "git checkout origin/#{@branch}"
  run "git reset --hard #{@commit}"
end

って書いてあるので、例えばこれを git-svn を使うように書き換えちゃえば svn には対応できるような気がする。同じ感じで他の scm にも対応できるんじゃないかなぁ。

それか git-svn で mirror する仕組みを用意しておいて、mirror した git repository に対して git fetch; git checkout するようにした方がいいのかな? 本体をいじっちゃうと後々面倒がありそうだし。

テストの実行と結果の取得

lib/integrity/project.rb

module Integrity
  class Project
    include DataMapper::Resource
    include Notifiers

    property :id,         Serial
    property :name,       String,   :required => true
    property :permalink,  String
    property :uri,        URI,      :required => true, :length => 255
    property :branch,     String,   :required => true, :default => "master"
    property :command,    String,   :required => true, :length => 255, :default => "rake"
    property :public,     Boolean,  :default  => true

この :defaule => "rake" がくさいので、たぶん :command を置き換えればいいんじゃないか。

Integrity.configure do |c|
  c.builder.project.command COMMAND
end

って感じになるのかな? あるいは rake を使ってないなら rake っていう sh script を用意するのもアリかも。個人的には rake 使ってない環境はないので無理だけど。

とりあえず FAQ に以下のように書いてあるので

But does it work with <insert tech here>?

Absolutely! As long as your build process can be run from an UNIX-y environment and that it returns a zero status code for success and non-zero for failure, then Integrity works for you.

exit status さえ返せばどうにかなるんだと思う。

というかそうか、Rakefile 置いて :default タスクでテスト走らせればいいだけか。そっちの方が楽かも。

これで Ruby と git は必要だけど Ruby 以外のアプリ、git 以外の scm でもなんとか使えそうかな? SimpleTest を使っているプロジェクトは SimpleTestをCIへ活かす のようにすればなんとかなるような気がする。まだ試してないけど。

About

例によって個人のなんちゃらです