Build ci-python image / build (push) Failing after 2m53s
Vorgebackenes Python-CI-Image (debian:bookworm-slim + uv, gepinnte CPython 3.12.13, ruff 0.16.1, pytest 9.1.1) fuer Gitea Actions. Basis + uv per Digest gepinnt, Versionen zentral im Dockerfile-Kopf. Build-Workflow pusht :latest + :<sha> in die Gitea-Registry (sko/ci-python), woechentlicher Rebuild. Lokal verifiziert: Build gruen, 397 MB, uv sync --frozen + Exporter-Imports OK. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
61 lines
2.4 KiB
Docker
61 lines
2.4 KiB
Docker
# ci-python — vorgebackenes CI-Image für Python-Repos (Gitea Actions)
|
|
#
|
|
# Basis: debian:bookworm-slim (firmenweite Distro-Linie), Toolchain über uv.
|
|
# Ziel: schneller Cold-Start + reproduzierbare Läufe (kein `curl | sh` / kein
|
|
# `pip install` zur Laufzeit mehr). Repo-eigene Deps kommen weiterhin per
|
|
# `uv sync --frozen` aus dem jeweiligen uv.lock — dieses Image liefert nur die
|
|
# Toolchain (Python, uv, ruff, pytest).
|
|
#
|
|
# Versionen stehen ausschliesslich hier (eine Quelle der Wahrheit). Aktualisieren
|
|
# heisst: ARG/Digest anpassen -> Push -> Build-Workflow baut & pusht neu.
|
|
|
|
# Basis per Digest gepinnt (reproduzierbar). Auflösen mit:
|
|
# docker buildx imagetools inspect debian:bookworm-slim
|
|
FROM debian:bookworm-slim@sha256:7b140f374b289a7c2befc338f42ebe6441b7ea838a042bbd5acbfca6ec875818
|
|
|
|
# --- zentrale Versionsliste ---------------------------------------------------
|
|
ARG PYTHON_VERSION=3.12.13
|
|
ARG RUFF_VERSION=0.16.1
|
|
ARG PYTEST_VERSION=9.1.1
|
|
|
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
|
|
|
# 1) Selten ändernde Systemschicht zuerst -> Cache greift lange.
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
curl \
|
|
git \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# 2) uv aus dem offiziellen, digest-gepinnten uv-Image kopieren.
|
|
# Digest auflösen mit: docker buildx imagetools inspect ghcr.io/astral-sh/uv:0.12.1
|
|
COPY --from=ghcr.io/astral-sh/uv:0.12.1@sha256:cf4eedcaa81655197f625739489effcbe71b61ceb1506f332c3facae5deceded \
|
|
/uv /uvx /usr/local/bin/
|
|
|
|
# 3) uv systemweit verdrahten: managed Python, keine Suche nach System-Python,
|
|
# Tool-Bins landen in /usr/local/bin (auf PATH).
|
|
ENV UV_PYTHON_INSTALL_DIR=/opt/uv/python \
|
|
UV_TOOL_DIR=/opt/uv/tools \
|
|
UV_TOOL_BIN_DIR=/usr/local/bin \
|
|
UV_PYTHON_PREFERENCE=only-managed \
|
|
UV_LINK_MODE=copy \
|
|
UV_NO_PROGRESS=1
|
|
|
|
# 4) Gepinnte CPython einbacken und als Default `python`/`python3` verdrahten.
|
|
RUN uv python install "${PYTHON_VERSION}" \
|
|
&& ln -sf "$(uv python find "${PYTHON_VERSION}")" /usr/local/bin/python3 \
|
|
&& ln -sf /usr/local/bin/python3 /usr/local/bin/python
|
|
|
|
# 5) Lint-/Test-Tools global (schnelle CI ohne per-Repo-Install).
|
|
RUN uv tool install "ruff==${RUFF_VERSION}" \
|
|
&& uv tool install "pytest==${PYTEST_VERSION}"
|
|
|
|
# 6) Smoke-Test beim Bau: bricht den Build ab, falls etwas nicht auf PATH liegt.
|
|
RUN python --version \
|
|
&& uv --version \
|
|
&& ruff --version \
|
|
&& pytest --version
|
|
|
|
CMD ["/bin/bash"]
|