summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan "Duke" Leto <jonathan@leto.net>2011-01-11 16:39:51 -0500
committerJonathan "Duke" Leto <jonathan@leto.net>2011-01-11 16:39:51 -0500
commitb3a31c9d5ac670a7e04602bb8e7e4e3018535e35 (patch)
tree85b08ee55182c26f35291d0ab758ec4570d9d367
parentMake build failure email more useful by including TAP output (diff)
downloadjitterbug-b3a31c9d5ac670a7e04602bb8e7e4e3018535e35.tar.gz
Make failure email more customizable, start new jitterbug::Emailer in perl
-rw-r--r--Build.PL1
-rw-r--r--config.yml4
-rw-r--r--lib/jitterbug/Builder.pm4
-rw-r--r--lib/jitterbug/Emailer.pm43
-rw-r--r--t/005_builder.t42
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'
});