From 2a55dcf1ce1d6dc42d2036786618e3754d23ac75 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 30 Aug 2026 14:33:00 +0200 Subject: [PATCH] =?UTF-8?q?Tests=20in=20der=20CI=20=C3=BCber=20den=20Build?= =?UTF-8?q?-Kontext=20statt=20per=20Bind-Mount?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der bisherige Schritt hängte das Arbeitsverzeichnis mit -v "$PWD":/app in einen Container. Läuft der Gitea-Runner selbst in einem Container, zeigt $PWD auf einen Pfad, den der Docker-Daemon des Hosts nicht kennt: der Mount wäre leer, pytest fände keine Tests und meldete Erfolg. Wieder ein Test, der nicht hätte fehlschlagen können. Jetzt über Dockerfile.test - der Code kommt über den Build-Kontext hinein, unabhängig davon, wie der Runner aufgebaut ist. tests/ bleibt dafür im Kontext; das Anwendungs-Image kopiert sie weiterhin nicht mit. Lokal genauso ausgeführt wie die CI es tun wird: 81 Tests grün. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01GR4bNaj9GtRu57J4Niii8o --- .dockerignore | 3 ++- .gitea/workflows/docker-image.yml | 10 ++++++---- Dockerfile.test | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 Dockerfile.test diff --git a/.dockerignore b/.dockerignore index 9720fef..b24c25f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -17,7 +17,8 @@ uploads/ *.sqlite3 # Entwicklung -tests/ +# tests/ bleibt bewusst im Kontext: Dockerfile.test braucht sie. +# Das Anwendungs-Image kopiert sie nicht mit. .pytest_cache/ .venv/ venv/ diff --git a/.gitea/workflows/docker-image.yml b/.gitea/workflows/docker-image.yml index 3f63e61..974db48 100644 --- a/.gitea/workflows/docker-image.yml +++ b/.gitea/workflows/docker-image.yml @@ -28,10 +28,12 @@ jobs: - name: Tests run: | set -eu - docker run --rm -v "$PWD":/app -w /app python:3.11-slim bash -c ' - pip install --quiet -r requirements-dev.txt - python -m pytest -q - ' + # Über den Build-Kontext statt per Bind-Mount: läuft der Runner + # selbst in einem Container, zeigt $PWD auf einen Pfad, den der + # Docker-Daemon des Hosts nicht kennt - der Mount wäre leer und + # die Tests liefen ohne Fehlermeldung ins Leere. + docker build -f Dockerfile.test -t kleiderboerse-tests . + docker run --rm kleiderboerse-tests - name: Version bestimmen id: meta diff --git a/Dockerfile.test b/Dockerfile.test new file mode 100644 index 0000000..447fc47 --- /dev/null +++ b/Dockerfile.test @@ -0,0 +1,18 @@ +# Nur zum Testen - baut die Testumgebung samt Quellcode ins Image. +# +# Bewusst ohne Bind-Mount: läuft der CI-Runner selbst in einem Container, +# zeigt $PWD auf einen Pfad, den der Docker-Daemon des Hosts nicht kennt. +# Der Mount wäre dann leer und die Tests liefen ins Leere - ohne +# Fehlermeldung. Über den Build-Kontext kommt der Code zuverlässig hinein. +FROM python:3.11-slim + +WORKDIR /app +COPY requirements.txt requirements-dev.txt ./ +RUN pip install --no-cache-dir -r requirements-dev.txt + +COPY alembic.ini ./ +COPY alembic/ ./alembic/ +COPY app/ ./app/ +COPY tests/ ./tests/ + +CMD ["python", "-m", "pytest", "-q"]