summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/jitterbug/Builder.pm25
-rw-r--r--lib/jitterbug/Emailer.pm44
-rw-r--r--t/006_emailer.t4
-rw-r--r--t/data/test.yml14
4 files changed, 56 insertions, 31 deletions
diff --git a/lib/jitterbug/Builder.pm b/lib/jitterbug/Builder.pm
index 221e81c..a5f0cbb 100644
--- a/lib/jitterbug/Builder.pm
+++ b/lib/jitterbug/Builder.pm
@@ -142,14 +142,17 @@ sub run_task {
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 $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;
@@ -160,7 +163,7 @@ 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);
}
@@ -178,8 +181,14 @@ sub run_task {
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");
- # TODO: create perl pass emailer
- system($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;
diff --git a/lib/jitterbug/Emailer.pm b/lib/jitterbug/Emailer.pm
index d21028f..d93ec79 100644
--- a/lib/jitterbug/Emailer.pm
+++ b/lib/jitterbug/Emailer.pm
@@ -7,11 +7,12 @@ use JSON;
sub new {
my $self = bless {} => shift;
- my ($conf,$task,$tap_output) = @_;
+ my ($conf,$task,$tap_output,$status) = @_;
# smelly
- $self->{'conf'} = $conf;
- $self->{'task'} = $task;
+ $self->{'conf'} = $conf;
+ $self->{'task'} = $task;
$self->{'tap_output'} = $tap_output;
+ $self->{'status'} = $status;
return $self;
}
@@ -32,38 +33,39 @@ BODY
}
sub run {
- my $self = shift;
- my $task = $self->{'task'};
- my $buildconf = $self->{'conf'}->{'jitterbug'}{'build_process'};
- my $project = $task->project->name;
- my $tap = $self->{'tap_output'};
- my $sha1 = $task->commit->sha256;
- my $shortsha1 = substr($sha1, 0, 8);
- my $desc = JSON::decode_json( $task->commit->content );
- my $email = $desc->{'author'}{'email'};
- my $message = $desc->{'message'};
- my $header = $buildconf->{'on_failure_header'};
- my $footer = $buildconf->{'on_failure_footer'};
- my $body = _make_body($header,$message, $tap, $footer);
- my $summary = '';
+ my $self = shift;
+ my $task = $self->{'task'};
+ my $status = $self->{'status'};
+ my $buildconf = $self->{'conf'}->{'jitterbug'}{'build_process'};
+ my $project = $task->project->name;
+ my $tap = $self->{'tap_output'};
+ my $sha1 = $task->commit->sha256;
+ my $shortsha1 = substr($sha1, 0, 8);
+ my $desc = JSON::decode_json( $task->commit->content );
+ my $email = $desc->{'author'}{'email'};
+ my $message = $desc->{'message'};
+ my $header = $buildconf->{"on_${status}_header"};
+ my $footer = $buildconf->{"on_${status}_footer"};
+ my $body = _make_body($header,$message, $tap, $footer);
+ my $summary = '';
if ( $tap =~ m/^(Test Summary Report.*)/ms ) {
$summary = $1;
}
- # Expand placeholders in our failure email
+ # Expand placeholders in our email
$body =~ s/%%PROJECT%%/$project/g;
$body =~ s/%%SHA1%%/$sha1/g;
$body =~ s/%%SUMMARY%%/$summary/g;
- my $stuff = Email::Stuff->from($buildconf->{'on_failure_from_email'})
+ my $stuff = Email::Stuff->from($buildconf->{"on_${status}_from_email"})
# bug in Email::Stuff brakes chaining if $email is empty
->to($email || " ")
- ->cc($buildconf->{'on_failure_cc_email'})
+ ->cc($buildconf->{"on_${status}_cc_email"})
->text_body($body)
->subject(
- $buildconf->{'on_failure_subject_prefix'} . "$project @ $shortsha1 $message"
+ $buildconf->{"on_${status}_subject_prefix"} . "$project @ $shortsha1 $message"
);
# Should we attach a build log for convenience?
# ->attach(io('dead_bunbun_faked.gif')->all,
diff --git a/t/006_emailer.t b/t/006_emailer.t
index 44dd328..297644c 100644
--- a/t/006_emailer.t
+++ b/t/006_emailer.t
@@ -33,7 +33,7 @@ sub setup {
{
my ($conf, $commit, $project, $task) = setup();
my $tap = "THIS IS TAP";
- my $e = jitterbug::Emailer->new($conf, $task, $tap);
+ my $e = jitterbug::Emailer->new($conf, $task, $tap, 'failure');
isa_ok($e,'jitterbug::Emailer');
can_ok($e,qw/new run/);
@@ -89,7 +89,7 @@ Failed 1/11 test programs. 1/2498 subtests failed.
Files=11, Tests=2498, 3 wallclock secs ( 0.20 usr 0.04 sys + 2.99 cusr 0.18 csys = 3.41 CPU)
Result: FAIL
TAP
- my $e = jitterbug::Emailer->new($conf, $task, $tap);
+ my $e = jitterbug::Emailer->new($conf, $task, $tap, 'failure');
$e->run;
my $email = $e->{'last_email_sent'}{'email'};
my $body = <<EMAIL;
diff --git a/t/data/test.yml b/t/data/test.yml
index 9ec509e..897b734 100644
--- a/t/data/test.yml
+++ b/t/data/test.yml
@@ -19,6 +19,20 @@ jitterbug:
builder: ./scripts/capsule.sh
builder_variables: STUFF=BLAH
on_failure: ./scripts/build-failed.sh
+ on_failure_cc_email: alice@example.com
+ on_failure_from_email: donotreply@example.com
+ on_failure_subject_prefix: "[jitterbug] FAIL "
+ on_failure_header:
+ on_failure_footer:
+ on_pass: ./scripts/build-pass.sh
+ on_pass_cc_email: alice@example.com
+ on_pass_subject_prefix: "[jitterbug] PASS "
+ on_pass_from_email: donotreply@example.com
+ on_pass_header:
+ on_pass_footer:
+ options:
+ perlbrew: 1
+ email_on_pass: 0
plugins:
DBIC: