Skip to content

Commit 601c3bb

Browse files
authoredFeb 8, 2023
chore: improve build cache with multistage docker (#528)
* Update dockerhub-release.yml * chore: add multistage docker build * chore: update test dockerfile * chore: run build on every pr * chore: update postgresql config for extensions * chore: install vault extension * chore: install plv8 * Revert "Update dockerhub-release.yml" This reverts commit 46a2d45. * chore: add initial migration files * chore: use labs syntax for checksum and git ref * chore: use ccache to build plv8 * chore: add pgsodium build stage * chore: rename postgres major arg and cleanup * chore: resolve plv8 package error * chore: run migrations on latest build * chore: optimise build steps * chore: load to local docker engine * chore: merge migrate workflow to build * chore: rearrange test steps * chore: skip cpan tests * chore: add pg_cron database setting * chore: update pgnet to match develop
1 parent 03e1953 commit 601c3bb

File tree

2 files changed

+784
-46
lines changed

2 files changed

+784
-46
lines changed
 

‎.github/workflows/test.yml

Lines changed: 51 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -9,87 +9,92 @@ on:
99

1010
jobs:
1111
build:
12-
if: ${{ github.event_name != 'pull_request' }}
1312
runs-on: ubuntu-latest
13+
timeout-minutes: 180
14+
env:
15+
POSTGRES_PORT: 5478
16+
POSTGRES_PASSWORD: password
1417
steps:
1518
- uses: actions/checkout@v3
19+
- uses: docker/setup-buildx-action@v2
20+
- uses: docker/build-push-action@v3
21+
with:
22+
push: false
23+
load: true
24+
context: ansible
25+
tags: supabase/postgres:latest
26+
cache-from: type=gha
27+
cache-to: type=gha,mode=max
1628

17-
- run: docker compose up --abort-on-container-exit --build
18-
19-
migrate:
20-
runs-on: ubuntu-latest
21-
env:
22-
POSTGRES_PASSWORD: password
29+
- name: Start Postgres
30+
run: |
31+
docker run --rm --pull=never \
32+
-e POSTGRES_PASSWORD=${{ env.POSTGRES_PASSWORD }} \
33+
-p ${{ env.POSTGRES_PORT }}:5432 \
34+
--name supabase_postgres \
35+
-d supabase/postgres:latest
2336
24-
strategy:
25-
matrix:
26-
supabase-version: ["15.1.0.11"]
27-
timeout-minutes: 10
37+
- name: Install dbmate
38+
run: |
39+
curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/latest/download/dbmate-linux-amd64
40+
sudo chmod +x /usr/local/bin/dbmate
2841
29-
services:
30-
postgres:
31-
image: supabase/postgres:${{ matrix.supabase-version }}
32-
ports:
33-
- 5478:5432
34-
# Set health checks to wait until postgres has started
35-
options: >-
36-
--health-cmd "pg_isready -U postgres -h localhost"
37-
--health-interval 5s
38-
--health-timeout 5s
39-
--health-retries 10
42+
- name: Install pg_prove
43+
run: sudo cpan -T TAP::Parser::SourceHandler::pgTAP
4044
env:
41-
POSTGRES_PASSWORD: ${{ env.POSTGRES_PASSWORD }}
42-
volumes:
43-
# Disable migration by removing from entrypoint
44-
- /dev/null:/docker-entrypoint-initdb.d/migrate.sh
45-
46-
steps:
47-
- name: checkout
48-
uses: actions/checkout@v3
45+
SHELL: /bin/bash
4946

50-
- name: install dbmate
47+
- name: Wait for healthy database
5148
run: |
52-
curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/latest/download/dbmate-linux-amd64
53-
sudo chmod +x /usr/local/bin/dbmate
49+
count=0
50+
until [ "$(docker inspect -f '{{.State.Health.Status}}' "$container")" == "healthy" ]; do
51+
exit=$?
52+
count=$((count + 1))
53+
if [ $count -ge "$retries" ]; then
54+
echo "Retry $count/$retries exited $exit, no more retries left."
55+
docker stop -t 2 "$container"
56+
return $exit
57+
fi
58+
sleep 1;
59+
done;
60+
echo "$container container is healthy"
61+
env:
62+
retries: 20
63+
container: supabase_postgres
5464

55-
- name: migrate schema
65+
- name: Migrate schema
5666
run: ./migrations/db/migrate.sh
5767
env:
5868
USE_DBMATE: 1
59-
POSTGRES_PORT: 5478
69+
POSTGRES_PORT: ${{ env.POSTGRES_PORT }}
6070
POSTGRES_PASSWORD: ${{ env.POSTGRES_PASSWORD }}
6171

62-
- name: install pg_prove
63-
run: sudo cpan TAP::Parser::SourceHandler::pgTAP
64-
env:
65-
SHELL: /bin/bash
66-
67-
- name: run tests
72+
- name: Run tests
6873
run: pg_prove migrations/tests/test.sql
6974
env:
7075
PGHOST: localhost
71-
PGPORT: 5478
76+
PGPORT: ${{ env.POSTGRES_PORT }}
7277
PGUSER: postgres
7378
PGPASSWORD: ${{ env.POSTGRES_PASSWORD }}
7479

75-
- name: migrations should be idempotent
80+
- name: Check migrations are idempotent
7681
run: |
7782
for sql in ./migrations/db/migrations/*.sql; do
7883
echo "$0: running $sql"
7984
psql -v ON_ERROR_STOP=1 --no-password --no-psqlrc -f "$sql"
8085
done
8186
env:
8287
PGHOST: localhost
83-
PGPORT: 5478
88+
PGPORT: ${{ env.POSTGRES_PORT }}
8489
PGDATABASE: postgres
8590
PGUSER: supabase_admin
8691
PGPASSWORD: ${{ env.POSTGRES_PASSWORD }}
8792

88-
- name: run tests
93+
- name: Run tests again
8994
run: pg_prove migrations/tests/test.sql
9095
env:
9196
PGHOST: localhost
92-
PGPORT: 5478
97+
PGPORT: ${{ env.POSTGRES_PORT }}
9398
PGUSER: postgres
9499
PGPASSWORD: ${{ env.POSTGRES_PASSWORD }}
95100

‎ansible/Dockerfile

Lines changed: 733 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,733 @@
1+
# syntax=docker/dockerfile:1.5-labs
2+
ARG postgres_major=15
3+
ARG postgres_minor=1
4+
5+
ARG sfcgal_release=1.3.10
6+
ARG sfcgal_release_checksum=sha256:4e39b3b2adada6254a7bdba6d297bb28e1a9835a9f879b74f37e2dab70203232
7+
ARG postgis_release=3.3.2
8+
ARG postgis_release_checksum=sha256:9a2a219da005a1730a39d1959a1c7cec619b1efb009b65be80ffc25bad299068
9+
ARG pgrouting_release=3.4.1
10+
ARG pgrouting_release_checksum=sha256:a4e034efee8cf67582b67033d9c3ff714a09d8f5425339624879df50aff3f642
11+
ARG pgtap_release=1.2.0
12+
ARG pgtap_release_checksum=sha256:9c7c3de67ea41638e14f06da5da57bac6f5bd03fea05c165a0ec862205a5c052
13+
ARG pg_cron_release=1.4.2
14+
ARG pg_cron_release_checksum=sha256:3652722ea98d94d8e27bf5e708dd7359f55a818a43550d046c5064c98876f1a8
15+
ARG pgaudit_release=1.7.0
16+
ARG pgaudit_release_checksum=sha256:8f4a73e451c88c567e516e6cba7dc1e23bc91686bb6f1f77f8f3126d428a8bd8
17+
ARG pgjwt_release=9742dab1b2f297ad3811120db7b21451bca2d3c9
18+
ARG pgsql_http_release=1.5.0
19+
ARG pgsql_http_release_checksum=sha256:43efc9e82afcd110f205b86b8d28d1355d39b6b134161e9661a33a1346818f5d
20+
ARG plpgsql_check_release=2.2.5
21+
ARG plpgsql_check_release_checksum=sha256:6c3a3c5faf3f9689425c6db8a6b20bf4cd5e7144a055e29538eae980c7232573
22+
ARG pg_safeupdate_release=1.4
23+
ARG pg_safeupdate_release_checksum=sha256:ff01d3d444d35924bd3d745c5695696292e2855042da4c30fe728fb3b6648122
24+
ARG timescaledb_release=2.9.1
25+
ARG timescaledb_release_checksum=sha256:883638f2e79d25ec88ee58f603f3c81c999b6364cb4c799919d363f04089b47b
26+
ARG wal2json_release=2_5
27+
ARG wal2json_release_checksum=sha256:b516653575541cf221b99cf3f8be9b6821f6dbcfc125675c85f35090f824f00e
28+
ARG pljava_release=1.6.4
29+
ARG pljava_release_checksum=sha256:5dc5a963365cbdeb786d0ad65b6310c4c5150ef8524e273bca4085c3fb0f056f
30+
ARG plv8_release=3.1.5
31+
ARG plv8_release_checksum=sha256:1e108d5df639e4c189e1c5bdfa2432a521c126ca89e7e5a969d46899ca7bf106
32+
ARG pg_plan_filter_release=5081a7b5cb890876e67d8e7486b6a64c38c9a492
33+
ARG pg_net_release=0.7.1
34+
ARG pg_net_release_checksum=sha256:f403019fbffe5b3ec28816957ef81279dea1db5b008e3fb3bc39181a5e361940
35+
ARG rum_release=1.3.13
36+
ARG rum_release_checksum=sha256:6ab370532c965568df6210bd844ac6ba649f53055e48243525b0b7e5c4d69a7d
37+
ARG pg_hashids_release=cd0e1b31d52b394a0df64079406a14a4f7387cd6
38+
ARG libsodium_release=1.0.18
39+
ARG libsodium_release_checksum=sha256:6f504490b342a4f8a4c4a02fc9b866cbef8622d5df4e5452b46be121e46636c1
40+
ARG pgsodium_release=3.1.5
41+
ARG pgsodium_release_checksum=sha256:bec847388a5db2a60ea9d991962ce27954d91b4c41cbcc7bd8e34472c69114d1
42+
ARG pg_graphql_release=1.1.0
43+
ARG pg_stat_monitor_release=1.1.1
44+
ARG pg_stat_monitor_release_checksum=sha256:1756a02d5a6dd66b892d15920257c69a17a67d48d3d4e2f189b681b83001ec2a
45+
ARG pg_jsonschema_release=0.1.4
46+
ARG vault_release=0.2.9
47+
ARG vault_release_checksum=sha256:1e813216395c59bb94c92be47ce8b70ba19ccc0efbcdb1fb14ed6d34a42c6cdb
48+
ARG groonga_release=12.0.8
49+
ARG groonga_release_checksum=sha256:7770c0ff6804ef4b47b015b15736cd973cffced977c20991b16b2daa4fea6eeb
50+
ARG pgroonga_release=2.4.0
51+
ARG pgroonga_release_checksum=sha256:5baaae0e7d81f8167e278e9a34c6ed56aece8b34f5ab98f228c64408093417b3
52+
ARG wrappers_release=0.1.7
53+
ARG hypopg_release=1.3.1
54+
ARG hypopg_release_checksum=sha256:e7f01ee0259dc1713f318a108f987663d60f3041948c2ada57a94b469565ca8e
55+
ARG pg_repack_release=1.4.8
56+
ARG pg_repack_release_checksum=sha256:18b4d871c1abf78cf0b1b1fe6081d435d183a8dc5eb977576e7a47fe113dd4ec
57+
ARG pgvector_release=0.4.0
58+
ARG pgvector_release_checksum=sha256:b76cf84ddad452cc880a6c8c661d137ddd8679c000a16332f4f03ecf6e10bcc8
59+
60+
FROM postgres:$postgres_major.$postgres_minor as base
61+
# Redeclare args for use in subsequent stages
62+
ARG TARGETARCH
63+
ARG postgres_major
64+
65+
FROM base as builder
66+
# Install build dependencies
67+
RUN apt-get update && apt-get install -y \
68+
postgresql-server-dev-${postgres_major} \
69+
build-essential \
70+
checkinstall \
71+
cmake \
72+
&& rm -rf /var/lib/apt/lists/*
73+
74+
####################
75+
# 01-postgis.yml
76+
####################
77+
FROM builder as sfcgal
78+
# Download and extract
79+
ARG sfcgal_release
80+
ARG sfcgal_release_checksum
81+
ADD --checksum=${sfcgal_release_checksum} \
82+
"https://gitlab.com/Oslandia/SFCGAL/-/archive/v${sfcgal_release}/SFCGAL-v${sfcgal_release}.tar.gz" \
83+
/tmp/sfcgal.tar.gz
84+
RUN tar -xvf /tmp/sfcgal.tar.gz -C /tmp --one-top-level --strip-components 1 && \
85+
rm -rf /tmp/sfcgal.tar.gz
86+
# Install build dependencies
87+
RUN apt-get update && apt-get install -y \
88+
libcgal-dev \
89+
libboost-all-dev \
90+
libmpfr-dev \
91+
libgmp-dev \
92+
&& rm -rf /var/lib/apt/lists/*
93+
# Build from source
94+
WORKDIR /tmp/sfcgal/build
95+
RUN cmake ..
96+
RUN make -j$(nproc)
97+
RUN make install
98+
99+
FROM sfcgal as postgis
100+
# Download and extract
101+
ARG postgis_release
102+
ARG postgis_release_checksum
103+
ADD --checksum=${postgis_release_checksum} \
104+
"https://supabase-public-artifacts-bucket.s3.amazonaws.com/postgis-${postgis_release}.tar.gz" \
105+
/tmp/postgis.tar.gz
106+
RUN tar -xvf /tmp/postgis.tar.gz -C /tmp && \
107+
rm -rf /tmp/postgis.tar.gz
108+
# Install build dependencies
109+
RUN apt-get update && apt-get install -y \
110+
protobuf-c-compiler \
111+
libgeos-dev \
112+
libproj-dev \
113+
libgdal-dev \
114+
libjson-c-dev \
115+
libxml2-dev \
116+
libprotobuf-c-dev \
117+
&& rm -rf /var/lib/apt/lists/*
118+
# Build from source
119+
WORKDIR /tmp/postgis-${postgis_release}
120+
RUN ./configure --with-sfcgal
121+
RUN make -j$(nproc)
122+
# Create debian package
123+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
124+
125+
####################
126+
# 02-pgrouting.yml
127+
####################
128+
FROM builder as pgrouting
129+
# Download and extract
130+
ARG pgrouting_release
131+
ARG pgrouting_release_checksum
132+
ADD --checksum=${pgrouting_release_checksum} \
133+
"https://github.com/pgRouting/pgrouting/releases/download/v${pgrouting_release}/pgrouting-${pgrouting_release}.tar.gz" \
134+
/tmp/pgrouting.tar.gz
135+
RUN tar -xvf /tmp/pgrouting.tar.gz -C /tmp && \
136+
rm -rf /tmp/pgrouting.tar.gz
137+
# Install build dependencies
138+
RUN apt-get update && apt-get install -y \
139+
libboost-all-dev \
140+
&& rm -rf /var/lib/apt/lists/*
141+
# Build from source
142+
WORKDIR /tmp/pgrouting-${pgrouting_release}/build
143+
RUN cmake -DBUILD_HTML=OFF -DBUILD_DOXY=OFF ..
144+
RUN make -j$(nproc)
145+
# Create debian package
146+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --pkgname=pgrouting --pkgversion=${pgrouting_release} --nodoc
147+
148+
####################
149+
# 03-pgtap.yml
150+
####################
151+
FROM builder as pgtap
152+
# Download and extract
153+
ARG pgtap_release
154+
ARG pgtap_release_checksum
155+
ADD --checksum=${pgtap_release_checksum} \
156+
"https://github.com/theory/pgtap/archive/v${pgtap_release}.tar.gz" \
157+
/tmp/pgtap.tar.gz
158+
RUN tar -xvf /tmp/pgtap.tar.gz -C /tmp && \
159+
rm -rf /tmp/pgtap.tar.gz
160+
# Build from source
161+
WORKDIR /tmp/pgtap-${pgtap_release}
162+
RUN make -j$(nproc)
163+
# Create debian package
164+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
165+
166+
####################
167+
# 04-pg_cron.yml
168+
####################
169+
FROM builder as pg_cron
170+
# Download and extract
171+
ARG pg_cron_release
172+
ARG pg_cron_release_checksum
173+
ADD --checksum=${pg_cron_release_checksum} \
174+
"https://github.com/citusdata/pg_cron/archive/refs/tags/v${pg_cron_release}.tar.gz" \
175+
/tmp/pg_cron.tar.gz
176+
RUN tar -xvf /tmp/pg_cron.tar.gz -C /tmp && \
177+
rm -rf /tmp/pg_cron.tar.gz
178+
# Build from source
179+
WORKDIR /tmp/pg_cron-${pg_cron_release}
180+
RUN make -j$(nproc)
181+
# Create debian package
182+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
183+
184+
####################
185+
# 05-pgaudit.yml
186+
####################
187+
FROM builder as pgaudit
188+
# Download and extract
189+
ARG pgaudit_release
190+
ARG pgaudit_release_checksum
191+
ADD --checksum=${pgaudit_release_checksum} \
192+
"https://github.com/pgaudit/pgaudit/archive/refs/tags/${pgaudit_release}.tar.gz" \
193+
/tmp/pgaudit.tar.gz
194+
RUN tar -xvf /tmp/pgaudit.tar.gz -C /tmp && \
195+
rm -rf /tmp/pgaudit.tar.gz
196+
# Install build dependencies
197+
RUN apt-get update && apt-get install -y \
198+
libssl-dev \
199+
libkrb5-dev \
200+
&& rm -rf /var/lib/apt/lists/*
201+
# Build from source
202+
WORKDIR /tmp/pgaudit-${pgaudit_release}
203+
ENV USE_PGXS=1
204+
RUN make -j$(nproc)
205+
# Create debian package
206+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
207+
208+
####################
209+
# 06-pgjwt.yml
210+
####################
211+
FROM builder as pgjwt
212+
# Download and extract
213+
ARG pgjwt_release
214+
ADD "https://github.com/michelp/pgjwt.git#${pgjwt_release}" \
215+
/tmp/pgjwt-${pgjwt_release}
216+
# Build from source
217+
WORKDIR /tmp/pgjwt-${pgjwt_release}
218+
RUN make -j$(nproc)
219+
# Create debian package
220+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
221+
222+
####################
223+
# 07-pgsql-http.yml
224+
####################
225+
FROM builder as pgsql-http
226+
# Download and extract
227+
ARG pgsql_http_release
228+
ARG pgsql_http_release_checksum
229+
ADD --checksum=${pgsql_http_release_checksum} \
230+
"https://github.com/pramsey/pgsql-http/archive/refs/tags/v${pgsql_http_release}.tar.gz" \
231+
/tmp/pgsql-http.tar.gz
232+
RUN tar -xvf /tmp/pgsql-http.tar.gz -C /tmp && \
233+
rm -rf /tmp/pgsql-http.tar.gz
234+
# Install build dependencies
235+
RUN apt-get update && apt-get install -y \
236+
libcurl4-gnutls-dev \
237+
&& rm -rf /var/lib/apt/lists/*
238+
# Build from source
239+
WORKDIR /tmp/pgsql-http-${pgsql_http_release}
240+
RUN make -j$(nproc)
241+
# Create debian package
242+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
243+
244+
####################
245+
# 08-plpgsql_check.yml
246+
####################
247+
FROM builder as plpgsql_check
248+
# Download and extract
249+
ARG plpgsql_check_release
250+
ARG plpgsql_check_release_checksum
251+
ADD --checksum=${plpgsql_check_release_checksum} \
252+
"https://github.com/okbob/plpgsql_check/archive/refs/tags/v${plpgsql_check_release}.tar.gz" \
253+
/tmp/plpgsql_check.tar.gz
254+
RUN tar -xvf /tmp/plpgsql_check.tar.gz -C /tmp && \
255+
rm -rf /tmp/plpgsql_check.tar.gz
256+
# Install build dependencies
257+
RUN apt-get update && apt-get install -y \
258+
libicu-dev \
259+
&& rm -rf /var/lib/apt/lists/*
260+
# Build from source
261+
WORKDIR /tmp/plpgsql_check-${plpgsql_check_release}
262+
RUN make -j$(nproc)
263+
# Create debian package
264+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
265+
266+
####################
267+
# 09-pg-safeupdate.yml
268+
####################
269+
FROM builder as pg-safeupdate
270+
# Download and extract
271+
ARG pg_safeupdate_release
272+
ARG pg_safeupdate_release_checksum
273+
ADD --checksum=${pg_safeupdate_release_checksum} \
274+
"https://github.com/eradman/pg-safeupdate/archive/refs/tags/${pg_safeupdate_release}.tar.gz" \
275+
/tmp/pg-safeupdate.tar.gz
276+
RUN tar -xvf /tmp/pg-safeupdate.tar.gz -C /tmp && \
277+
rm -rf /tmp/pg-safeupdate.tar.gz
278+
# Build from source
279+
WORKDIR /tmp/pg-safeupdate-${pg_safeupdate_release}
280+
RUN make -j$(nproc)
281+
# Create debian package
282+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
283+
284+
####################
285+
# 10-timescaledb.yml
286+
####################
287+
FROM builder as timescaledb
288+
# Download and extract
289+
ARG timescaledb_release
290+
ARG timescaledb_release_checksum
291+
ADD --checksum=${timescaledb_release_checksum} \
292+
"https://github.com/timescale/timescaledb/archive/refs/tags/${timescaledb_release}.tar.gz" \
293+
/tmp/timescaledb.tar.gz
294+
RUN tar -xvf /tmp/timescaledb.tar.gz -C /tmp && \
295+
rm -rf /tmp/timescaledb.tar.gz
296+
# Build from source
297+
WORKDIR /tmp/timescaledb-${timescaledb_release}/build
298+
RUN cmake -DAPACHE_ONLY=1 ..
299+
RUN make -j$(nproc)
300+
# Create debian package
301+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --pkgname=timescaledb --pkgversion=${timescaledb_release} --nodoc
302+
303+
####################
304+
# 11-wal2json.yml
305+
####################
306+
FROM builder as wal2json
307+
# Download and extract
308+
ARG wal2json_release
309+
ARG wal2json_release_checksum
310+
ADD --checksum=${wal2json_release_checksum} \
311+
"https://github.com/eulerto/wal2json/archive/refs/tags/wal2json_${wal2json_release}.tar.gz" \
312+
/tmp/wal2json.tar.gz
313+
RUN tar -xvf /tmp/wal2json.tar.gz -C /tmp --one-top-level --strip-components 1 && \
314+
rm -rf /tmp/wal2json.tar.gz
315+
# Build from source
316+
WORKDIR /tmp/wal2json
317+
RUN make -j$(nproc)
318+
# Create debian package
319+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --pkgversion=${wal2json_release} --nodoc
320+
321+
####################
322+
# 12-pljava.yml
323+
####################
324+
FROM builder as pljava-source
325+
# Download and extract
326+
# TODO: revert to using main repo after PG15 support is merged: https://github.com/tada/pljava/pull/413
327+
ARG pljava_release=master
328+
ARG pljava_release_checksum=sha256:e99b1c52f7b57f64c8986fe6ea4a6cc09d78e779c1643db060d0ac66c93be8b6
329+
ADD --checksum=${pljava_release_checksum} \
330+
"https://github.com/supabase/pljava/archive/refs/heads/${pljava_release}.tar.gz" \
331+
/tmp/pljava.tar.gz
332+
RUN tar -xvf /tmp/pljava.tar.gz -C /tmp && \
333+
rm -rf /tmp/pljava.tar.gz
334+
# Install build dependencies
335+
RUN apt-get update && apt-get install -y \
336+
maven \
337+
default-jdk \
338+
libssl-dev \
339+
libkrb5-dev \
340+
&& rm -rf /var/lib/apt/lists/*
341+
# Build from source
342+
WORKDIR /tmp/pljava-${pljava_release}
343+
RUN mvn -T 1C clean install -Dmaven.test.skip -DskipTests -Dmaven.javadoc.skip=true
344+
# Create debian package
345+
RUN cp pljava-packaging/target/pljava-pg${postgres_major}.jar /tmp/
346+
347+
FROM builder as pljava
348+
# Download pre-built packages
349+
RUN apt-get update && apt-get install -y --download-only \
350+
default-jdk-headless \
351+
postgresql-${postgres_major}-pljava \
352+
&& rm -rf /var/lib/apt/lists/*
353+
RUN mv /var/cache/apt/archives/*.deb /tmp/
354+
355+
####################
356+
# 13-plv8.yml
357+
####################
358+
FROM builder as plv8
359+
# Download and extract
360+
ARG plv8_release
361+
ARG plv8_release_checksum
362+
ADD --checksum=${plv8_release_checksum} \
363+
"https://github.com/plv8/plv8/archive/refs/tags/v${plv8_release}.tar.gz" \
364+
/tmp/plv8.tar.gz
365+
RUN tar -xvf /tmp/plv8.tar.gz -C /tmp && \
366+
rm -rf /tmp/plv8.tar.gz
367+
# Install build dependencies
368+
RUN apt-get update && apt-get install -y \
369+
ccache \
370+
pkg-config \
371+
ninja-build \
372+
clang \
373+
git \
374+
libtinfo5 \
375+
&& rm -rf /var/lib/apt/lists/*
376+
COPY --from=public.ecr.aws/t3w2s2c9/postgres-buildcache:latest /ccache /ccache
377+
# Build from source
378+
WORKDIR /tmp/plv8-${plv8_release}
379+
ENV DOCKER=1
380+
ENV CCACHE_DIR=/ccache
381+
ENV PATH=/usr/lib/ccache:$PATH
382+
RUN make generate_upgrades
383+
RUN make v8
384+
# Create debian package
385+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
386+
387+
####################
388+
# 14-pg_plan_filter.yml
389+
####################
390+
FROM builder as pg_plan_filter
391+
# Download and extract
392+
ARG pg_plan_filter_release
393+
ADD "https://github.com/pgexperts/pg_plan_filter.git#${pg_plan_filter_release}" \
394+
/tmp/pg_plan_filter-${pg_plan_filter_release}
395+
# Build from source
396+
WORKDIR /tmp/pg_plan_filter-${pg_plan_filter_release}
397+
RUN make -j$(nproc)
398+
# Create debian package
399+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
400+
401+
####################
402+
# 15-pg_net.yml
403+
####################
404+
FROM builder as pg_net
405+
# Download and extract
406+
ARG pg_net_release
407+
ARG pg_net_release_checksum
408+
ADD --checksum=${pg_net_release_checksum} \
409+
"https://github.com/supabase/pg_net/archive/refs/tags/v${pg_net_release}.tar.gz" \
410+
/tmp/pg_net.tar.gz
411+
RUN tar -xvf /tmp/pg_net.tar.gz -C /tmp && \
412+
rm -rf /tmp/pg_net.tar.gz
413+
# Install build dependencies
414+
RUN apt-get update && apt-get install -y \
415+
libcurl4-gnutls-dev \
416+
&& rm -rf /var/lib/apt/lists/*
417+
# Build from source
418+
WORKDIR /tmp/pg_net-${pg_net_release}
419+
RUN make -j$(nproc)
420+
# Create debian package
421+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
422+
423+
####################
424+
# 16-rum.yml
425+
####################
426+
FROM builder as rum
427+
# Download and extract
428+
ARG rum_release
429+
ARG rum_release_checksum
430+
ADD --checksum=${rum_release_checksum} \
431+
"https://github.com/postgrespro/rum/archive/refs/tags/${rum_release}.tar.gz" \
432+
/tmp/rum.tar.gz
433+
RUN tar -xvf /tmp/rum.tar.gz -C /tmp && \
434+
rm -rf /tmp/rum.tar.gz
435+
# Install build dependencies
436+
RUN apt-get update && apt-get install -y \
437+
systemtap-sdt-dev \
438+
&& rm -rf /var/lib/apt/lists/*
439+
# Build from source
440+
WORKDIR /tmp/rum-${rum_release}
441+
ENV USE_PGXS=1
442+
RUN make -j$(nproc)
443+
# Create debian package
444+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
445+
446+
####################
447+
# 17-pg_hashids.yml
448+
####################
449+
FROM builder as pg_hashids
450+
# Download and extract
451+
ARG pg_hashids_release
452+
ADD "https://github.com/iCyberon/pg_hashids.git#${pg_hashids_release}" \
453+
/tmp/pg_hashids-${pg_hashids_release}
454+
# Build from source
455+
WORKDIR /tmp/pg_hashids-${pg_hashids_release}
456+
RUN make -j$(nproc)
457+
# Create debian package
458+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
459+
460+
####################
461+
# 18-pgsodium.yml
462+
####################
463+
FROM builder as libsodium
464+
# Download and extract
465+
ARG libsodium_release
466+
ARG libsodium_release_checksum
467+
ADD --checksum=${libsodium_release_checksum} \
468+
"https://download.libsodium.org/libsodium/releases/libsodium-${libsodium_release}.tar.gz" \
469+
/tmp/libsodium.tar.gz
470+
RUN tar -xvf /tmp/libsodium.tar.gz -C /tmp && \
471+
rm -rf /tmp/libsodium.tar.gz
472+
# Build from source
473+
WORKDIR /tmp/libsodium-${libsodium_release}
474+
RUN ./configure
475+
RUN make -j$(nproc)
476+
RUN make install
477+
478+
FROM libsodium as pgsodium
479+
# Download and extract
480+
ARG pgsodium_release
481+
ARG pgsodium_release_checksum
482+
ADD --checksum=${pgsodium_release_checksum} \
483+
"https://github.com/michelp/pgsodium/archive/refs/tags/v${pgsodium_release}.tar.gz" \
484+
/tmp/pgsodium.tar.gz
485+
RUN tar -xvf /tmp/pgsodium.tar.gz -C /tmp && \
486+
rm -rf /tmp/pgsodium.tar.gz
487+
# Build from source
488+
WORKDIR /tmp/pgsodium-${pgsodium_release}
489+
RUN make -j$(nproc)
490+
# Create debian package
491+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
492+
RUN apt-get update && apt-get install -y --download-only \
493+
libsodium23 \
494+
&& rm -rf /var/lib/apt/lists/*
495+
RUN mv /var/cache/apt/archives/*.deb /tmp/
496+
497+
####################
498+
# 19-pg_graphql.yml
499+
####################
500+
FROM builder as pg_graphql
501+
# Download package archive
502+
ARG pg_graphql_release
503+
ADD "https://github.com/supabase/pg_graphql/releases/download/v${pg_graphql_release}/pg_graphql-v${pg_graphql_release}-pg${postgres_major}-${TARGETARCH}-linux-gnu.deb" \
504+
/tmp/pg_graphql.deb
505+
506+
####################
507+
# 20-pg_stat_monitor.yml
508+
####################
509+
FROM builder as pg_stat_monitor
510+
# Download and extract
511+
ARG pg_stat_monitor_release
512+
ARG pg_stat_monitor_release_checksum
513+
ADD --checksum=${pg_stat_monitor_release_checksum} \
514+
"https://github.com/percona/pg_stat_monitor/archive/refs/tags/${pg_stat_monitor_release}.tar.gz" \
515+
/tmp/pg_stat_monitor.tar.gz
516+
RUN tar -xvf /tmp/pg_stat_monitor.tar.gz -C /tmp && \
517+
rm -rf /tmp/pg_stat_monitor.tar.gz
518+
# Build from source
519+
WORKDIR /tmp/pg_stat_monitor-${pg_stat_monitor_release}
520+
ENV USE_PGXS=1
521+
RUN make -j$(nproc)
522+
# Create debian package
523+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
524+
525+
####################
526+
# 21-auto_explain.yml
527+
####################
528+
529+
####################
530+
# 22-pg_jsonschema.yml
531+
####################
532+
FROM builder as pg_jsonschema
533+
# Download package archive
534+
ARG pg_jsonschema_release
535+
ADD "https://github.com/supabase/pg_jsonschema/releases/download/v${pg_jsonschema_release}/pg_jsonschema-v${pg_jsonschema_release}-pg${postgres_major}-${TARGETARCH}-linux-gnu.deb" \
536+
/tmp/pg_jsonschema.deb
537+
538+
####################
539+
# 23-vault.yml
540+
####################
541+
FROM builder as vault
542+
# Download and extract
543+
ARG vault_release
544+
ARG vault_release_checksum
545+
ADD --checksum=${vault_release_checksum} \
546+
"https://github.com/supabase/vault/archive/refs/tags/v${vault_release}.tar.gz" \
547+
/tmp/vault.tar.gz
548+
RUN tar -xvf /tmp/vault.tar.gz -C /tmp && \
549+
rm -rf /tmp/vault.tar.gz
550+
# Build from source
551+
WORKDIR /tmp/vault-${vault_release}
552+
RUN make -j$(nproc)
553+
# Create debian package
554+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
555+
556+
####################
557+
# 24-pgroonga.yml
558+
####################
559+
FROM builder as groonga
560+
# Download and extract
561+
ARG groonga_release
562+
ARG groonga_release_checksum
563+
ADD --checksum=${groonga_release_checksum} \
564+
"https://packages.groonga.org/source/groonga/groonga-${groonga_release}.tar.gz" \
565+
/tmp/groonga.tar.gz
566+
RUN tar -xvf /tmp/groonga.tar.gz -C /tmp && \
567+
rm -rf /tmp/groonga.tar.gz
568+
# Build from source
569+
WORKDIR /tmp/groonga-${groonga_release}
570+
RUN ./configure
571+
RUN make -j$(nproc)
572+
RUN make install
573+
574+
FROM groonga as pgroonga-source
575+
# Download and extract
576+
ARG pgroonga_release
577+
ARG pgroonga_release_checksum
578+
ADD --checksum=${pgroonga_release_checksum} \
579+
"https://packages.groonga.org/source/pgroonga/pgroonga-${pgroonga_release}.tar.gz" \
580+
/tmp/pgroonga.tar.gz
581+
RUN tar -xvf /tmp/pgroonga.tar.gz -C /tmp && \
582+
rm -rf /tmp/pgroonga.tar.gz
583+
# Install build dependencies
584+
RUN apt-get update && apt-get install -y \
585+
pkg-config \
586+
&& rm -rf /var/lib/apt/lists/*
587+
# Build from source
588+
WORKDIR /tmp/pgroonga-${pgroonga_release}
589+
RUN make -j$(nproc)
590+
# Create debian package
591+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
592+
593+
FROM builder as pgroonga
594+
# Download pre-built packages
595+
ADD "https://packages.groonga.org/debian/groonga-apt-source-latest-bullseye.deb" /tmp/source.deb
596+
RUN apt-get update && apt-get install -y \
597+
/tmp/source.deb \
598+
&& rm -rf /var/lib/apt/lists/*
599+
RUN rm /tmp/source.deb
600+
RUN apt-get update && apt-get install -y --download-only \
601+
postgresql-${postgres_major}-pgdg-pgroonga \
602+
&& rm -rf /var/lib/apt/lists/*
603+
RUN mv /var/cache/apt/archives/*.deb /tmp/
604+
605+
####################
606+
# 25-wrappers.yml
607+
####################
608+
FROM builder as wrappers
609+
# Download package archive
610+
ARG wrappers_release
611+
ADD "https://github.com/supabase/wrappers/releases/download/v${wrappers_release}/wrappers-v${wrappers_release}-pg${postgres_major}-${TARGETARCH}-linux-gnu.deb" \
612+
/tmp/wrappers.deb
613+
614+
####################
615+
# 26-hypopg.yml
616+
####################
617+
FROM builder as hypopg
618+
# Download and extract
619+
ARG hypopg_release
620+
ARG hypopg_release_checksum
621+
ADD --checksum=${hypopg_release_checksum} \
622+
"https://github.com/HypoPG/hypopg/archive/refs/tags/${hypopg_release}.tar.gz" \
623+
/tmp/hypopg.tar.gz
624+
RUN tar -xvf /tmp/hypopg.tar.gz -C /tmp && \
625+
rm -rf /tmp/hypopg.tar.gz
626+
# Build from source
627+
WORKDIR /tmp/hypopg-${hypopg_release}
628+
RUN make -j$(nproc)
629+
# Create debian package
630+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
631+
632+
####################
633+
# 27-pg_repack.yml
634+
####################
635+
FROM builder as pg_repack
636+
ARG pg_repack_release
637+
ARG pg_repack_release_checksum
638+
ADD --checksum=${pg_repack_release_checksum} \
639+
"https://github.com/reorg/pg_repack/archive/refs/tags/ver_${pg_repack_release}.tar.gz" \
640+
/tmp/pg_repack.tar.gz
641+
RUN tar -xvf /tmp/pg_repack.tar.gz -C /tmp && \
642+
rm -rf /tmp/pg_repack.tar.gz
643+
# Install build dependencies
644+
RUN apt-get update && apt-get install -y \
645+
liblz4-dev \
646+
libz-dev \
647+
libzstd-dev \
648+
libreadline-dev \
649+
&& rm -rf /var/lib/apt/lists/*
650+
# Build from source
651+
WORKDIR /tmp/pg_repack-ver_${pg_repack_release}
652+
ENV USE_PGXS=1
653+
RUN make -j$(nproc)
654+
# Create debian package
655+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --pkgversion=${pg_repack_release} --nodoc
656+
657+
####################
658+
# 28-pgvector.yml
659+
####################
660+
FROM builder as pgvector
661+
ARG pgvector_release
662+
ARG pgvector_release_checksum
663+
ADD --checksum=${pgvector_release_checksum} \
664+
"https://github.com/pgvector/pgvector/archive/refs/tags/v${pgvector_release}.tar.gz" \
665+
/tmp/pgvector.tar.gz
666+
RUN tar -xvf /tmp/pgvector.tar.gz -C /tmp && \
667+
rm -rf /tmp/pgvector.tar.gz
668+
# Build from source
669+
WORKDIR /tmp/pgvector-${pgvector_release}
670+
RUN make -j$(nproc)
671+
# Create debian package
672+
RUN checkinstall -D --install=no --fstrans=no --pakdir=/tmp --nodoc
673+
674+
####################
675+
# Build final image
676+
####################
677+
FROM base as production
678+
679+
# tasks/docker/setup.yml
680+
COPY files/postgresql_config/postgresql.conf.j2 /etc/postgresql/postgresql.conf
681+
COPY files/postgresql_config/pg_hba.conf.j2 /etc/postgresql/pg_hba.conf
682+
COPY files/postgresql_config/pg_ident.conf.j2 /etc/postgresql/pg_ident.conf
683+
684+
# tasks/setup-extensions.yml
685+
COPY --from=sfcgal /usr/local/lib/libSFCGAL.* /usr/local/lib/
686+
COPY --from=postgis /tmp/*.deb /tmp/
687+
COPY --from=pgrouting /tmp/*.deb /tmp/
688+
COPY --from=pgtap /tmp/*.deb /tmp/
689+
COPY --from=pg_cron /tmp/*.deb /tmp/
690+
COPY --from=pgaudit /tmp/*.deb /tmp/
691+
COPY --from=pgjwt /tmp/*.deb /tmp/
692+
COPY --from=pgsql-http /tmp/*.deb /tmp/
693+
COPY --from=plpgsql_check /tmp/*.deb /tmp/
694+
COPY --from=pg-safeupdate /tmp/*.deb /tmp/
695+
COPY --from=timescaledb /tmp/*.deb /tmp/
696+
COPY --from=wal2json /tmp/*.deb /tmp/
697+
COPY --from=pljava /tmp/*.deb /tmp/
698+
# COPY --from=plv8 /tmp/*.deb /tmp/
699+
COPY --from=pg_plan_filter /tmp/*.deb /tmp/
700+
COPY --from=pg_net /tmp/*.deb /tmp/
701+
COPY --from=rum /tmp/*.deb /tmp/
702+
COPY --from=pgsodium /tmp/*.deb /tmp/
703+
COPY --from=pg_hashids /tmp/*.deb /tmp/
704+
COPY --from=pg_graphql /tmp/*.deb /tmp/
705+
COPY --from=pg_stat_monitor /tmp/*.deb /tmp/
706+
COPY --from=pg_jsonschema /tmp/*.deb /tmp/
707+
COPY --from=vault /tmp/*.deb /tmp/
708+
COPY --from=pgroonga /tmp/*.deb /tmp/
709+
COPY --from=wrappers /tmp/*.deb /tmp/
710+
COPY --from=hypopg /tmp/*.deb /tmp/
711+
COPY --from=pg_repack /tmp/*.deb /tmp/
712+
COPY --from=pgvector /tmp/*.deb /tmp/
713+
714+
ENV DEBIAN_FRONTEND=noninteractive
715+
RUN apt-get update && apt-get install -y \
716+
/tmp/*.deb \
717+
&& rm -rf /var/lib/apt/lists/* /tmp/*
718+
719+
# tasks/docker/finalize.yml
720+
COPY --chown=postgres:postgres files/postgresql_config/postgresql-stdout-log.conf /etc/postgresql/logging.conf
721+
COPY --chown=postgres:postgres files/pgsodium_getkey_urandom.sh.j2 /usr/lib/postgresql/${postgres_major}/bin/pgsodium_getkey.sh
722+
COPY files/pgbouncer_config/pgbouncer_auth_schema.sql /docker-entrypoint-initdb.d/00-schema.sql
723+
COPY files/stat_extension.sql /docker-entrypoint-initdb.d/01-extension.sql
724+
725+
RUN sed -i "s/#unix_socket_directories = '\/tmp'/unix_socket_directories = '\/var\/run\/postgresql'/g" /etc/postgresql/postgresql.conf && \
726+
echo "cron.database_name = 'postgres'" >> /etc/postgresql/postgresql.conf && \
727+
echo "pljava.libjvm_location = '/usr/lib/jvm/java-11-openjdk-${TARGETARCH}/lib/server/libjvm.so'" >> /etc/postgresql/postgresql.conf && \
728+
echo "pgsodium.getkey_script= '/usr/lib/postgresql/${postgres_major}/bin/pgsodium_getkey.sh'" >> /etc/postgresql/postgresql.conf && \
729+
echo 'auto_explain.log_min_duration = 10s' >> /etc/postgresql/postgresql.conf
730+
731+
ENV POSTGRES_HOST=/var/run/postgresql
732+
733+
HEALTHCHECK --interval=2s --timeout=2s --retries=10 CMD pg_isready -U postgres -h localhost

0 commit comments

Comments
 (0)
Please sign in to comment.