From 40f5e459e04ea347c246fad363864ba441c60645 Mon Sep 17 00:00:00 2001 From: migatu Date: Tue, 4 Aug 2026 23:20:43 +0200 Subject: [PATCH] =?UTF-8?q?fix(ci):=20wyrocznia=20dom=C3=B3w=20=E2=80=94?= =?UTF-8?q?=20wbuduj=20pliki=20w=20obraz=20zamiast=20montowa=C4=87=20(-v?= =?UTF-8?q?=20nie=20dzia=C5=82a)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Krok padał na `python: can't open file '/oracle/run.py'`. Przyczyna jest tą samą pułapką, którą złapano już wcześniej przy `-p` i localhoście (jest o niej komentarz w tym samym pliku): job Gitea Actions SAM działa w kontenerze, więc `docker run -v $PWD/...` demon rozwiązuje na HOŚCIE, gdzie tej ścieżki nie ma. Docker nie zgłasza wtedy błędu — po cichu tworzy PUSTY katalog, przez co skrypt „znika". Zamiast montowania wbudowujemy pliki w pomocniczy obraz (FROM engine-swisseph:ci + COPY). Kontekst builda jest strumieniowany do demona, więc działa niezależnie od tego, gdzie ten demon stoi. Obraz kasujemy po użyciu. Przy okazji .dockerignore: docker NIE czyta .gitignore, więc do demona poleciałby cały korzeń repo — z lokalnym wirtualenvem (344 MB) i jądrami efemeryd włącznie. Kontekst spada z 382 MB do 5,9 MB, co na runnerze z historią „no space left on device" nie jest kosmetyką. Plik dotyczy tylko buildów z korzenia repo — obrazy usług mają własne konteksty (services/) i go nie widzą. Zweryfikowane bez dockera: sprawdzony dokładny tekst, jaki dostanie powłoka po dedentacji YAML (terminator heredoca w kolumnie 0), istnienie ścieżek COPY oraz to, że reguły .dockerignore nie wycinają plików potrzebnych do uruchomienia. Co-Authored-By: Claude Opus 4.8 --- .dockerignore | 33 +++++++++++++++++++++++++++++++++ .gitea/workflows/tests.yml | 24 +++++++++++++++++++----- 2 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..f6286c3 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,33 @@ +# Kontekst builda dla obrazów budowanych z KORZENIA repo (dziś: pomocniczy obraz +# wyroczni w CI — patrz .gitea/workflows/tests.yml). Obrazy usług mają własne +# konteksty (services/), więc ten plik ich nie dotyczy. +# +# UWAGA: docker NIE czyta .gitignore. Bez tego pliku do demona poleciałby m.in. +# lokalny wirtualenv (~344 MB) i jądra efemeryd — a runner miał już incydent +# „no space left on device". + +# środowiska lokalne +.env/ +.venv/ +venv/ + +# cache Pythona i narzędzi +__pycache__/ +*.pyc +*.pyo +.pytest_cache/ +.ruff_cache/ +.mypy_cache/ + +# dane generowane/pobierane, odtwarzalne +**/.ephemeris/ +**/.cache/ + +# historia i metadane repo +.git/ +.gitea/ +.claude/ + +# rzeczy nieużywane w obrazach +docs/ +*.md diff --git a/.gitea/workflows/tests.yml b/.gitea/workflows/tests.yml index b5329ea..2c36acb 100644 --- a/.gitea/workflows/tests.yml +++ b/.gitea/workflows/tests.yml @@ -149,11 +149,25 @@ jobs: # niż wykryć po fakcie. - name: Domy — zgodność z wyrocznią (brzegi + wnętrze) run: | - docker run --rm \ - -v "$PWD/services/logic:/logic:ro" \ - -v "$PWD/tests/oracle:/oracle:ro" \ - -e LOGIC_PATH=/logic \ - astrololo/engine-swisseph:ci python /oracle/run.py --mode build + # Pliki WBUDOWUJEMY w obraz, a nie montujemy przez -v. Powód ten sam, + # dla którego wyżej nie startujemy kontenera w tle: job Gitea Actions sam + # działa w kontenerze, więc `-v $PWD/...` docker rozwiązuje na HOŚCIE, + # gdzie tej ścieżki nie ma. Docker nie zgłasza wtedy błędu — po cichu + # tworzy PUSTY katalog, przez co skrypt „znika". Kontekst builda jest + # strumieniowany do demona, więc działa niezależnie od tego, gdzie on stoi. + docker build -t astrololo/oracle:ci -f - . <<'DOCKERFILE' + FROM astrololo/engine-swisseph:ci + COPY services/logic /logic + COPY tests/oracle /oracle + ENV LOGIC_PATH=/logic + DOCKERFILE + docker run --rm astrololo/oracle:ci python /oracle/run.py --mode build + + # Obraz pomocniczy nie jest już potrzebny — a runner miał już incydent + # „no space left on device", więc sprzątamy po sobie od razu. + - name: Usuń obraz pomocniczy wyroczni + if: always() + run: docker rmi -f astrololo/oracle:ci 2>/dev/null || true # Sprzątanie po POPRZEDNICH przebiegach starej wersji workflow, która # zostawiała kontener „swe" na runnerze i blokowała nazwę. Nowa wersja