diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/jitterbug/Builder.pm | 25 | ||||
-rw-r--r-- | lib/jitterbug/Emailer.pm | 44 |
2 files changed, 40 insertions, 29 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, |