diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index a0add117b..000000000 --- a/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -FROM postgres:9.6.3 - -MAINTAINER Timescale - -ENV PG_MAJOR 9.6 - -RUN apt-get update && apt-get install -y \ - build-essential \ - daemontools \ - postgresql-server-dev-$PG_MAJOR \ - && rm -rf /var/lib/apt/lists/* - -RUN mkdir -p /build/{src,test/results} -COPY sql /build/sql -COPY src/*.c src/*.h build/src/ -COPY test/expected /build/test/ -COPY test/sql /build/test/ -COPY test/runner.sh /build/test/runner.sh -COPY timescaledb.control /build/ -COPY Makefile build/Makefile -RUN make -C /build install && rm -rf /build diff --git a/docker.mk b/docker.mk deleted file mode 100644 index c12fe0687..000000000 --- a/docker.mk +++ /dev/null @@ -1,27 +0,0 @@ -IMAGE_NAME = timescaledb -CONTAINER_NAME = timescaledb -TEST_CONTAINER_NAME = $(CONTAINER_NAME)_testing -MAKE = make -PGPORT = 5432 -TEST_PGPORT = 6543 -TEST_TABLESPACE_PATH = /tmp/tspace1 -TEST_INSTANCE_OPTS = # clear this setting when running against existing Docker instance - -build-image: Dockerfile - @docker build . -t $(IMAGE_NAME) - -start-container: - @IMAGE_NAME=$(IMAGE_NAME) CONTAINER_NAME=$(CONTAINER_NAME) PGPORT=$(PGPORT) ./scripts/docker-run.sh - -start-test-container: - @IMAGE_NAME=$(IMAGE_NAME) CONTAINER_NAME=$(TEST_CONTAINER_NAME) \ - PGPORT=$(TEST_PGPORT) TEST_TABLESPACE_PATH=$(TEST_TABLESPACE_PATH) ./scripts/start-test-docker.sh - -test: build-image start-test-container installcheck - @docker rm -f $(TEST_CONTAINER_NAME) - -run: build-image start-container - -include Makefile - -.PHONY: test start-container start-test-container build-image diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh new file mode 100755 index 000000000..2b202da05 --- /dev/null +++ b/scripts/docker-build.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# +# This script builds a development TimescaleDB image from the +# currently checked out source on the host. +# +SCRIPT_DIR=$(dirname $0) +BASE_DIR=${PWD}/${SCRIPT_DIR}/.. +PG_IMAGE_TAG=${PG_IMAGE_TAG:-9.6.3-alpine} +BUILD_CONTAINER_NAME=${BUILD_CONTAINER_NAME:-pgbuild} +IMAGE_NAME=${IMAGE_NAME:-$USER/timescaledb} +GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD ${BASE_DIR} | awk '{print $1; exit}' | sed -e "s|/|_|g") + +# Clean previous containers +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} + +# 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" + +# Build and install the extension +docker exec -u root -it ${BUILD_CONTAINER_NAME} /bin/bash -c "cp -a /src/{src,sql,test,Makefile,timescaledb.control} /build/ && make -C /build clean && make -C /build install && echo \"shared_preload_libraries = 'timescaledb'\" >> /usr/local/share/postgresql/postgresql.conf.sample" + +docker commit -a $USER -m "TimescaleDB development image" ${BUILD_CONTAINER_NAME} ${IMAGE_NAME}:${GIT_BRANCH} + +echo +echo "Built image ${IMAGE_NAME}:${GIT_BRANCH}" +echo "Run 'docker run -d --name some-timescaledb -p 5432:5432 ${IMAGE_NAME}:${GIT_BRANCH}' to launch" diff --git a/scripts/docker-run-tests.sh b/scripts/docker-run-tests.sh new file mode 100755 index 000000000..f458694c3 --- /dev/null +++ b/scripts/docker-run-tests.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# +# This script runs the TimescaleDB tests through a standard PostgreSQL +# container, first installing the extension via a mounted host volume. +# +SCRIPT_DIR=$(dirname $0) +BASE_DIR=${PWD}/${SCRIPT_DIR}/.. +PG_IMAGE_TAG=${PG_IMAGE_TAG:-9.6.3-alpine} +CONTAINER_NAME=${CONTAINER_NAME:-pgtest} + +case $1 in + clean) + docker rm -f $(docker ps -a -q -f name=${CONTAINER_NAME} 2>/dev/null) 2>/dev/null + ;; +esac + +if [ $(docker ps -q -f name=${CONTAINER_NAME} 2>/dev/null | wc -l) = 0 ]; then + echo "Creating container ${CONTAINER_NAME}" + docker rm ${CONTAINER_NAME} 2>/dev/null + # Run a Postgres container + docker run -u postgres -d --name ${CONTAINER_NAME} -v ${BASE_DIR}:/src postgres:${PG_IMAGE_TAG} + # Install build dependencies + docker exec -u root -it ${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" +fi + +# Copy the source files to build directory +docker exec -u root -it ${CONTAINER_NAME} /bin/bash -c "cp -a /src/{src,sql,test,Makefile,timescaledb.control} /build/ && make -C /build clean && make -C /build install" + +# Run tests +docker exec -u postgres -it ${CONTAINER_NAME} /bin/bash -c "make -C /build installcheck TEST_INSTANCE_OPTS='--temp-instance=/tmp/pgdata --temp-config=/build/test/postgresql.conf'" + +if [ "$?" != "0" ]; then + docker exec -it ${CONTAINER_NAME} cat /build/test/regression.diffs +fi