ARG RUST_IMAGE=rust:1.96.0-bookworm@sha256:5e2214abe154fe26e39f64488952e5c991eeed1d6d6da7cc8381ae83927f0cfc ARG POSTGRES_IMAGE=postgres:17-bookworm@sha256:4f736ae292687621d4dbe0d499ffd024a36bd2ee7d8ca6f2ccd4c800f047b394 FROM ${RUST_IMAGE} AS builder ARG PG_MAJOR=17 ARG PGRX_VERSION=0.19.1 RUN case "${PG_MAJOR}" in \ 17|18) ;; \ *) echo "pgContext supports PostgreSQL 17 and 18 (received PG_MAJOR=${PG_MAJOR})" >&2; exit 2 ;; \ esac RUN apt-get -o Acquire::Retries=3 update \ && apt-get -o Acquire::Retries=3 install -y --no-install-recommends \ ca-certificates curl gnupg lsb-release \ && curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc \ | gpg --dearmor -o /usr/share/keyrings/postgresql.gpg \ && echo "deb [signed-by=/usr/share/keyrings/postgresql.gpg] http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \ > /etc/apt/sources.list.d/pgdg.list \ && apt-get -o Acquire::Retries=3 update \ && apt-get -o Acquire::Retries=3 install -y --no-install-recommends \ postgresql-${PG_MAJOR} postgresql-server-dev-${PG_MAJOR} \ && rm -rf /var/lib/apt/lists/* RUN cargo install cargo-pgrx --version ${PGRX_VERSION} --locked WORKDIR /src COPY . /src RUN cargo pgrx init --pg${PG_MAJOR}=/usr/lib/postgresql/${PG_MAJOR}/bin/pg_config \ && cargo pgrx package -p context-pg \ --pg-config=/usr/lib/postgresql/${PG_MAJOR}/bin/pg_config \ --out-dir=/package \ --no-default-features \ --features=pg${PG_MAJOR} \ && install -m 0644 pgcontext_pgvector.control \ /package/usr/share/postgresql/${PG_MAJOR}/extension/pgcontext_pgvector.control \ && install -m 0644 sql/pgcontext--0.1.0--0.2.0.sql \ /package/usr/share/postgresql/${PG_MAJOR}/extension/pgcontext--0.1.0--0.2.0.sql \ && install -m 0644 sql/pgcontext_pgvector--0.2.0.sql \ /package/usr/share/postgresql/${PG_MAJOR}/extension/pgcontext_pgvector--0.2.0.sql FROM ${POSTGRES_IMAGE} ARG PG_MAJOR=17 ARG VERSION=0.2.0 ARG REVISION=unknown LABEL org.opencontainers.image.source="https://github.com/evokoa/pgcontext" \ org.opencontainers.image.description="PostgreSQL ${PG_MAJOR} with pgContext installed" \ org.opencontainers.image.licenses="Apache-2.0" \ org.opencontainers.image.version="${VERSION}" \ org.opencontainers.image.revision="${REVISION}" \ org.opencontainers.image.postgresql.major="${PG_MAJOR}" RUN server_major="$(postgres --version | awk '{print $3}' | cut -d. -f1)" \ && test "${server_major}" = "${PG_MAJOR}" \ || { echo "POSTGRES_IMAGE major ${server_major} does not match PG_MAJOR=${PG_MAJOR}" >&2; exit 2; } COPY --from=builder /package/usr/share/postgresql/${PG_MAJOR}/extension/ \ /usr/share/postgresql/${PG_MAJOR}/extension/ COPY --from=builder /package/usr/lib/postgresql/${PG_MAJOR}/lib/ \ /usr/lib/postgresql/${PG_MAJOR}/lib/ COPY release/docker/init/01-pgcontext.sql /docker-entrypoint-initdb.d/ ENV POSTGRES_DB=pgcontext HEALTHCHECK --interval=5s --timeout=3s --start-period=10s --retries=20 \ CMD pg_isready -U "${POSTGRES_USER:-postgres}" -d "${POSTGRES_DB:-pgcontext}" || exit 1