The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl -w
use strict;
use warnings;
use Config;
use TAP::Harness::Archive;
use Data::Dumper;
use lib 'lib';
use Math::GSL;
$|++;

my $archive = shift || 'my_test_run.tar.gz';
my $server = 'smolder.leto.net';
my $port = '8080';
my ($user,$pass) = qw/leto bessel_J0/;
my $archname = $Config{archname};
if ($archname =~ /darwin/i){
    chomp($archname = `uname -p`);
}
my $me = $^O eq 'MSWin32' ? $ENV{'USERNAME'}
        : $ENV{'LOGNAME'} || eval { getpwuid($<) };

my $domain = 'unknown';
if ($^O eq 'MSWin32') {
    $domain = $ENV{'USERDOMAIN'};
} else {
    eval { require Sys::Hostname; $domain = Sys::Hostname::hostname(); };
}

my ($git_id,$git_branch) = ('','');

if ( -e '.git' ) {
    chomp($git_id = `git log -p -n 1|grep commit`);
    $git_id =~ s/commit //;
    chomp($git_branch = `git branch | grep "^\*"`);
    $git_branch =~ s/\* //;
}
my $properties = {
    'Math::GSL'     => $Math::GSL::VERSION,
    'Git Commit'    => $git_id,
    'Git Branch'    => $git_branch,
    'Submitter'     => "$me\@$domain",
    'Perl Version'  => $Config{version},
    'Config Args'   => $Config{config_args},
    'CC Flags'      => $Config{ccflags},
    'Double Size'   => $Config{doublesize},
    'Long Doubles'  => $Config{uselongdouble},
    'Multiplicity'  => $Config{usemultiplicity},
    '64bit ints'    => $Config{use64bitint},
    '64bit all'     => $Config{use64bitall},
    'Patch level'   => $Config{version_patchlevel_string},
    'Perl @INC'     => join(":",@INC),
    'PERL5LIB'      => $ENV{PERL5LIB},
};
my @files = glob('t/*.t');
my %options = (
           verbosity        => 0,
           jobs             => 2,
           merge            => 1,
           lib              => [ 'lib', 'blib/lib', 'blib/arch' ],
           archive          => $archive,
           extra_properties => $properties,
           extra_files      => [ ],
);


my $harness = TAP::Harness::Archive->new(\%options);
$harness->runtests(@files);
my $cmd =<<CMD;
smolder_smoke_signal --server $server --port $port \\
    --username '$user' --password '$pass' --file $archive --project Math::GSL \\
    --platform $Config{osname} --architecture $archname --tags "\$USER , $Config{osname}, Math::GSL $Math::GSL::VERSION, $git_branch, Perl $Config{version}"
CMD
print "about to do:\n$cmd\n";

system $cmd;

if ($? == -1) {
    print "failed to execute: $!\n";
} elsif ($? & 127) {
    printf "smolder_smoke_signal died with signal %d, %s coredump\n", ($? & 127),  ($? & 128) ? 'with' : 'without';
} else {
    printf "smolder_smoke_signal exited with value %d\n", $? >> 8;
}