diff --git a/.travis.yml b/.travis.yml index aba7b4075..5eb9f2e80 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,17 +7,18 @@ dist: trusty services: - docker -before_install: - - docker run -d --name pgbuild -v ${TRAVIS_BUILD_DIR}:/build postgres:9.6.3-alpine - -install: - - docker exec -it pgbuild /bin/sh -c "apk add --no-cache --virtual .build-deps coreutils dpkg-dev gcc libc-dev make util-linux-dev diffutils && make -C /build install && chown -R postgres:postgres /build/" - -script: - - docker exec -u postgres -it pgbuild /bin/sh -c "make -C /build installcheck TEST_INSTANCE_OPTS='--temp-instance=/tmp/pgdata --temp-config=/build/test/postgresql.conf'" - -after_failure: - - docker exec -it pgbuild cat /build/test/regression.diffs - -after_script: - - docker rm -f pgbuild +jobs: + include: + - stage: test + before_install: + - docker run -d --name pgbuild -v ${TRAVIS_BUILD_DIR}:/build postgres:9.6.3-alpine + install: + - docker exec -it pgbuild /bin/sh -c "apk add --no-cache --virtual .build-deps coreutils dpkg-dev gcc libc-dev make util-linux-dev diffutils && make -C /build install && chown -R postgres:postgres /build/" + script: + - docker exec -u postgres -it pgbuild /bin/sh -c "make -C /build installcheck TEST_INSTANCE_OPTS='--temp-instance=/tmp/pgdata --temp-config=/build/test/postgresql.conf'" + after_failure: + - docker exec -it pgbuild cat /build/test/regression.diffs + after_script: + - docker rm -f pgbuild + - stage: test + script: PGTEST_TMPDIR=$TRAVIS_BUILD_DIR bash -x ./scripts/test_updates.sh diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh index 1ed44379a..a75677809 100755 --- a/scripts/docker-build.sh +++ b/scripts/docker-build.sh @@ -15,7 +15,7 @@ TAG_NAME=${TAG_NAME:-$GIT_BRANCH} docker rm -f $(docker ps -a -q -f name=${BUILD_CONTAINER_NAME} 2>/dev/null) 2>/dev/null # Run a Postgres container -docker run -u postgres -d --name ${BUILD_CONTAINER_NAME} -v ${BASE_DIR}:/src postgres:${PG_IMAGE_TAG} +docker run -d --name ${BUILD_CONTAINER_NAME} -v ${BASE_DIR}:/src postgres:${PG_IMAGE_TAG} # Install build dependencies docker exec -u root -it ${BUILD_CONTAINER_NAME} /bin/bash -c "apk add --no-cache --virtual .build-deps coreutils dpkg-dev gcc libc-dev make util-linux-dev diffutils && mkdir -p /build" diff --git a/scripts/test_updates.sh b/scripts/test_updates.sh index 4d5375ffb..887e1ae58 100755 --- a/scripts/test_updates.sh +++ b/scripts/test_updates.sh @@ -4,6 +4,8 @@ set -e set -o pipefail PGTEST_TMPDIR=${PGTEST_TMPDIR:-/tmp} +CLEAN_DATA_DIR=${CLEAN_DATA_DIR:-$PGTEST_TMPDIR/pg_data_clean} +UPDATED_DATA_DIR=${UPDATED_DATA_DIR:-$PGTEST_TMPDIR/pg_data_update} UPDATE_PG_PORT=${UPDATE_PG_PORT:-6432} CLEAN_PG_PORT=${CLEAN_PG_PORT:-6433} @@ -14,7 +16,7 @@ set +e for i in {1..10}; do sleep 2 - pg_isready -h localhost -p $1 + pg_isready -h localhost -U postgres -p $1 if [[ $? == 0 ]] ; then set -e @@ -25,11 +27,11 @@ exit 1 } docker rm -f timescaledb-orig timescaledb-updated timescaledb-clean || true -rm -rf ${PGTEST_TMPDIR}/pg_data ${PGTEST_TMPDIR}/pg_data_clean +rm -rf ${CLEAN_DATA_DIR} ${UPDATED_DATA_DIR} IMAGE_NAME=update_test TAG_NAME=latest bash scripts/docker-build.sh -docker run -d --name timescaledb-clean -v /tmp/pg_data_clean:/var/lib/postgresql/data -p ${CLEAN_PG_PORT}:5432 update_test:latest -docker run -d --name timescaledb-orig -v ${PGTEST_TMPDIR}/pg_data:/var/lib/postgresql/data -p ${UPDATE_PG_PORT}:5432 timescale/timescaledb:${UPDATE_FROM_TAG} +docker run -d --name timescaledb-orig -v ${UPDATED_DATA_DIR}:/var/lib/postgresql/data -p ${UPDATE_PG_PORT}:5432 timescale/timescaledb:${UPDATE_FROM_TAG} +docker run -d --name timescaledb-clean -v ${CLEAN_DATA_DIR}:/var/lib/postgresql/data -p ${CLEAN_PG_PORT}:5432 update_test:latest wait_for_pg ${UPDATE_PG_PORT} @@ -37,7 +39,7 @@ echo "Executing setup script on 0.1.0" psql -h localhost -U postgres -p ${UPDATE_PG_PORT} -f test/sql/updates/setup.sql docker rm -vf timescaledb-orig -docker run -d --name timescaledb-updated -v /tmp/pg_data:/var/lib/postgresql/data -p ${UPDATE_PG_PORT}:5432 update_test:latest +docker run -d --name timescaledb-updated -v ${UPDATED_DATA_DIR}:/var/lib/postgresql/data -p ${UPDATE_PG_PORT}:5432 update_test:latest wait_for_pg ${UPDATE_PG_PORT} @@ -54,13 +56,13 @@ echo "Restarting clean container" #below is needed so the clean container looks like updated, which has been restarted after the setup script #(especially needed for sequences which might otherwise be in different states -- e.g. some backends may have reserved batches) docker rm -vf timescaledb-clean -docker run -d --name timescaledb-clean -v /tmp/pg_data_clean:/var/lib/postgresql/data -p ${CLEAN_PG_PORT}:5432 update_test:latest +docker run -d --name timescaledb-clean -v ${CLEAN_DATA_DIR}:/var/lib/postgresql/data -p ${CLEAN_PG_PORT}:5432 update_test:latest wait_for_pg ${CLEAN_PG_PORT} echo "Testing" -psql -X -v ECHO=ALL -h localhost -U postgres -d single -p ${UPDATE_PG_PORT} -f test/sql/updates/test-0.1.1.sql > /tmp/updated.out -psql -X -v ECHO=ALL -h localhost -U postgres -d single -p ${CLEAN_PG_PORT} -f test/sql/updates/test-0.1.1.sql > /tmp/clean.out +psql -X -v ECHO=ALL -h localhost -U postgres -d single -p ${UPDATE_PG_PORT} -f test/sql/updates/test-0.1.1.sql > ${PGTEST_TMPDIR}/updated.out +psql -X -v ECHO=ALL -h localhost -U postgres -d single -p ${CLEAN_PG_PORT} -f test/sql/updates/test-0.1.1.sql > ${PGTEST_TMPDIR}/clean.out -docker rm -f timescaledb-updated timescaledb-clean || rm -rf ${PGTEST_TMPDIR}/pg_data ${PGTEST_TMPDIR}/pg_data_clean +docker rm -f timescaledb-updated timescaledb-clean || rm -rf ${CLEAN_DATA_DIR} ${UPDATED_DATA_DIR} diff ${PGTEST_TMPDIR}/clean.out ${PGTEST_TMPDIR}/updated.out | tee ${PGTEST_TMPDIR}/update_test.output