|
| 1 | +FROM debian:bookworm-slim |
| 2 | + |
| 3 | +ENV DEBIAN_FRONTEND=noninteractive |
| 4 | +ENV PG_MAJOR=17 |
| 5 | + |
| 6 | +# Install system dependencies |
| 7 | +RUN apt-get update \ |
| 8 | + && apt-get install -y --no-install-recommends \ |
| 9 | + ca-certificates curl gnupg apt-transport-https \ |
| 10 | + build-essential git pkg-config \ |
| 11 | + libreadline-dev zlib1g-dev flex bison \ |
| 12 | + libxml2-dev libxslt-dev libssl-dev \ |
| 13 | + libxml2-utils xsltproc ccache \ |
| 14 | + clang libclang-dev \ |
| 15 | + protobuf-compiler libprotobuf-dev \ |
| 16 | + sudo \ |
| 17 | + && update-ca-certificates \ |
| 18 | + && sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list' \ |
| 19 | + && curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg \ |
| 20 | + && apt-get update \ |
| 21 | + && apt-get install -y --no-install-recommends \ |
| 22 | + postgresql-$PG_MAJOR \ |
| 23 | + postgresql-server-dev-$PG_MAJOR \ |
| 24 | + postgresql-common \ |
| 25 | + && apt-get clean \ |
| 26 | + && rm -rf /var/lib/apt/lists/* |
| 27 | + |
| 28 | +# Create vscode user with sudo access |
| 29 | +RUN groupadd --gid 1000 vscode \ |
| 30 | + && useradd --uid 1000 --gid 1000 -m -s /bin/bash vscode \ |
| 31 | + && echo "vscode ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/vscode \ |
| 32 | + && chmod 0440 /etc/sudoers.d/vscode \ |
| 33 | + && chown -R vscode:vscode /usr/share/postgresql /usr/lib/postgresql |
| 34 | + |
| 35 | +# Switch to vscode user |
| 36 | +USER vscode |
| 37 | +WORKDIR /home/vscode |
| 38 | + |
| 39 | +# Set up Rust environment for vscode user |
| 40 | +ENV RUSTUP_HOME=/home/vscode/.rustup |
| 41 | +ENV CARGO_HOME=/home/vscode/.cargo |
| 42 | +ENV PATH="/home/vscode/.cargo/bin:/usr/lib/postgresql/$PG_MAJOR/bin:${PATH}" |
| 43 | + |
| 44 | +# Install Rust |
| 45 | +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain stable \ |
| 46 | + && . "$CARGO_HOME/env" \ |
| 47 | + && rustup component add clippy rustfmt rust-src |
| 48 | + |
| 49 | +# Install cargo-pgrx |
| 50 | +ENV CARGO_PGRX_VERSION=0.16.1 |
| 51 | +RUN . "$CARGO_HOME/env" \ |
| 52 | + && cargo install --force --locked cargo-pgrx@"${CARGO_PGRX_VERSION}" |
| 53 | + |
| 54 | +# Initialize pgrx |
| 55 | +RUN . "$CARGO_HOME/env" \ |
| 56 | + && cargo pgrx init --pg$PG_MAJOR $(which pg_config) |
| 57 | + |
0 commit comments