diff options
author | Jonathan "Duke" Leto <jonathan@leto.net> | 2011-01-11 16:39:51 -0500 |
---|---|---|
committer | Jonathan "Duke" Leto <jonathan@leto.net> | 2011-01-11 16:39:51 -0500 |
commit | b3a31c9d5ac670a7e04602bb8e7e4e3018535e35 (patch) | |
tree | 85b08ee55182c26f35291d0ab758ec4570d9d367 | |
parent | Make build failure email more useful by including TAP output (diff) | |
download | jitterbug-b3a31c9d5ac670a7e04602bb8e7e4e3018535e35.tar.gz |
Make failure email more customizable, start new jitterbug::Emailer in perl
Diffstat (limited to '')
-rw-r--r-- | Build.PL | 1 | ||||
-rw-r--r-- | config.yml | 4 | ||||
-rw-r--r-- | lib/jitterbug/Builder.pm | 4 | ||||
-rw-r--r-- | lib/jitterbug/Emailer.pm | 43 | ||||
-rw-r--r-- | t/005_builder.t | 42 |
5 files changed, 86 insertions, 8 deletions
diff --git a/Build.PL b/Build.PL index 7218a16..62f0cb4 100644 --- a/Build.PL +++ b/Build.PL @@ -27,6 +27,7 @@ my $builder = Module::Build->new( 'Digest::MD5' => 0, 'App::perlbrew' => 0, 'Dist::Zilla' => 0, + 'Email::Stuff' => 0, }, add_to_cleanup => [ 'jitterbug-' ], create_makefile_pl => 'traditional', diff --git a/config.yml b/config.yml index 6230cf7..4b88a9c 100644 --- a/config.yml +++ b/config.yml @@ -18,7 +18,9 @@ jitterbug: build_process: builder: ./scripts/capsule.sh on_failure: ./scripts/build-failed.sh - on_failure_email: alice@example.com + on_failure_cc_email: alice@example.com + on_failure_from_email: donotreply@example.com + on_failure_subject_prefix: "[jitterbug] FAIL " options: perlbrew: 1 diff --git a/lib/jitterbug/Builder.pm b/lib/jitterbug/Builder.pm index 376b98c..4a8451f 100644 --- a/lib/jitterbug/Builder.pm +++ b/lib/jitterbug/Builder.pm @@ -141,10 +141,10 @@ sub run_task { 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 = sprintf("%s '%s' %s '%s' '%s' %s %s", $on_failure, $commiter, $task->project->name, $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`; } diff --git a/lib/jitterbug/Emailer.pm b/lib/jitterbug/Emailer.pm new file mode 100644 index 0000000..97ec640 --- /dev/null +++ b/lib/jitterbug/Emailer.pm @@ -0,0 +1,43 @@ +package jitterbug::Emailer; + +use strict; +use warnings; +use Email::Stuff; + +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 run { + my $self = shift; + my $buildconf = $conf->{'jitterbug'}{'build_process'}; + my $project = $task->project->name; + + my $sha1 = $task->commit->sha256; + my $body = <<BODY; +$tap_output +BODY + + Email::Stuff->from($buildconf->{'on_failure_from_email') + ->to($buildconf->{'on_failure_to_email'}) + ->cc($buildconf->{'on_failure_cc_email'}) + ->text_body($body) + ->subject( + $buildconf->{'on_failure_subject_prefix'} . "$project @ $sha1" + ) + # Should we attach a build log for convenience? + # ->attach(io('dead_bunbun_faked.gif')->all, + # filename => 'dead_bunbun_proof.gif') + ->send; + + return $self; +} + +1; diff --git a/t/005_builder.t b/t/005_builder.t index 15795d6..84e13ef 100644 --- a/t/005_builder.t +++ b/t/005_builder.t @@ -1,7 +1,7 @@ use strict; use warnings; -use Test::Most tests => 7; +use Test::Most tests => 9; use Data::Dumper; use jitterbug::Builder; @@ -30,13 +30,45 @@ use jitterbug::Builder; my $b = jitterbug::Builder->new(); isa_ok($b, 'jitterbug::Builder'); is($b->{'configfile'}, 't/data/test.yml'); - #warn Dumper [ $b ]; is($b->run, 0, '->run returns 0 in cron mode'); cmp_deeply($b->{'conf'}, { - 'configfile' => 't/data/test.yml', - 'cron' => 1, - 'sleep' => undef + 'engines' => { + 'xslate' => { + 'type' => 'text', + 'path' => '/', + 'cache' => '0' + } + }, + 'plugins' => { + 'DBIC' => { + 'schema' => { + 'connect_info' => [ + 'dbi:SQLite:dbname=jitterbug.db' + ], + 'pckg' => 'jitterbug::Schema', + 'skip_automake' => '1' + } + } + }, + 'jitterbug' => { + 'build_process' => { + 'on_failure' => './scripts/build-failed.sh', + 'builder' => './scripts/capsule.sh' + }, + 'builder' => {}, + 'reports' => { + 'dir' => '/tmp/jitterbug' + }, + 'build' => { + 'dir' => '/tmp/build' + } + }, + 'template' => 'xslate', + 'appname' => 'jitterbug', + 'layout' => 'main', + 'logger' => 'file', + 'builds_per_feed' => '5' }); |