diff --git a/.github/workflows/smoke-test.yml b/.github/workflows/smoke-test.yml index bb2e6b19..5bbf3a08 100644 --- a/.github/workflows/smoke-test.yml +++ b/.github/workflows/smoke-test.yml @@ -65,6 +65,11 @@ jobs: psql -c "INSERT INTO test_geometry_table (geom) VALUES (ST_GeomFromText('POINT(0 0)', 4326));" psql -c "SELECT * FROM test_geometry_table;" + echo "Test PostGIS Geometry Function" + psql -c "CREATE EXTENSION plv8;" + psql -c "SELECT plv8_version();" + psql -c "DO $$ plv8.elog(NOTICE, "hello there!"); $$ LANGUAGE plv8;" + break fi sleep 1 diff --git a/Dockerfile b/Dockerfile index 0d37a6ca..fa6a0f37 100644 --- a/Dockerfile +++ b/Dockerfile @@ -200,4 +200,40 @@ RUN set -eux \ # clean && cd / \ && rm -rf /usr/src/postgis \ - && apk del .fetch-deps .build-deps \ No newline at end of file + && apk del .fetch-deps .build-deps +# Add plv8 Extension +ARG PLV8_VERSION + +RUN set -ex && apk update \ + && apk add --no-cache --virtual .v8-build \ + libstdc++-dev \ + binutils \ + gcc \ + libc-dev \ + g++ \ + ca-certificates \ + curl \ + make \ + libbz2 \ + linux-headers \ + cmake \ + clang15-libs \ + clang15 \ + llvm15 \ + ncurses-libs \ + zlib-dev \ + git \ + python3 \ + && mkdir -p /tmp/build \ + && curl -o /tmp/build/v$PLV8_VERSION.tar.gz -SL "https://github.com/plv8/plv8/archive/refs/tags/v${PLV8_VERSION}.tar.gz" \ + && cd /tmp/build \ + && tar -xzf /tmp/build/v$PLV8_VERSION.tar.gz -C /tmp/build/ \ + && cd /tmp/build/plv8-$PLV8_VERSION \ + && git clone --depth 1 https://github.com/bnoordhuis/v8-cmake.git ./deps/v8-cmake \ + && git init \ + && make \ + && make install \ + && strip /usr/local/lib/postgresql/plv8-${PLV8_VERSION}.so \ + && apk del --no-network .v8-build; \ + && rm -rf /tmp/* /var/tmp/* + diff --git a/Makefile b/Makefile index 67fbd6d2..9a78d28b 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,7 @@ PG_VER_NUMBER=$(shell echo $(PG_VER) | cut -c3-) TS_VERSION=2.13.0 PG_CRON_VERSION=v1.6.0 POSTGIS_VERSION=3.4.1 +PLV8_VERSION=3.2.2 PREV_TS_VERSION=$(shell wget --quiet -O - https://raw.githubusercontent.com/timescale/timescaledb/${TS_VERSION}/version.config | grep update_from_version | sed -e 's!update_from_version = !!') PREV_TS_IMAGE="timescale/timescaledb:$(PREV_TS_VERSION)-pg$(PG_VER_NUMBER)$(PREV_EXTRA)" PREV_IMAGE=$(shell if docker pull $(PREV_TS_IMAGE) >/dev/null; then echo "$(PREV_TS_IMAGE)"; else echo "postgres:$(PG_VER_NUMBER)-alpine"; fi ) @@ -30,7 +31,8 @@ DOCKER_BUILD_ARGS = --build-arg TS_VERSION=$(TS_VERSION) \ --build-arg PG_VERSION=$(PG_VER_NUMBER) \ --build-arg PREV_IMAGE=$(PREV_IMAGE) \ --build-arg PG_CRON_VERSION=$(PG_CRON_VERSION) \ - --build-arg POSTGIS_VERSION=$(POSTGIS_VERSION) + --build-arg POSTGIS_VERSION=$(POSTGIS_VERSION) \ + --build-arg PLV8_VERSION=$(PLV8_VERSION) default: image diff --git a/bitnami/Dockerfile b/bitnami/Dockerfile index 873fa036..870e06bd 100644 --- a/bitnami/Dockerfile +++ b/bitnami/Dockerfile @@ -208,6 +208,45 @@ RUN set -eux \ /tmp/* \ /var/tmp/* +ARG PLV8_VERSION + +RUN buildDependencies="build-essential \ + ca-certificates \ + curl \ + git-core \ + gpp \ + cpp \ + gnupg dirmngr \ + pkg-config \ + apt-transport-https \ + cmake \ + libc++-dev \ + libncurses5 \ + libc++abi-dev \ + libstdc++-12-dev \ + wget \ + zlib1g-dev \ + postgresql-server-dev-15 \ + libtinfo5" \ + runtimeDependencies="libc++1" \ + && set -ex \ + && apt-get update && apt-get install -y --no-install-recommends ${buildDependencies} ${runtimeDependencies} \ + && mkdir -p /tmp/build \ + && curl -o /tmp/build/v$PLV8_VERSION.tar.gz -SL "https://github.com/plv8/plv8/archive/refs/tags/v${PLV8_VERSION}.tar.gz" \ + && cd /tmp/build \ + && tar -xzf /tmp/build/v$PLV8_VERSION.tar.gz -C /tmp/build/ \ + && cd /tmp/build/plv8-$PLV8_VERSION \ + && git clone --depth 1 https://github.com/bnoordhuis/v8-cmake.git ./deps/v8-cmake \ + && git init \ + && make \ + && make install \ + && strip /opt/bitnami/postgresql/lib/plv8-${PLV8_VERSION}.so \ + && apt-get clean \ + && apt-get remove -y ${buildDependencies} \ + && apt-get autoremove -y \ + && rm -rf tmp/build /var/lib/apt/lists/* + + USER 1001 ENTRYPOINT [ "/opt/bitnami/scripts/postgresql/timescaledb-bitnami-entrypoint.sh" ] diff --git a/bitnami/Makefile b/bitnami/Makefile index 66d58dec..d9efc5de 100644 --- a/bitnami/Makefile +++ b/bitnami/Makefile @@ -7,6 +7,7 @@ PG_VER_NUMBER=$(shell echo $(PG_VER) | cut -c3-) PG_CRON_VERSION=v1.6.0 TS_VERSION=2.13.0 POSTGIS_VERSION=3.4.1 +PLV8_VERSION=3.2.2 PREV_TS_VERSION=$(shell wget --quiet -O - https://raw.githubusercontent.com/timescale/timescaledb/${TS_VERSION}/version.config | grep update_from_version | sed -e 's!update_from_version = !!') PREV_TS_IMAGE="timescale/timescaledb:$(PREV_TS_VERSION)-pg$(PG_VER_NUMBER)-bitnami" PREV_IMAGE=$(shell if docker pull $(PREV_TS_IMAGE) >/dev/null; then echo "$(PREV_TS_IMAGE)"; else echo "bitnami/postgresql:$(PG_VER_NUMBER)"; fi ) @@ -27,7 +28,8 @@ DOCKER_BUILD_ARGS = --build-arg PG_VERSION=$(PG_VER_NUMBER) \ --build-arg TS_VERSION=$(TS_VERSION) \ --build-arg PREV_IMAGE=$(PREV_IMAGE) \ --build-arg PG_CRON_VERSION=$(PG_CRON_VERSION) \ - --build-arg POSTGIS_VERSION=$(POSTGIS_VERSION) + --build-arg POSTGIS_VERSION=$(POSTGIS_VERSION) \ + --build-arg PLV8_VERSION=$(PLV8_VERSION) default: image