mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2024-12-14 10:13:05 +02:00
194 lines
6.8 KiB
Perl
Executable File
194 lines
6.8 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(VM_CO6 . ' build');
|
|
executeTest("${strTestExe} --vm-build --vm=" . VM_CO6, {bShowOutputAsync => true});
|
|
processEnd();
|
|
|
|
processBegin(VM_U16 . ' build');
|
|
executeTest("${strTestExe} --vm-build --vm=" . VM_U16, {bShowOutputAsync => true});
|
|
processEnd();
|
|
|
|
processBegin('release documentation doc');
|
|
executeTest("${strReleaseExe} --build", {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 CO6
|
|
my $strParam = undef;
|
|
|
|
if ($strVm ne VM_CO6)
|
|
{
|
|
$strParam .= '--no-lint';
|
|
}
|
|
|
|
processBegin("${strVm} build");
|
|
executeTest("${strTestExe} --vm-build --vm=${strVm}", {bShowOutputAsync => true});
|
|
processEnd();
|
|
|
|
processBegin("${strVm} test" . (defined($strParam) ? ": ${strParam}" : ''));
|
|
executeTest(
|
|
"${strTestExe} --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;
|