From 11d3079dbd87e4627522a336ad791c2a071bb995 Mon Sep 17 00:00:00 2001 From: Christian Groschupp Date: Fri, 28 Mar 2025 10:04:17 +0100 Subject: [PATCH] feat: update dockerfile --- .dockerignore | 4 ++++ Dockerfile | 62 ++++++++++++++++---------------------------------- cleanmedia.py | 1 + pyproject.toml | 4 ---- uv.lock | 2 +- 5 files changed, 26 insertions(+), 47 deletions(-) diff --git a/.dockerignore b/.dockerignore index 0b45ca2..31cd695 100644 --- a/.dockerignore +++ b/.dockerignore @@ -6,6 +6,7 @@ __pycache__/ # Ignore virtual environments venv/ .env/ +.venv # Ignore test files and directories tests/ @@ -31,3 +32,6 @@ Dockerfile* # Images *.png + +# Ignore caches +.*cache \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 3793a3f..52683d4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,54 +1,32 @@ -FROM python:3.10-alpine AS builder +ARG PYTHON_VERSION=3.13 +FROM ghcr.io/astral-sh/uv:0.6-python${PYTHON_VERSION}-alpine AS builder +WORKDIR /app + +RUN apk add --no-cache postgresql-dev + +COPY uv.lock . +COPY pyproject.toml . + +RUN uv sync --no-dev + +FROM python:${PYTHON_VERSION}-alpine WORKDIR /app -RUN apk add --no-cache \ - postgresql-dev \ - gcc \ - musl-dev \ - libffi-dev \ - curl \ - g++ \ - make \ - libxml2-dev \ - libxslt-dev \ - tzdata - -RUN pip install --no-cache-dir poetry - -RUN poetry config virtualenvs.create false - -COPY pyproject.toml poetry.lock ./ -RUN poetry install --only main --no-interaction --no-ansi --no-root - -FROM python:3.10-alpine - -WORKDIR /app - -RUN apk add --no-cache \ - postgresql-libs \ - libffi \ - libxml2 \ - libxslt \ - tzdata \ - curl +RUN apk add --no-cache postgresql-libs ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.2.33/supercronic-linux-amd64 \ - SUPERCRONIC_SHA1SUM=71b0d58cc53f6bd72cf2f293e09e294b79c666d8 \ - SUPERCRONIC=supercronic-linux-amd64 + SUPERCRONIC_SHA1SUM=71b0d58cc53f6bd72cf2f293e09e294b79c666d8 -RUN curl -fsSLO "$SUPERCRONIC_URL" \ - && echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - \ - && chmod +x "$SUPERCRONIC" \ - && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \ - && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic +RUN wget -qO /usr/local/bin/supercronic "$SUPERCRONIC_URL" \ + && echo "${SUPERCRONIC_SHA1SUM} /usr/local/bin/supercronic" | sha1sum -c - \ + && chmod +x /usr/local/bin/supercronic -COPY --from=builder /usr/local/lib/python3.10 /usr/local/lib/python3.10 -COPY --from=builder /app /app +COPY --from=builder /app/.venv /app/.venv -ENV PYTHONPATH=/usr/local/lib/python3.10/site-packages +ENV PATH=/app/.venv/bin:$PATH COPY . . -CMD echo "${CRON:-0 0 * * *} python /app/cleanmedia.py ${CLEANMEDIA_OPTS:-c /etc/dendrite/dendrite.yaml -t 30 -n -l}" > /app/crontab && \ +CMD echo "${CRON:-0 0 * * *} /app/cleanmedia.py ${CLEANMEDIA_OPTS:-c /etc/dendrite/dendrite.yaml -t 30 -n -l}" > /app/crontab && \ /usr/local/bin/supercronic /app/crontab diff --git a/cleanmedia.py b/cleanmedia.py index 635962f..942e1e7 100755 --- a/cleanmedia.py +++ b/cleanmedia.py @@ -1,3 +1,4 @@ +#!/usr/bin/env python """Media cleanup utility for Dendrite servers.""" """ diff --git a/pyproject.toml b/pyproject.toml index 42169bf..1e2c3c8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,10 +26,6 @@ dev = [ "pytest-coverage>=0.0,<0.1", ] -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - [tool.mypy] ignore_missing_imports = true strict = true diff --git a/uv.lock b/uv.lock index fec5a00..549f83b 100644 --- a/uv.lock +++ b/uv.lock @@ -37,7 +37,7 @@ wheels = [ [[package]] name = "cleanmedia" version = "0.1.0" -source = { editable = "." } +source = { virtual = "." } dependencies = [ { name = "psycopg2" }, { name = "pyyaml" },