# ci-images Vorgebackene CI-Basis-Images für Gitea Actions. Ziel: schneller Cold-Start und reproduzierbare Läufe, statt Werkzeuge bei jedem Lauf per `curl | sh` / `pip install` nachzuladen (siehe Recherche „CI/CD-Optimierung mit Docker & Ansible"). ## Images | Image | Registry-Pfad | Inhalt | |-------|---------------|--------| | `ci-python` | `gitea.inmedias.it/sko/ci-python` | `debian:bookworm-slim` + uv + gepinnte CPython, ruff, pytest | Weitere Stacks (z. B. `ci-node`) kommen als eigene Unterordner nach demselben Muster dazu, sobald der Python-Pilot trägt. ## Versionen pflegen (eine Quelle der Wahrheit) Alle Versionen stehen als `ARG` bzw. gepinnter Digest oben im jeweiligen `Dockerfile` (z. B. `python/Dockerfile`). Ändern → auf `main` pushen → der Workflow `build-ci-python` baut und pusht neu. Digests auffrischen: ```bash docker buildx imagetools inspect debian:bookworm-slim docker buildx imagetools inspect ghcr.io/astral-sh/uv:0.12.1 ``` ## Verwendung in einem Repo (Weg B: `container:`, kein Runner-Eingriff) ```yaml jobs: test: runs-on: ubuntu-latest container: gitea.inmedias.it/sko/ci-python:latest steps: - uses: actions/checkout@v4 - run: uv sync --frozen # repo-eigene Deps aus uv.lock - run: ruff check . - run: pytest ``` Zum reproduzierbaren Pinnen statt `:latest` einen unveränderlichen `:`-Tag verwenden. Registry-Login für den Pull passiert im Runner über einen `container.credentials`- Block oder `docker/login-action` gegen `gitea.inmedias.it` (PAT, Scope `package:read`). ## Build lokal testen ```bash docker build -t ci-python:test python docker run --rm ci-python:test python --version ```