#!/usr/bin/perl -w use strict; $| = 1; use vars qw( $VERSION ); $VERSION = '0.017'; use Cwd; use File::Spec::Functions; use FindBin; use lib $FindBin::Bin; use lib catdir( $FindBin::Bin, 'lib' ); use lib catdir( $FindBin::Bin, updir(), 'lib' ); use lib catdir( $FindBin::Bin, updir(), 'lib', 'inc' ); use Test::Smoke::Reporter; use Test::Smoke::Mailer; use Test::Smoke; use Test::Smoke::Util qw( do_pod2usage ); use Getopt::Long; my %opt = ( type => undef, ddir => undef, to => undef, cc => undef, ccp5p_onfail => undef, from => undef, mserver => undef, msuser => undef, mspass => undef, v => undef, smokedb_url => undef, ua_timeout => undef, rptfile => 'mktest.rpt', jsnfile => 'mktest.jsn', mail => 0, report => 1, defaultenv => undef, config => undef, help => 0, man => 0, ); my $defaults = Test::Smoke::Mailer->config( 'all_defaults' ); =head1 NAME sendrpt.pl - Send the smoke report by protocol =head1 SYNOPSIS $ ./sendrpt.pl -u URL -d ../perl-current [more options] or $ ./sendrpt.pl -c [smokecurrent_config] =head1 OPTIONS Options depend on the B option, exept for some. =over 4 =item * B -c | --config Use the settings from the configfile F can use the configuration file created by F. Other options can override the settings from the configuration file. =item * B -d | --ddir Set the directory for the source-tree (cwd) --to Comma separated list (smokers-reports@perl.org) --cc Comma separated list -t | --type mail mailx sendmail sendemail Mail::Sendmail [mandatory] --nomail Don't send the message --report Create a report anyway --defaultenv It was a PERLIO-less smoke --[no]ccp5p_onfail Do (not) send failure reports to perl5-porters -v | --verbose <0..2> Set verbose level -h | --help Show help message (needs Pod::Usage) --man Show the perldoc (needs Pod::Usage) =back =head1 DESCRIPTION This is a small front-end for L. =cut my $my_usage = "Usage: $0 -t -d [options]"; GetOptions( \%opt => qw( type|t=s ddir|d=s to=s cc=s bcc=s swcc=s swbcc=s mserver=s msuser=s mspass=s ccp5p_onfail! v|verbose=i smokedb_url|u=s help|h man config|c:s rptfile|r=s mail|email! report! defaultenv! ) ) or do_pod2usage( verbose => 1, myusage => $my_usage ); $opt{ man} and do_pod2usage( verbose => 2, exitval => 0, myusage => $my_usage); $opt{help} and do_pod2usage( verbose => 1, exitval => 0, myusage => $my_usage); if ( defined $opt{config} ) { $opt{config} eq "" and $opt{config} = 'smokecurrent_config'; read_config( $opt{config} ) or do { my $config_name = File::Spec->catfile( $FindBin::Bin, $opt{config} ); read_config( $config_name ); }; unless ( Test::Smoke->config_error ) { foreach my $option ( keys %opt ) { next if defined $opt{ $option }; if ( $option eq 'type' ) { $opt{type} ||= $conf->{mail_type}; } elsif ( exists $conf->{ $option } ) { $opt{ $option } ||= $conf->{ $option } } } } else { warn "WARNING: Could not process '$opt{config}': " . Test::Smoke->config_error . "\n"; } } $opt{ddir} && -d $opt{ddir} or do_pod2usage( verbose => 0 ); my $has_report = check_for_report(); if ($has_report && $opt{mail}) { my $mailer = Test::Smoke::Mailer->new( $opt{type} => \%opt ); $mailer->mail; } my $json = check_for_json(); if ($json && $opt{smokedb_url}) { require LWP::UserAgent; my $ua = LWP::UserAgent->new( agent => "Test::Smoke/$Test::Smoke::VERSION", ( defined $opt{ua_timeout} ? (timeout => $opt{ua_timeout}) : () ), ); $opt{v} and print "Posting to SmokeDB ($opt{smokedb_url})\n"; my $response = eval {$ua->post($opt{smokedb_url}, {json => $json})}; print $@ if $@; $opt{v} and print $response->content; } # Basically: call mkovz.pl unless -f /mktest.rpt sub check_for_report { my $report = File::Spec->catfile( $opt{ddir}, $opt{rptfile} ); if ( -f $report ) { $opt{v} and print "Found [$report]\n"; $opt{report} or return 1; } else { $opt{v} and print "No report found in [$opt{ddir}].\n"; } my $reporter = Test::Smoke::Reporter->new( $conf ); if ( defined $reporter->{_outfile} ) { $reporter->write_to_file; if (!-f $report) { die "Hmmm... cannot find [$report]"; } return 1; } else { $opt{v} and print "Skipped, no .out-file\n"; return; } } sub check_for_json { my $jsnfile = File::Spec->catfile($opt{ddir}, $opt{jsnfile}); if (-f $jsnfile) { $opt{v} and print "Found [$jsnfile]\n"; if (! $opt{report}) { open my $jsn, '<', $jsnfile or die "Cannot open($jsnfile): $!"; my $json = do {local $/; <$jsn> }; close $jsn; $opt{v} and print "Using JSON from '$jsnfile'\n"; return $json; } else { $opt{v} and print "Not reusing existing JSON, regenerate\n"; } } else { $opt{v} and print "No JSON found in [$opt{ddir}]\n"; } my $reporter = Test::Smoke::Reporter->new($conf); return $reporter->smokedb_data(); } =head1 SEE ALSO L, L =head1 COPYRIGHT (c) 2002-2003, All rights reserved. * Abe Timmerman This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See: =over 4 =item * L =item * L =back This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. =cut