KinoSearch

 view release on metacpan or  search on metacpan

devel/bin/smoke.pl  view on Meta::CPAN

#!/usr/local/bin/perl
use strict;
use warnings;
use Carp;
use SVN::Class;
use FindBin;
use JSON::XS;
use Email::Stuff;
use Sys::Hostname;

my $config = {
    src => Path::Class::Dir->new( $FindBin::Bin, '../../' )->absolute->stringify,
    verbose       => 0,
    email_to      => undef,
    email_from    => getpwuid($<) . '@' . hostname(),
    email_subject => 'KinoSearch Smoke Test Report ' . localtime(),
    test_target => 'test',    # could also be 'test_valgrind' if on Linux
};

if (@ARGV) {
    my $config_file   = Path::Class::File->new( shift @ARGV );
    my $supplied_conf = decode_json( $config_file->slurp );
    $config = { %$config, %$supplied_conf };
}

if (!$config->{src}) {
    croak "no 'src' in config -- check your syntax";
}
if (! -d $config->{src}) {
    croak "no such dir: $config->{src}";
}

my $test_target = $config->{test_target};
my $dir         = svn_dir($config->{src});
my $perl_info   = get_out("$^X -V");
my $sys_info    = get_out('uname -a');
$dir->update or croak "can't svn update $dir:\n" . $dir->errstr;
chdir "$dir" or croak "can't chdir to $dir: $!";
chdir 'perl' or croak "can't chdir to perl: $!";
run_quiet("./Build clean") if -f 'Build';
run_quiet("$^X Build.PL");
run_quiet("$^X Build");
my $test_info = get_out("./Build $test_target");

if (should_send_smoke_signal($test_info)) {

    my $msg =<<EOF;
Looks like one or more tests failed:
$test_info
$sys_info
$perl_info
EOF
    $msg .= $dir->info->dump;

    if ($ENV{SMOKE_TEST}) {
        print $msg . "\n";
    }
    elsif ( $config->{email_to} ) {
        Email::Stuff->from     ( $config->{email_from}    )
                    ->to       ( $config->{email_to}      )
                    ->subject  ( $config->{email_subject} )
                    ->text_body( $msg                     )
                    ->send;             
    }
}
elsif ($config->{verbose}) {
    print "All tests pass.\n";
    print $dir->info->dump;
}

exit;

sub should_send_smoke_signal {
    return 1 if $_[0] =~ m/fail/i;
    return 1 if $? != 0;



( run in 2.611 seconds using v1.01-cache-2.11-cpan-140bd7fdf52 )