FROM rust:1-bookworm ARG PGRX_VERSION=0.18.0 ARG PG_VERSIONS="14 15 16 17 18" ARG RUN_PGRX_SQL=1 SHELL ["/bin/bash", "-o", "pipefail", "-c"] RUN apt-get update \ && apt-get 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 update \ && apt-get install -y --no-install-recommends \ clang \ libclang-dev \ pkg-config \ postgresql-client-common \ postgresql-common \ postgresql-14 postgresql-server-dev-14 \ postgresql-15 postgresql-server-dev-15 \ postgresql-16 postgresql-server-dev-16 \ postgresql-17 postgresql-server-dev-17 \ postgresql-18 postgresql-server-dev-18 \ && rm -rf /var/lib/apt/lists/* RUN cargo install cargo-pgrx --version "${PGRX_VERSION}" --locked RUN useradd --create-home --shell /bin/bash pggraph \ && for pg in ${PG_VERSIONS}; do \ chown -R pggraph:pggraph "/usr/lib/postgresql/${pg}/lib" "/usr/share/postgresql/${pg}/extension"; \ done ENV CARGO_HOME=/home/pggraph/.cargo ENV RUSTUP_HOME=/home/pggraph/.rustup ENV USER=pggraph ENV LOGNAME=pggraph ENV PATH=/usr/local/cargo/bin:/home/pggraph/.cargo/bin:${PATH} WORKDIR /src/graph COPY --chown=pggraph:pggraph graph/ /src/graph/ RUN chown -R pggraph:pggraph /src/graph USER pggraph RUN set -euo pipefail; \ for pg in ${PG_VERSIONS}; do \ echo "==> cargo pgrx init pg${pg}"; \ cargo pgrx init "--pg${pg}=/usr/lib/postgresql/${pg}/bin/pg_config"; \ done RUN set -euo pipefail; \ for pg in ${PG_VERSIONS}; do \ feature="pg${pg}"; \ echo "==> cargo test --features ${feature}"; \ cargo test --no-default-features --features "${feature}"; \ if [[ "${RUN_PGRX_SQL}" == "1" ]]; then \ echo "==> cargo pgrx test ${feature}"; \ cargo pgrx test "${feature}"; \ fi; \ done