From 9eaaca4834c5dd782fae1fd253ab24eea50ed7fc Mon Sep 17 00:00:00 2001 From: Tristan Partin Date: Mon, 13 Jan 2025 10:35:28 -0600 Subject: [PATCH] Add pg_search to the compute images pg_search is an extension by ParadeDB offering text search capabilities. Link: https://paradedb.com Signed-off-by: Tristan Partin --- .github/workflows/build_and_test.yml | 2 ++ compute/compute-node.Dockerfile | 52 ++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index e588fc5a0e..4686d61ee5 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -636,6 +636,8 @@ jobs: file: compute/compute-node.Dockerfile cache-from: type=registry,ref=cache.neon.build/compute-node-${{ matrix.version.pg }}:cache-${{ matrix.version.debian }}-${{ matrix.arch }} cache-to: ${{ github.ref_name == 'main' && format('type=registry,ref=cache.neon.build/compute-node-{0}:cache-{1}-{2},mode=max', matrix.version.pg, matrix.version.debian, matrix.arch) || '' }} + secrets: | + PG_SEARCH_ENTERPRISE_GITHUB_PAT=${{ secrets.PG_SEARCH_ENTERPRISE_GITHUB_PAT }} tags: | neondatabase/compute-node-${{ matrix.version.pg }}:${{ needs.tag.outputs.build-tag }}-${{ matrix.version.debian }}-${{ matrix.arch }} diff --git a/compute/compute-node.Dockerfile b/compute/compute-node.Dockerfile index 7ac6e9bc58..53792726ae 100644 --- a/compute/compute-node.Dockerfile +++ b/compute/compute-node.Dockerfile @@ -883,6 +883,39 @@ RUN curl -sSO https://static.rust-lang.org/rustup/dist/$(uname -m)-unknown-linux USER root +######################################################################################### +# +# Layer "rust extensions pgrx12.7" +# +# Essentially, this layer is the same as above, but instead of pgrx 0.12.6, it +# uses 0.12.7. 0.12.7, specifically, is necessary for building pg_search from +# ParadeDB, according to the ParadeDB team. Eventually, we can remove this layer +# when ParadeDB gets various pgrx changes upstreamed. +# +######################################################################################### +FROM build-deps AS rust-extensions-build-pgrx12_7 +ARG PG_VERSION +COPY --from=pg-build /usr/local/pgsql/ /usr/local/pgsql/ + +RUN apt update && \ + apt install --no-install-recommends --no-install-suggests -y curl libclang-dev && \ + apt clean && rm -rf /var/lib/apt/lists/* && \ + useradd -ms /bin/bash nonroot -b /home + +ENV HOME=/home/nonroot +ENV PATH="/home/nonroot/.cargo/bin:/usr/local/pgsql/bin/:$PATH" +USER nonroot +WORKDIR /home/nonroot + +RUN curl -sSO https://static.rust-lang.org/rustup/dist/$(uname -m)-unknown-linux-gnu/rustup-init && \ + chmod +x rustup-init && \ + ./rustup-init -y --no-modify-path --profile minimal --default-toolchain stable && \ + rm rustup-init && \ + cargo install --locked --version 0.12.7 cargo-pgrx && \ + /bin/bash -c 'cargo pgrx init --pg${PG_VERSION:1}=/usr/local/pgsql/bin/pg_config' + +USER root + ######################################################################################### # # Layers "pg-onnx-build" and "pgrag-pg-build" @@ -1155,6 +1188,24 @@ RUN wget https://github.com/reorg/pg_repack/archive/refs/tags/ver_1.5.2.tar.gz - make -j $(getconf _NPROCESSORS_ONLN) && \ make -j $(getconf _NPROCESSORS_ONLN) install +######################################################################################### +# +# Layer "pg_search-build" +# compile "pg_search" extension +# +######################################################################################### + +FROM rust-extensions-build-pgrx12_7 AS pg-search-build +ARG PG_VERSION +ARG PARADEDB_TAG=v0.14.1 + +RUN --mount=type=secret,id=PG_SEARCH_ENTERPRISE_GITHUB_PAT \ + git clone --recurse-submodules --depth 1 --branch ${PARADEDB_TAG} https://$(cat /run/secrets/PG_SEARCH_ENTERPRISE_GITHUB_PAT)@github.com/paradedb/paradedb-enterprise.git pg_search-src && \ + cd pg_search-src && \ + cargo pgrx install --package pg_search --no-default-features --features unsafe-postgres --release && \ + sed -i 's/superuser = false/superuser = true/g' /usr/local/pgsql/share/extension/pg_search.control && \ + echo "trusted = true" >> /usr/local/pgsql/share/extension/pg_search.control + ######################################################################################### # # Layer "neon-pg-ext-build" @@ -1202,6 +1253,7 @@ COPY --from=pg-ivm-build /usr/local/pgsql/ /usr/local/pgsql/ COPY --from=pg-partman-build /usr/local/pgsql/ /usr/local/pgsql/ COPY --from=pg-mooncake-build /usr/local/pgsql/ /usr/local/pgsql/ COPY --from=pg-repack-build /usr/local/pgsql/ /usr/local/pgsql/ +COPY --from=pg-search-build /usr/local/pgsql/ /usr/local/pgsql/ COPY pgxn/ pgxn/ RUN make -j $(getconf _NPROCESSORS_ONLN) \