diff options
author | Jonathan "Duke" Leto <jonathan@leto.net> | 2011-01-19 13:04:42 -0800 |
---|---|---|
committer | Jonathan "Duke" Leto <jonathan@leto.net> | 2011-01-19 13:04:42 -0800 |
commit | 05c0a17eabb8cb52535ca1ae30fcf8ce0906f5c3 (patch) | |
tree | 7a782c216051e366c215ad902571d34cf2939a17 /lib/jitterbug | |
parent | Attempt to fix the mangled build failure email bug (diff) | |
parent | Fix a jitterbug::Emailer test (diff) | |
download | jitterbug-05c0a17eabb8cb52535ca1ae30fcf8ce0906f5c3.tar.gz |
Merge branch 'refactor_builder'
Conflicts: config.yml lib/jitterbug/Builder.pm scripts/build-failed.sh
Diffstat (limited to 'lib/jitterbug')
-rw-r--r-- | lib/jitterbug/Builder.pm | 20 | ||||
-rw-r--r-- | lib/jitterbug/Emailer.pm | 78 |
2 files changed, 93 insertions, 5 deletions
diff --git a/lib/jitterbug/Builder.pm b/lib/jitterbug/Builder.pm index 32bc51c..a836f70 100644 --- a/lib/jitterbug/Builder.pm +++ b/lib/jitterbug/Builder.pm @@ -113,7 +113,9 @@ sub run_task { my $builder = $conf->{'jitterbug'}{'build_process'}{'builder'}; - my $builder_command = "$builder $build_dir $report_path"; + my $perlbrew = $conf->{'options'}{'perlbrew'} || 1; + + my $builder_command = "$builder $build_dir $report_path $perlbrew"; debug("Going to run builder : $builder_command"); my $res = `$builder_command`; @@ -136,15 +138,23 @@ sub run_task { $result = "FAIL"; my $message = $desc->{'message'}; my $commiter = $desc->{'author'}{'email'}; - my $output = "Build failed"; + my $output = $lines; my $sha = $desc->{'id'}; my $on_failure = $conf->{'jitterbug'}{'build_process'}{'on_failure'}; - my $on_failure_email = $conf->{'jitterbug'}{'build_process'}{'on_failure_email'}; + my $on_failure_cc_email = $conf->{'jitterbug'}{'build_process'}{'on_failure_email'}; $message =~ s/'/\\'/g; $commiter =~ s/'/\\'/g; $output =~ s/'/\\'/g; - my $failure_cmd = qq{$on_failure '$commiter' '$message' '$output' $sha $on_failure_email}; + my $failure_cmd = sprintf("%s '%s' %s '%s' '%s' %s %s", $on_failure, $commiter, $task->project->name, $message, $output, $sha, $on_failure_cc_email); debug("Running failure command: $failure_cmd"); - `$failure_cmd`; + + # does it look like a module name? + if ($on_failure =~ /::/) { + # we should do some error checking here + eval "require $on_failure"; + $on_failure->new($conf,$task,$output)->run; + } else { + system($failure_cmd); + } } $desc->{'build'}{'version'}{$name} = $result; close $fh; diff --git a/lib/jitterbug/Emailer.pm b/lib/jitterbug/Emailer.pm new file mode 100644 index 0000000..d21028f --- /dev/null +++ b/lib/jitterbug/Emailer.pm @@ -0,0 +1,78 @@ +package jitterbug::Emailer; + +use strict; +use warnings; +use Email::Stuff; +use JSON; + +sub new { + my $self = bless {} => shift; + my ($conf,$task,$tap_output) = @_; + # smelly + $self->{'conf'} = $conf; + $self->{'task'} = $task; + $self->{'tap_output'} = $tap_output; + + return $self; +} + +sub _make_body { + my ($header, $message, $tap, $footer) = @_; + + no warnings 'uninitialized'; + return <<BODY; +$header +Commit Message: +$message + +TAP Output: +$tap +$footer +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 = ''; + + if ( $tap =~ m/^(Test Summary Report.*)/ms ) { + $summary = $1; + } + + # Expand placeholders in our failure 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'}) + # bug in Email::Stuff brakes chaining if $email is empty + ->to($email || " ") + ->cc($buildconf->{'on_failure_cc_email'}) + ->text_body($body) + ->subject( + $buildconf->{'on_failure_subject_prefix'} . "$project @ $shortsha1 $message" + ); + # Should we attach a build log for convenience? + # ->attach(io('dead_bunbun_faked.gif')->all, + # filename => 'dead_bunbun_proof.gif') + $self->{'last_email_sent'} = $stuff; + + $stuff->send; + + return $self; +} + +1; |