One of the things we needed was a Continuous Integration tool for the project. Since we're already using CruiseControl.rb for the Rails projects I thought it should be pretty easy to incorporate the Perl project into it.
And indeed it was:
$ ./cruise add CatalystProject --url https://svn.work.com/svn/catalystproject/trunk/
CruiseControl will run a "rake" task whenever a commit is made. So we need a small Rakefile with just enough code in it to run the standard Perl tools:
$ cat Rakefile
require 'rake'
task :default => :test
desc "Runs make test"
task :test do
t = system("eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib) && perl Makefile.PL && make test")
rc = $?
puts "\nMake finished with t=#{t} rc=#{rc.exitstatus}"
raise "Perl make failed (rc=#{rc.exitstatus})" unless t
end
task :default => :test
desc "Runs make test"
task :test do
t = system("eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib) && perl Makefile.PL && make test")
rc = $?
puts "\nMake finished with t=#{t} rc=#{rc.exitstatus}"
raise "Perl make failed (rc=#{rc.exitstatus})" unless t
end
The eval line in the system call is there because we're using local::lib to manage our Perl library dependencies and we need to set the environment variables so that they can be found. To propagate any "make test" errors back out to rake we throw an exception on non-zero exit codes.