1
0
mirror of https://github.com/postgrespro/pg_probackup.git synced 2025-03-18 21:28:07 +02:00

try travis without docker

This commit is contained in:
Yura Sokolov 2022-12-04 09:08:26 +03:00
parent f2f47f7734
commit 0f7e01b7f3
11 changed files with 185 additions and 283 deletions

View File

@ -1,23 +1,60 @@
os: linux
dist: bionic
dist: jammy
language: c
services:
- docker
cache: ccache
addons:
apt:
packages:
- sudo
- libc-dev
- bison
- flex
- libreadline-dev
- zlib1g-dev
- libzstd-dev
- libssl-dev
- perl
- libperl-dev
- libdbi-perl
- cpanminus
- locales
- python3
- python3-dev
- python3-pip
- libicu-dev
- libgss-dev
- libkrb5-dev
- libxml2-dev
- libxslt1-dev
- libldap2-dev
- tcl-dev
- diffutils
- gdb
- gettext
- lcov
- openssh-client
- openssh-server
- libipc-run-perl
- libtime-hires-perl
- libtimedate-perl
- libdbd-pg-perl
before_install:
- cp travis/* .
- sudo travis/before-install.sh
install:
- ./make_dockerfile.sh
- docker-compose build
- travis/install.sh
before_script:
- sudo travis/before-script.sh
- travis/before-script-user.sh
script:
- docker-compose run tests
# - docker-compose run $(bash <(curl -s https://codecov.io/env)) tests
# - docker run -v $(pwd):/tests --rm centos:7 /tests/travis/backup_restore.sh
- travis/script.sh
notifications:
email:

View File

@ -1,30 +0,0 @@
FROM ololobus/postgres-dev:stretch
USER root
RUN apt-get update
RUN apt-get -yq install python3 python3-pip
# RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# RUN python2 get-pip.py
RUN python3 -m pip install virtualenv
# Environment
ENV PG_MAJOR=${PG_VERSION} PG_BRANCH=${PG_BRANCH}
ENV PTRACK_PATCH_PG_BRANCH=${PTRACK_PATCH_PG_BRANCH}
ENV PGPROBACKUP_GDB=${PGPROBACKUP_GDB}
ENV LANG=C.UTF-8 PGHOME=/pg/testdir/pgbin
# Make directories
RUN mkdir -p /pg/testdir
COPY run_tests.sh /run.sh
RUN chmod 755 /run.sh
COPY . /pg/testdir
WORKDIR /pg/testdir
# Grant privileges
RUN chown -R postgres:postgres /pg/testdir
USER postgres
ENTRYPOINT MODE=${MODE} /run.sh

View File

@ -1,66 +0,0 @@
#!/bin/sh -ex
# vars
export PGVERSION=9.5.4
export PATH=$PATH:/usr/pgsql-9.5/bin
export PGUSER=pgbench
export PGDATABASE=pgbench
export PGDATA=/var/lib/pgsql/9.5/data
export BACKUP_PATH=/backups
export ARCLOG_PATH=$BACKUP_PATH/backup/pg_xlog
export PGDATA2=/var/lib/pgsql/9.5/data2
export PGBENCH_SCALE=100
export PGBENCH_TIME=60
# prepare directory
cp -a /tests /build
pushd /build
# download postgresql
yum install -y wget
wget -k https://ftp.postgresql.org/pub/source/v$PGVERSION/postgresql-$PGVERSION.tar.gz -O postgresql.tar.gz
tar xf postgresql.tar.gz
# install pg_probackup
yum install -y https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-centos95-9.5-2.noarch.rpm
yum install -y postgresql95-devel make gcc readline-devel openssl-devel pam-devel libxml2-devel libxslt-devel
make top_srcdir=postgresql-$PGVERSION
make install top_srcdir=postgresql-$PGVERSION
# initialize cluster and database
yum install -y postgresql95-server
su postgres -c "/usr/pgsql-9.5/bin/initdb -D $PGDATA -k"
cat <<EOF > $PGDATA/pg_hba.conf
local all all trust
host all all 127.0.0.1/32 trust
local replication pgbench trust
host replication pgbench 127.0.0.1/32 trust
EOF
cat <<EOF > $PGDATA/postgresql.auto.conf
max_wal_senders = 2
wal_level = logical
wal_log_hints = on
EOF
su postgres -c "/usr/pgsql-9.5/bin/pg_ctl start -w -D $PGDATA"
su postgres -c "createdb -U postgres $PGUSER"
su postgres -c "createuser -U postgres -a -d -E $PGUSER"
pgbench -i -s $PGBENCH_SCALE
# Count current
COUNT=$(psql -Atc "select count(*) from pgbench_accounts")
pgbench -s $PGBENCH_SCALE -T $PGBENCH_TIME -j 2 -c 10 &
# create backup
pg_probackup init
pg_probackup backup -b full --disable-ptrack-clear --stream -v
pg_probackup show
sleep $PGBENCH_TIME
# restore from backup
chown -R postgres:postgres $BACKUP_PATH
su postgres -c "pg_probackup restore -D $PGDATA2"
# start backup server
su postgres -c "/usr/pgsql-9.5/bin/pg_ctl stop -w -D $PGDATA"
su postgres -c "/usr/pgsql-9.5/bin/pg_ctl start -w -D $PGDATA2"
( psql -Atc "select count(*) from pgbench_accounts" | grep $COUNT ) || (cat $PGDATA2/pg_log/*.log ; exit 1)

6
travis/before-install.sh Executable file
View File

@ -0,0 +1,6 @@
#!/usr/bin/env bash
set -xe
mkdir /pg
chown travis /pg

7
travis/before-script-user.sh Executable file
View File

@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -xe
ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -N ""
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh-keyscan -H localhost >> ~/.ssh/known_hosts

19
travis/before-script.sh Executable file
View File

@ -0,0 +1,19 @@
#!/usr/bin/env bash
set -xe
/etc/init.d/ssh start
# Show pg_config path (just in case)
echo "############### pg_config path:"
which pg_config
# Show pg_config just in case
echo "############### pg_config:"
pg_config
# Show kernel parameters
echo "############### kernel params:"
cat /proc/sys/kernel/yama/ptrace_scope
sudo sysctl kernel.yama.ptrace_scope=0
cat /proc/sys/kernel/yama/ptrace_scope

View File

@ -1,17 +0,0 @@
version: "3.7"
services:
tests:
build:
context: .
cap_add:
- SYS_PTRACE
security_opt:
- seccomp=unconfined
# don't work
#sysctls:
# kernel.yama.ptrace_scope: 0
privileged: true

66
travis/install.sh Executable file
View File

@ -0,0 +1,66 @@
#!/usr/bin/env bash
set -xe
if [ -z ${PG_VERSION+x} ]; then
echo PG_VERSION is not set!
exit 1
fi
if [ -z ${PG_BRANCH+x} ]; then
echo PG_BRANCH is not set!
exit 1
fi
if [ -z ${PTRACK_PATCH_PG_BRANCH+x} ]; then
PTRACK_PATCH_PG_BRANCH=OFF
fi
# fix
sudo chown -R travis /home/travis/.ccache
export PGHOME=/pg
# Clone Postgres
echo "############### Getting Postgres sources:"
git clone https://github.com/postgres/postgres.git -b $PG_BRANCH --depth=1
# Clone ptrack
if [ "$PTRACK_PATCH_PG_BRANCH" != "OFF" ]; then
git clone https://github.com/postgrespro/ptrack.git -b master --depth=1 postgres/contrib/ptrack
export PG_PROBACKUP_PTRACK=ON
else
export PG_PROBACKUP_PTRACK=OFF
fi
# Compile and install Postgres
echo "############### Compiling Postgres:"
cd postgres # Go to postgres dir
if [ "$PG_PROBACKUP_PTRACK" = "ON" ]; then
git apply -3 contrib/ptrack/patches/${PTRACK_PATCH_PG_BRANCH}-ptrack-core.diff
fi
CC='ccache gcc' CFLAGS="-Og" ./configure --prefix=$PGHOME \
--cache-file=~/.ccache/configure-cache \
--enable-debug --enable-cassert --enable-depend \
--enable-tap-tests --enable-nls
make -s -j$(nproc) install
make -s -j$(nproc) -C contrib/ install
# Override default Postgres instance
export PATH=$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib
export PG_CONFIG=$(which pg_config)
if [ "$PG_PROBACKUP_PTRACK" = "ON" ]; then
echo "############### Compiling Ptrack:"
make -C contrib/ptrack install
fi
# Get amcheck if missing
if [ ! -d "contrib/amcheck" ]; then
echo "############### Getting missing amcheck:"
git clone https://github.com/petergeoghegan/amcheck.git --depth=1 contrib/amcheck
make -C contrib/amcheck install
fi
pip3 install testgres

View File

@ -1,37 +0,0 @@
#!/usr/bin/env sh
if [ -z ${PG_VERSION+x} ]; then
echo PG_VERSION is not set!
exit 1
fi
if [ -z ${PG_BRANCH+x} ]; then
echo PG_BRANCH is not set!
exit 1
fi
if [ -z ${MODE+x} ]; then
MODE=basic
fi
if [ -z ${PTRACK_PATCH_PG_BRANCH+x} ]; then
PTRACK_PATCH_PG_BRANCH=OFF
fi
if [ -z ${PGPROBACKUP_GDB+x} ]; then
PGPROBACKUP_GDB=ON
fi
echo PG_VERSION=${PG_VERSION}
echo PG_BRANCH=${PG_BRANCH}
echo MODE=${MODE}
echo PTRACK_PATCH_PG_BRANCH=${PTRACK_PATCH_PG_BRANCH}
echo PGPROBACKUP_GDB=${PGPROBACKUP_GDB}
sed \
-e 's/${PG_VERSION}/'${PG_VERSION}/g \
-e 's/${PG_BRANCH}/'${PG_BRANCH}/g \
-e 's/${MODE}/'${MODE}/g \
-e 's/${PTRACK_PATCH_PG_BRANCH}/'${PTRACK_PATCH_PG_BRANCH}/g \
-e 's/${PGPROBACKUP_GDB}/'${PGPROBACKUP_GDB}/g \
Dockerfile.in > Dockerfile

View File

@ -1,124 +0,0 @@
#!/usr/bin/env bash
#
# Copyright (c) 2019-2022, Postgres Professional
#
set -xe
sudo su -c 'mkdir /run/sshd'
sudo su -c 'apt-get update -y'
sudo su -c 'apt-get install openssh-client openssh-server -y'
sudo su -c '/etc/init.d/ssh start'
ssh-keygen -t rsa -f ~/.ssh/id_rsa -q -N ""
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
ssh-keyscan -H localhost >> ~/.ssh/known_hosts
PG_SRC=$PWD/postgres
# # Here PG_VERSION is provided by postgres:X-alpine docker image
# curl "https://ftp.postgresql.org/pub/source/v$PG_VERSION/postgresql-$PG_VERSION.tar.bz2" -o postgresql.tar.bz2
# echo "$PG_SHA256 *postgresql.tar.bz2" | sha256sum -c -
# mkdir $PG_SRC
# tar \
# --extract \
# --file postgresql.tar.bz2 \
# --directory $PG_SRC \
# --strip-components 1
# Clone Postgres
echo "############### Getting Postgres sources:"
git clone https://github.com/postgres/postgres.git -b $PG_BRANCH --depth=1
# Clone ptrack
if [ "$PTRACK_PATCH_PG_BRANCH" != "OFF" ]; then
git clone https://github.com/postgrespro/ptrack.git -b master --depth=1
export PG_PROBACKUP_PTRACK=ON
else
export PG_PROBACKUP_PTRACK=OFF
fi
# Compile and install Postgres
echo "############### Compiling Postgres:"
cd postgres # Go to postgres dir
if [ "$PG_PROBACKUP_PTRACK" = "ON" ]; then
git apply -3 ../ptrack/patches/${PTRACK_PATCH_PG_BRANCH}-ptrack-core.diff
fi
CFLAGS="-O0" ./configure --prefix=$PGHOME --enable-debug --enable-cassert --enable-depend --enable-tap-tests --enable-nls --with-python
make -s -j$(nproc) install
#make -s -j$(nproc) -C 'src/common' install
#make -s -j$(nproc) -C 'src/port' install
#make -s -j$(nproc) -C 'src/interfaces' install
make -s -j$(nproc) -C contrib/ install
# Override default Postgres instance
export PATH=$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib
export PG_CONFIG=$(which pg_config)
if [ "$PG_PROBACKUP_PTRACK" = "ON" ]; then
echo "############### Compiling Ptrack:"
make USE_PGXS=1 -C ../ptrack install
fi
# Get amcheck if missing
if [ ! -d "contrib/amcheck" ]; then
echo "############### Getting missing amcheck:"
git clone https://github.com/petergeoghegan/amcheck.git --depth=1 contrib/amcheck
make USE_PGXS=1 -C contrib/amcheck install
fi
# Get back to testdir
cd ..
# Show pg_config path (just in case)
echo "############### pg_config path:"
which pg_config
# Show pg_config just in case
echo "############### pg_config:"
pg_config
# Show kernel parameters
echo "############### kernel params:"
cat /proc/sys/kernel/yama/ptrace_scope
sudo sysctl kernel.yama.ptrace_scope=0
cat /proc/sys/kernel/yama/ptrace_scope
# Build and install pg_probackup (using PG_CPPFLAGS and SHLIB_LINK for gcov)
echo "############### Compiling and installing pg_probackup:"
# make USE_PGXS=1 PG_CPPFLAGS="-coverage" SHLIB_LINK="-coverage" top_srcdir=$CUSTOM_PG_SRC install
make USE_PGXS=1 top_srcdir=$PG_SRC install
# Setup python environment
echo "############### Setting up python env:"
python3 -m virtualenv pyenv
source pyenv/bin/activate
pip3 install testgres
echo "############### Testing:"
echo PG_PROBACKUP_PARANOIA=${PG_PROBACKUP_PARANOIA}
echo ARCHIVE_COMPRESSION=${ARCHIVE_COMPRESSION}
echo PGPROBACKUPBIN_OLD=${PGPROBACKUPBIN_OLD}
echo PGPROBACKUPBIN=${PGPROBACKUPBIN}
echo PGPROBACKUP_SSH_REMOTE=${PGPROBACKUP_SSH_REMOTE}
echo PGPROBACKUP_GDB=${PGPROBACKUP_GDB}
echo PG_PROBACKUP_PTRACK=${PG_PROBACKUP_PTRACK}
if [ "$MODE" = "basic" ]; then
export PG_PROBACKUP_TEST_BASIC=ON
echo PG_PROBACKUP_TEST_BASIC=${PG_PROBACKUP_TEST_BASIC}
python3 -m unittest -v tests
python3 -m unittest -v tests.init_test
else
echo PG_PROBACKUP_TEST_BASIC=${PG_PROBACKUP_TEST_BASIC}
python3 -m unittest -v tests.$MODE
fi
# Generate *.gcov files
# gcov src/*.c src/*.h
# Send coverage stats to Codecov
# bash <(curl -s https://codecov.io/bash)

41
travis/script.sh Executable file
View File

@ -0,0 +1,41 @@
#!/usr/bin/env bash
set -xe
export PGHOME=/pg
export PG_SRC=$PWD/postgres
export PATH=$PGHOME/bin:$PATH
export LD_LIBRARY_PATH=$PGHOME/lib
export PG_CONFIG=$(which pg_config)
# Build and install pg_probackup (using PG_CPPFLAGS and SHLIB_LINK for gcov)
echo "############### Compiling and installing pg_probackup:"
# make USE_PGXS=1 PG_CPPFLAGS="-coverage" SHLIB_LINK="-coverage" top_srcdir=$CUSTOM_PG_SRC install
make USE_PGXS=1 top_srcdir=$PG_SRC install
if [ -z ${MODE+x} ]; then
MODE=basic
fi
if [ -z ${PGPROBACKUP_GDB+x} ]; then
PGPROBACKUP_GDB=ON
fi
echo "############### Testing:"
echo PG_PROBACKUP_PARANOIA=${PG_PROBACKUP_PARANOIA}
echo ARCHIVE_COMPRESSION=${ARCHIVE_COMPRESSION}
echo PGPROBACKUPBIN_OLD=${PGPROBACKUPBIN_OLD}
echo PGPROBACKUPBIN=${PGPROBACKUPBIN}
echo PGPROBACKUP_SSH_REMOTE=${PGPROBACKUP_SSH_REMOTE}
echo PGPROBACKUP_GDB=${PGPROBACKUP_GDB}
echo PG_PROBACKUP_PTRACK=${PG_PROBACKUP_PTRACK}
if [ "$MODE" = "basic" ]; then
export PG_PROBACKUP_TEST_BASIC=ON
echo PG_PROBACKUP_TEST_BASIC=${PG_PROBACKUP_TEST_BASIC}
python3 -m unittest -v tests
python3 -m unittest -v tests.init_test
else
echo PG_PROBACKUP_TEST_BASIC=${PG_PROBACKUP_TEST_BASIC}
python3 -m unittest -v tests.$MODE
fi