1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2024-12-14 10:13:05 +02:00
pgbackrest/test/travis.pl
David Steele 5c1d4bcd0d Automate coverage summary report generation.
This report replaces the lcov report that was generated manually for each release.

The lcov report was overly verbose just to say that we have virtually 100% coverage.
2019-05-15 13:04:56 -04:00

187 lines
6.5 KiB
Perl
Executable File

#!/usr/bin/perl
####################################################################################################################################
# Travis CI Test Wrapper
####################################################################################################################################
####################################################################################################################################
# Perl includes
####################################################################################################################################
use strict;
use warnings FATAL => qw(all);
use Carp qw(confess longmess);
use English '-no_match_vars';
# Convert die to confess to capture the stack trace
$SIG{__DIE__} = sub { Carp::confess @_ };
use File::Basename qw(dirname);
use Getopt::Long qw(GetOptions);
use Cwd qw(abs_path);
use lib dirname($0) . '/lib';
use lib dirname(dirname($0)) . '/lib';
use pgBackRest::Common::Exception;
use pgBackRest::Common::Log;
use pgBackRestTest::Common::ExecuteTest;
use pgBackRestTest::Common::VmTest;
####################################################################################################################################
# Usage
####################################################################################################################################
=head1 NAME
travis.pl - Travis CI Test Wrapper
=head1 SYNOPSIS
test.pl [options] doc|test
VM Options:
--vm docker container to build/test
General Options:
--help display usage and exit
=cut
####################################################################################################################################
# Command line parameters
####################################################################################################################################
my $strVm;
my $bHelp;
GetOptions ('help' => \$bHelp,
'vm=s' => \$strVm)
or pod2usage(2);
####################################################################################################################################
# Begin/end functions to track timing
####################################################################################################################################
my $lProcessBegin;
my $strProcessTitle;
sub processBegin
{
$strProcessTitle = shift;
&log(INFO, "Begin ${strProcessTitle}");
$lProcessBegin = time();
}
sub processEnd
{
&log(INFO, "End ${strProcessTitle} (" . (time() - $lProcessBegin) . 's)');
}
####################################################################################################################################
# Run in eval block to catch errors
####################################################################################################################################
eval
{
# Display version and exit if requested
if ($bHelp)
{
syswrite(*STDOUT, "Travis CI Test Wrapper\n");
syswrite(*STDOUT, "\n");
pod2usage();
exit 0;
}
if (@ARGV != 1)
{
syswrite(*STDOUT, "test|doc required\n\n");
pod2usage();
}
################################################################################################################################
# Paths
################################################################################################################################
my $strBackRestBase = dirname(dirname(abs_path($0)));
my $strReleaseExe = "${strBackRestBase}/doc/release.pl";
my $strTestExe = "${strBackRestBase}/test/test.pl";
logLevelSet(INFO, INFO, OFF);
################################################################################################################################
# Build documentation
################################################################################################################################
if ($ARGV[0] eq 'doc')
{
processBegin('LaTeX install');
executeTest(
'sudo apt-get install -y --no-install-recommends texlive-latex-base texlive-latex-extra texlive-fonts-recommended',
{bSuppressStdErr => true});
executeTest('sudo apt-get install -y texlive-font-utils latex-xcolor', {bSuppressStdErr => true});
processEnd();
processBegin('release documentation doc');
executeTest("${strReleaseExe} --build --no-coverage", {bShowOutputAsync => true});
processEnd();
}
################################################################################################################################
# Run test
################################################################################################################################
elsif ($ARGV[0] eq 'test')
{
# VM must be defined
if (!defined($strVm))
{
confess &log(ERROR, '--vm is required');
}
# Only lint on U18
my $strParam = undef;
if ($strVm ne VM_U18)
{
$strParam .= '--no-lint';
}
processBegin("${strVm} build");
executeTest("${strTestExe} --vm-build --vm=${strVm}", {bShowOutputAsync => true});
processEnd();
processBegin("${strVm} test" . (defined($strParam) ? ": ${strParam}" : ''));
executeTest(
"${strTestExe} --no-gen --no-ci-config --vm-host=" . VM_U14 . " --vm-max=2 --vm=${strVm}" .
(defined($strParam) ? " ${strParam}" : ''),
{bShowOutputAsync => true});
processEnd();
}
################################################################################################################################
# Catch error
################################################################################################################################
else
{
confess &log(ERROR, 'invalid command ' . $ARGV[0]);
}
&log(INFO, "CI Complete");
# Exit with success
exit 0;
}
####################################################################################################################################
# Check for errors
####################################################################################################################################
or do
{
# If a backrest exception then return the code
exit $EVAL_ERROR->code() if (isException(\$EVAL_ERROR));
# Else output the unhandled error
print $EVAL_ERROR;
exit ERROR_UNHANDLED;
};
# It shouldn't be possible to get here
&log(ASSERT, 'execution reached invalid location in ' . __FILE__ . ', line ' . __LINE__);
exit ERROR_ASSERT;