From 818102172b32ba6a1c222e26df2299af14e6b4bc Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Sun, 8 Jun 2025 15:11:42 +0800 Subject: [PATCH] build: optimize docker multi-stage builds --- Dockerfile | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 845f253..e0b28b7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,23 @@ ARG PYTHON="python:3.12-alpine3.22" + FROM ${PYTHON} AS builder RUN apk add uv RUN sh -c '[ $(getconf LONG_BIT) -eq 64 ] || apk add gcc cargo musl-dev libffi-dev openssl-dev' + WORKDIR /build/ -RUN --mount=type=bind,rw,source=./src/,target=./src/ \ - --mount=type=bind,ro,source=uv.lock,target=uv.lock \ - --mount=type=bind,ro,source=pyproject.toml,target=pyproject.toml \ - uv tree --frozen && \ - uv export --frozen --no-dev --no-emit-package syncplay -o requirements.txt && \ - pip wheel --require-hashes -r requirements.txt --wheel-dir /wheels/ && \ +COPY uv.lock pyproject.toml . +RUN uv export --frozen --no-dev --no-emit-package syncplay -o requirements.txt && \ + pip wheel --require-hashes -r requirements.txt --wheel-dir /wheels/ + +RUN --mount=type=bind,rw,source=./src/syncplay/,target=./src/syncplay/ \ sed -i '/ep_client/s/ =/-client =/g; s/requirements_gui.txt/\/dev\/null/g' ./src/syncplay/setup.py && \ - pip wheel --no-deps ./src/syncplay/ --wheel-dir /wheels/ && \ + pip wheel --no-deps ./src/syncplay/ --wheel-dir /wheels/ + +RUN --mount=type=bind,rw,source=./src/,target=./src/ \ uv build --wheel -o /wheels/ + FROM ${PYTHON} LABEL org.opencontainers.image.vendor="Dnomd343" LABEL org.opencontainers.image.authors="dnomd343@gmail.com"