aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Dockerfile36
1 files changed, 29 insertions, 7 deletions
diff --git a/Dockerfile b/Dockerfile
index 41282e00c..0b1672763 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,16 +1,38 @@
-FROM --platform=linux/amd64 ghcr.io/owl-corp/python-poetry-base:3.12-slim
+ARG python_version=3.12-slim
+
+FROM python:$python_version AS builder
+COPY --from=ghcr.io/astral-sh/uv:0.7 /uv /bin/
+
+ENV UV_COMPILE_BYTECODE=1 \
+ UV_LINK_MODE=copy
+
+# Install project dependencies with build tools available
+WORKDIR /build
+RUN pip install --no-cache-dir --upgrade pip setuptools wheel virtualenv \
+ && python -m virtualenv .venv
+
+RUN --mount=type=cache,target=/root/.cache/uv \
+ --mount=type=bind,source=uv.lock,target=uv.lock \
+ --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
+ uv sync --frozen --no-dev
+
+# -------------------------------------------------------------------------------
+
+FROM python:$python_version
# Define Git SHA build argument for sentry
ARG git_sha="development"
ENV GIT_SHA=$git_sha
-# Install project dependencies
-WORKDIR /bot
-COPY pyproject.toml poetry.lock ./
-RUN poetry install --without dev
+# Install dependencies from build cache
+# .venv not put in /app so that it doesn't conflict with the dev
+# volume we use to avoid rebuilding image every code change locally
+COPY --from=builder /build /build
+ENV PATH="/build/.venv/bin:$PATH"
# Copy the source code in last to optimize rebuilding the image
+WORKDIR /bot
COPY . .
-ENTRYPOINT ["poetry"]
-CMD ["run", "python", "-m", "bot"]
+ENTRYPOINT ["python", "-m"]
+CMD ["bot"]