about summary refs log tree commit diff
path: root/lib/jitterbug/Builder.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/jitterbug/Builder.pm')
-rw-r--r--lib/jitterbug/Builder.pm52
1 files changed, 43 insertions, 9 deletions
diff --git a/lib/jitterbug/Builder.pm b/lib/jitterbug/Builder.pm
index 1f201e2..deb4c5b 100644
--- a/lib/jitterbug/Builder.pm
+++ b/lib/jitterbug/Builder.pm
@@ -116,9 +116,15 @@ sub run_task {
 
     my $builder         = $conf->{'jitterbug'}{'build_process'}{'builder'};
 
-    my $perlbrew = $conf->{'options'}{'perlbrew'} || 1;
+    my $perlbrew      = $conf->{'jitterbug'}{'options'}{'perlbrew'};
+    my $email_on_pass = $conf->{'jitterbug'}{'options'}{'email_on_pass'};
 
-    my $builder_command = "$builder $build_dir $report_path $perlbrew";
+    debug("email_on_pass = $email_on_pass");
+    debug("perlbrew      = $perlbrew");
+
+    my $builder_variables = $conf->{'jitterbug'}{'build_process'}{'builder_variables'};
+
+    my $builder_command = "$builder_variables $builder $build_dir $report_path $perlbrew";
 
     debug("Going to run builder : $builder_command");
     my $res             = `$builder_command`;
@@ -136,15 +142,21 @@ sub run_task {
         ($result) = $lines =~ /Result:\s(\w+)/;
         my ( $name, ) = basename($version);
         $name =~ s/\.txt//;
+
+        debug("Result of test suite is $result");
+
+        # TODO: Unify this code
+
         if ( !$result || ($result && $result !~ /PASS/ )) {
+            debug("Emailing FAIL report");
             # mail author of the commit
             $result = "FAIL";
-            my $message          = $desc->{'message'};
-            my $commiter         = $desc->{'author'}{'email'};
-            my $output           = $lines;
-            my $sha              = $desc->{'id'};
-            my $on_failure       = $conf->{'jitterbug'}{'build_process'}{'on_failure'};
-            my $on_failure_cc_email = $conf->{'jitterbug'}{'build_process'}{'on_failure_email'};
+            my $message             = $desc->{'message'};
+            my $commiter            = $desc->{'author'}{'email'};
+            my $output              = $lines;
+            my $sha                 = $desc->{'id'};
+            my $on_failure          = $conf->{'jitterbug'}{'build_process'}{'on_failure'};
+            my $on_failure_cc_email = $conf->{'jitterbug'}{'build_process'}{'on_failure_cc_email'};
 
             $message  =~ s/'/\\'/g; $commiter =~ s/'/\\'/g; $output =~ s/'/\\'/g;
             my $failure_cmd = sprintf("%s '%s' %s '%s' '%s' %s %s", $on_failure, $commiter, $task->project->name, $message, $output, $sha, $on_failure_cc_email);
@@ -154,10 +166,32 @@ sub run_task {
             if ($on_failure =~ /::/) {
                 # we should do some error checking here
                 eval "require $on_failure";
-                $on_failure->new($conf,$task,$output)->run;
+                $on_failure->new($conf,$task,$output,'failure')->run;
             } else {
                 system($failure_cmd);
             }
+        } elsif ($email_on_pass) {
+            debug("Emailing PASS report");
+            $result = "PASS";
+            my $message          = $desc->{'message'};
+            my $commiter         = $desc->{'author'}{'email'};
+            my $output           = $lines;
+            my $sha              = $desc->{'id'};
+            my $on_pass          = $conf->{'jitterbug'}{'build_process'}{'on_pass'};
+            my $on_pass_cc_email = $conf->{'jitterbug'}{'build_process'}{'on_pass_cc_email'};
+
+            $message  =~ s/'/\\'/g; $commiter =~ s/'/\\'/g; $output =~ s/'/\\'/g;
+            my $pass_cmd = sprintf("%s '%s' %s '%s' '%s' %s %s", $on_pass, $commiter, $task->project->name, $message, $output, $sha, $on_pass_cc_email);
+            debug("Running pass command: $pass_cmd");
+
+            # does it look like a module name?
+            if ($on_pass =~ /::/) {
+                # we should do some error checking here
+                eval "require $on_pass";
+                $on_pass->new($conf,$task,$output, 'pass')->run;
+            } else {
+                system($pass_cmd);
+            }
         }
         $desc->{'build'}{'version'}{$name} = $result;
         close $fh;