11# ###########################
22# Stage 1: builder
33# ###########################
4- FROM rust:slim-bullseye AS builder
4+ FROM rust:slim-bookworm AS builder
55
66# ---------------------------------------------------------------------
77# Build-time arguments & environment variables
@@ -14,24 +14,20 @@ ARG REPO_PATH=/repo
1414ARG TARGETPLATFORM
1515ARG TARGETARCH
1616
17+ ENV UV_PYTHON=3.10
1718ENV PROTOC_VERSION=3.19.3
1819ENV CFSSL_VERSION=1.6.5
1920ENV PATH=/home/${DOCKER_USER}/.local/bin:/opt/bitcoin/bin:/usr/local/bin:$PATH
2021ENV CARGO_TARGET_DIR=/tmp/target
21- ENV REPO=${REPO_PATH}
2222
2323# ---------------------------------------------------------------------
2424# Base packages required for building
2525# ---------------------------------------------------------------------
2626RUN apt-get update && \
2727 DEBIAN_FRONTEND=noninteractive \
2828 apt-get install -y --no-install-recommends \
29- python3 python3-venv python3-pip \
30- python3-dev \
31- libpq-dev \
3229 build-essential \
33- git \
34- curl wget unzip sudo ca-certificates \
30+ git curl wget unzip sudo \
3531 && rm -rf /var/lib/apt/lists/*
3632
3733# ---------------------------------------------------------------------
@@ -114,7 +110,7 @@ RUN cargo build --release \
114110WORKDIR ${REPO_PATH}/libs/gl-testserver
115111COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
116112RUN --mount=type=cache,target=/root/.cache/uv \
117- uv lock && uv sync --locked -v --no-editable
113+ uv lock && uv sync --locked -v --all-packages --dev
118114
119115# ---------------------------------------------------------------------
120116# Collect all artifacts into /opt/stage
@@ -134,7 +130,7 @@ RUN mkdir -p /opt/stage/bin /opt/stage/bitcoin && \
134130# ###########################
135131# Stage 2: runtime
136132# ###########################
137- FROM ubuntu:22 .04
133+ FROM ubuntu:24 .04 AS final
138134
139135# ---------------------------------------------------------------------
140136# Minimal runtime packages
@@ -145,6 +141,9 @@ RUN apt-get update && \
145141 python3 \
146142 libpq5 \
147143 curl \
144+ openssl \
145+ ca-certificates \
146+ build-essential \
148147 && apt-get clean && rm -rf /var/lib/apt/lists/*
149148
150149# ---------------------------------------------------------------------
@@ -155,16 +154,26 @@ ARG UID=0
155154ARG DOCKER_USER=dev
156155ARG REPO_PATH=/repo
157156
157+ ENV UV_PYTHON=3.10
158158ENV PATH=/home/${DOCKER_USER}/.local/bin:/usr/local/bin:/opt/bitcoin/bin:$PATH
159- ENV REPO =${REPO_PATH}
159+ ENV REPO_PATH =${REPO_PATH}
160160ENV GL_TESTING_IGNORE_HASH=False
161161
162162# ---------------------------------------------------------------------
163163# Create runtime user
164164# ---------------------------------------------------------------------
165- RUN groupadd -g ${GID} -o ${DOCKER_USER} && \
166- useradd -m -u ${UID} -g ${GID} -s /bin/bash ${DOCKER_USER}
165+ RUN if getent passwd $UID > /dev/null; then \
166+ existing_user=$(getent passwd $UID | cut -d: -f1); \
167+ if [ "$existing_user" != "$DOCKER_USER" ]; then \
168+ usermod -l $DOCKER_USER -d /home/$DOCKER_USER -m $existing_user; \
169+ groupmod -n $DOCKER_USER $(getent group $GID | cut -d: -f1); \
170+ fi; \
171+ else \
172+ groupadd --gid $GID $DOCKER_USER; \
173+ useradd --uid $UID --gid $GID -m $DOCKER_USER; \
174+ fi
167175
176+ USER ${DOCKER_USER}
168177# ---------------------------------------------------------------------
169178# Copy artifacts from the builder stage
170179# ---------------------------------------------------------------------
@@ -174,14 +183,11 @@ COPY --from=builder /opt/stage/bitcoin /opt/bitcoin
174183# ---------------------------------------------------------------------
175184# Application code (copy only libs to keep image small)
176185# ---------------------------------------------------------------------
177- ADD . ${REPO}
178- COPY --from=builder /opt/stage/uv ${REPO}/.venv
179- RUN chown -R ${DOCKER_USER}:${DOCKER_USER} ${REPO}
180-
181- USER ${DOCKER_USER}
182- WORKDIR ${REPO}/libs/gl-testserver/
186+ WORKDIR ${REPO_PATH}
187+ COPY --chown=${DOCKER_USER}:${DOCKER_USER} . ${REPO_PATH}
188+ COPY --from=builder /opt/stage/uv ${REPO_PATH}/.venv
183189
184190# ---------------------------------------------------------------------
185191# ENTRYPOINT
186192# ---------------------------------------------------------------------
187- CMD . ${REPO}/.venv/bin/activate && python3 gltestserver run --metadata ${REPO}/ -- directory ${REPO }/.gltestserver
193+ CMD uv run --package gltestserver gltestserver run --directory ${REPO_PATH }/.gltestserver
0 commit comments