You've already forked pgbackrest
mirror of
https://github.com/pgbackrest/pgbackrest.git
synced 2025-06-23 00:07:44 +02:00
Add documentation builds to CI.
This commit is contained in:
12
.travis.yml
12
.travis.yml
@ -14,10 +14,11 @@ services:
|
|||||||
- docker
|
- docker
|
||||||
|
|
||||||
env:
|
env:
|
||||||
- PGB_TEST_VM="co6" PGB_TEST_PARAM=""
|
- PGB_CI="--vm=co6 test"
|
||||||
- PGB_TEST_VM="u16" PGB_TEST_PARAM=" --no-lint"
|
- PGB_CI="--vm=u16 test"
|
||||||
- PGB_TEST_VM="co7" PGB_TEST_PARAM=" --no-lint"
|
- PGB_CI="--vm=co7 test"
|
||||||
- PGB_TEST_VM="u14" PGB_TEST_PARAM=" --no-lint"
|
- PGB_CI="--vm=u14 test"
|
||||||
|
- PGB_CI="doc"
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- sudo apt-get -qq update && sudo apt-get install libxml-checker-perl libdbd-pg-perl libperl-critic-perl libtemplate-perl libpod-coverage-perl libtest-differences-perl libhtml-parser-perl lintian debhelper txt2man devscripts libjson-perl libio-socket-ssl-perl libxml-libxml-perl python-pip
|
- sudo apt-get -qq update && sudo apt-get install libxml-checker-perl libdbd-pg-perl libperl-critic-perl libtemplate-perl libpod-coverage-perl libtest-differences-perl libhtml-parser-perl lintian debhelper txt2man devscripts libjson-perl libio-socket-ssl-perl libxml-libxml-perl python-pip
|
||||||
@ -42,7 +43,6 @@ install:
|
|||||||
cd ~ && pwd && whoami && umask && groups
|
cd ~ && pwd && whoami && umask && groups
|
||||||
mv ${TRAVIS_BUILD_DIR?} pgbackrest
|
mv ${TRAVIS_BUILD_DIR?} pgbackrest
|
||||||
rm -rf ${TRAVIS_BUILD_DIR?}
|
rm -rf ${TRAVIS_BUILD_DIR?}
|
||||||
- pgbackrest/test/test.pl --vm-build --vm=${PGB_TEST_VM?}
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- pgbackrest/test/test.pl --vm-max=2 --vm-host=u14 --vm=${PGB_TEST_VM?} ${PGB_TEST_PARAM?}
|
- pgbackrest/test/travis.pl ${PGB_CI?}
|
||||||
|
@ -29,7 +29,7 @@ use BackRestDoc::Common::DocManifest;
|
|||||||
####################################################################################################################################
|
####################################################################################################################################
|
||||||
# User that's building the docs
|
# User that's building the docs
|
||||||
####################################################################################################################################
|
####################################################################################################################################
|
||||||
use constant DOC_USER => 'ubuntu';
|
use constant DOC_USER => getpwuid($UID) . '';
|
||||||
|
|
||||||
####################################################################################################################################
|
####################################################################################################################################
|
||||||
# CONSTRUCTOR
|
# CONSTRUCTOR
|
||||||
|
@ -142,13 +142,13 @@ eval
|
|||||||
# Generate deployment docs for RHEL/Centos 6
|
# Generate deployment docs for RHEL/Centos 6
|
||||||
&log(INFO, "Generate RHEL/CentOS 6 documentation");
|
&log(INFO, "Generate RHEL/CentOS 6 documentation");
|
||||||
|
|
||||||
executeTest("${strDocExe} --deploy --keyword=co6 --out=pdf");
|
executeTest("${strDocExe} --deploy --keyword=co6 --out=pdf", {bShowOutputAsync => true});
|
||||||
executeTest("${strDocExe} --deploy --cache-only --keyword=co6 --out=pdf --var=\"project-name=Crunchy BackRest\"");
|
executeTest("${strDocExe} --deploy --cache-only --keyword=co6 --out=pdf --var=\"project-name=Crunchy BackRest\"");
|
||||||
|
|
||||||
# Generate deployment docs for Debian
|
# Generate deployment docs for Debian
|
||||||
&log(INFO, "Generate Debian/Ubuntu documentation");
|
&log(INFO, "Generate Debian/Ubuntu documentation");
|
||||||
|
|
||||||
executeTest("${strDocExe} --deploy");
|
executeTest("${strDocExe} --deploy", {bShowOutputAsync => true});
|
||||||
executeTest("${strDocExe} --deploy --cache-only --out=man --out=html --var=project-url-root=index.html");
|
executeTest("${strDocExe} --deploy --cache-only --out=man --out=html --var=project-url-root=index.html");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,6 +238,10 @@
|
|||||||
</release-bug-list>
|
</release-bug-list>
|
||||||
|
|
||||||
<release-refactor-list>
|
<release-refactor-list>
|
||||||
|
<release-item>
|
||||||
|
<p>Add documentation builds to CI.</p>
|
||||||
|
</release-item>
|
||||||
|
|
||||||
<release-item>
|
<release-item>
|
||||||
<p>Remove patch directory before Debian package builds.</p>
|
<p>Remove patch directory before Debian package builds.</p>
|
||||||
</release-item>
|
</release-item>
|
||||||
|
@ -11,6 +11,13 @@
|
|||||||
<variable key="user-guide-os" keyword="default">Debian/Ubuntu</variable>
|
<variable key="user-guide-os" keyword="default">Debian/Ubuntu</variable>
|
||||||
<variable key="user-guide-os" keyword="co6">RHEL/CentOS 6</variable>
|
<variable key="user-guide-os" keyword="co6">RHEL/CentOS 6</variable>
|
||||||
|
|
||||||
|
<variable key="pgbackrest-base-dir" eval="y">
|
||||||
|
use File::Basename qw(dirname);
|
||||||
|
use Cwd qw(abs_path);
|
||||||
|
|
||||||
|
dirname(dirname(abs_path($0)));
|
||||||
|
</variable>
|
||||||
|
|
||||||
<variable key="pg-version" keyword="default">9.4</variable>
|
<variable key="pg-version" keyword="default">9.4</variable>
|
||||||
<variable key="pg-version" keyword="co6">9.5</variable>
|
<variable key="pg-version" keyword="co6">9.5</variable>
|
||||||
<variable key="pg-version-upgrade" keyword="default">9.5</variable>
|
<variable key="pg-version-upgrade" keyword="default">9.5</variable>
|
||||||
@ -63,8 +70,8 @@
|
|||||||
<variable key="host-os" keyword="default">u14</variable>
|
<variable key="host-os" keyword="default">u14</variable>
|
||||||
<variable key="host-os" keyword="co6">co6</variable>
|
<variable key="host-os" keyword="co6">co6</variable>
|
||||||
|
|
||||||
<variable key="host-user">ubuntu</variable>
|
<variable key="host-user" eval="y">use English; getpwuid($UID) . ''</variable>
|
||||||
<variable key="host-mount">/backrest:/backrest</variable>
|
<variable key="host-mount">{[pgbackrest-base-dir]}:/backrest</variable>
|
||||||
<variable key="image-repo">pgbackrest/test</variable>
|
<variable key="image-repo">pgbackrest/test</variable>
|
||||||
|
|
||||||
<variable key="host-s3-server">s3-server</variable>
|
<variable key="host-s3-server">s3-server</variable>
|
||||||
|
2
test/Vagrantfile
vendored
2
test/Vagrantfile
vendored
@ -8,7 +8,7 @@ Vagrant.configure(2) do |config|
|
|||||||
config.vm.box_version = "20170603.0.0"
|
config.vm.box_version = "20170603.0.0"
|
||||||
|
|
||||||
# vagrant plugin install vagrant-disksize
|
# vagrant plugin install vagrant-disksize
|
||||||
config.disksize.size = '64GB'
|
# config.disksize.size = '64GB'
|
||||||
|
|
||||||
config.vm.provider :virtualbox do |vb|
|
config.vm.provider :virtualbox do |vb|
|
||||||
vb.name = "pgbackrest-test"
|
vb.name = "pgbackrest-test"
|
||||||
|
@ -89,16 +89,14 @@ sub process
|
|||||||
"\n" .
|
"\n" .
|
||||||
"env:\n";
|
"env:\n";
|
||||||
|
|
||||||
my $bFirst = true;
|
|
||||||
|
|
||||||
# Iterate each OS
|
# Iterate each OS
|
||||||
foreach my $strVm (VM_LIST)
|
foreach my $strVm (VM_LIST)
|
||||||
{
|
{
|
||||||
$strConfig .=
|
$strConfig .= " - PGB_CI=\"--vm=${strVm} test\"\n";
|
||||||
" - PGB_TEST_VM=\"${strVm}\" PGB_TEST_PARAM=\"" . ($bFirst ? '' : " --no-lint") . "\"\n";
|
|
||||||
$bFirst = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$strConfig .= " - PGB_CI=\"doc\"\n";
|
||||||
|
|
||||||
# Configure install and script
|
# Configure install and script
|
||||||
$strConfig .=
|
$strConfig .=
|
||||||
"\n" .
|
"\n" .
|
||||||
@ -127,10 +125,9 @@ sub process
|
|||||||
" cd ~ && pwd && whoami && umask && groups\n" .
|
" cd ~ && pwd && whoami && umask && groups\n" .
|
||||||
" mv \${TRAVIS_BUILD_DIR?} " . BACKREST_EXE . "\n" .
|
" mv \${TRAVIS_BUILD_DIR?} " . BACKREST_EXE . "\n" .
|
||||||
" rm -rf \${TRAVIS_BUILD_DIR?}\n" .
|
" rm -rf \${TRAVIS_BUILD_DIR?}\n" .
|
||||||
" - " . BACKREST_EXE . "/test/test.pl --vm-build --vm=\${PGB_TEST_VM?}\n" .
|
|
||||||
"\n" .
|
"\n" .
|
||||||
"script:\n" .
|
"script:\n" .
|
||||||
" - " . BACKREST_EXE . "/test/test.pl --vm-max=2 --vm-host=u14 --vm=\${PGB_TEST_VM?} \${PGB_TEST_PARAM?}\n";
|
" - " . BACKREST_EXE . "/test/travis.pl \${PGB_CI?}\n";
|
||||||
|
|
||||||
$self->{oStorage}->put('.travis.yml', $strConfig);
|
$self->{oStorage}->put('.travis.yml', $strConfig);
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ sub begin
|
|||||||
|
|
||||||
# Record start time and set process timeout
|
# Record start time and set process timeout
|
||||||
$self->{iProcessTimeout} = 540;
|
$self->{iProcessTimeout} = 540;
|
||||||
$self->{lTimeStart} = time();
|
$self->{lTimeLast} = time();
|
||||||
|
|
||||||
if (!defined($self->{hError}))
|
if (!defined($self->{hError}))
|
||||||
{
|
{
|
||||||
@ -141,7 +141,7 @@ sub endRetry
|
|||||||
my $bFound = false;
|
my $bFound = false;
|
||||||
|
|
||||||
# Error if process has been running longer than timeout
|
# Error if process has been running longer than timeout
|
||||||
if (time() - $self->{lTimeStart} > $self->{iProcessTimeout})
|
if (time() - $self->{lTimeLast} > $self->{iProcessTimeout})
|
||||||
{
|
{
|
||||||
confess &log(ASSERT,
|
confess &log(ASSERT,
|
||||||
"timeout after $self->{iProcessTimeout} seconds waiting for process to complete: $self->{strCommand}");
|
"timeout after $self->{iProcessTimeout} seconds waiting for process to complete: $self->{strCommand}");
|
||||||
@ -150,6 +150,8 @@ sub endRetry
|
|||||||
# Drain the stdout stream and look for test points
|
# Drain the stdout stream and look for test points
|
||||||
while (defined(my $strLine = $self->{oIo}->readLine(true, false)))
|
while (defined(my $strLine = $self->{oIo}->readLine(true, false)))
|
||||||
{
|
{
|
||||||
|
$self->{lTimeLast} = time();
|
||||||
|
|
||||||
$self->{strOutLog} .= "${strLine}\n";
|
$self->{strOutLog} .= "${strLine}\n";
|
||||||
$bFound = true;
|
$bFound = true;
|
||||||
|
|
||||||
|
193
test/travis.pl
Executable file
193
test/travis.pl
Executable file
@ -0,0 +1,193 @@
|
|||||||
|
#!/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_U14 . ' build');
|
||||||
|
executeTest("${strTestExe} --vm-build --vm=" . VM_U14, {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=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;
|
Reference in New Issue
Block a user