ARG PG_MAJOR=17

FROM rust:1-bookworm AS builder

ARG PG_MAJOR=17
ARG DELTAX_REF=main

RUN apt-get update && apt-get install -y --no-install-recommends \
        ca-certificates \
        clang \
        curl \
        git \
        gnupg2 \
        libclang-dev \
        libssl-dev \
        lsb-release \
        pkg-config \
    && echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" \
        > /etc/apt/sources.list.d/pgdg.list \
    && curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc \
        | gpg --dearmor -o /etc/apt/trusted.gpg.d/pgdg.gpg \
    && apt-get update && apt-get install -y --no-install-recommends \
        postgresql-${PG_MAJOR} \
        postgresql-server-dev-${PG_MAJOR} \
    && rm -rf /var/lib/apt/lists/*

ENV CARGO_HOME=/usr/local/cargo
ENV PATH="/usr/lib/postgresql/${PG_MAJOR}/bin:${PATH}"
ENV PG_MAJOR=${PG_MAJOR}
ENV USER=builder

RUN rustup component add clippy rustfmt llvm-tools-preview \
    && cargo install cargo-pgrx --version "0.17.0" --locked

RUN useradd -m -s /bin/bash builder \
    && mkdir -p /build \
    && chown -R builder:builder /build /usr/local/cargo \
        /usr/share/postgresql/${PG_MAJOR}/extension \
        /usr/lib/postgresql/${PG_MAJOR}/lib

USER builder
RUN cargo pgrx init --pg${PG_MAJOR}=/usr/lib/postgresql/${PG_MAJOR}/bin/pg_config

WORKDIR /build
RUN git clone --depth 1 https://github.com/xataio/deltax.git pg_deltax \
    && cd pg_deltax \
    && git fetch --depth 1 origin "${DELTAX_REF}" \
    && git checkout FETCH_HEAD \
    && cargo pgrx package \
        --pg-config /usr/lib/postgresql/${PG_MAJOR}/bin/pg_config \
        --features pg${PG_MAJOR} \
        --no-default-features

FROM postgres:${PG_MAJOR}-bookworm

ARG PG_MAJOR=17

COPY --from=builder /build/pg_deltax/target/release/pg_deltax-pg${PG_MAJOR}/ /
