astrodemo: zmiana nazwy, rebase i domknięcie wycieków (1/5) #79

Merged
gitea merged 6 commits from feat/astrodemo into master 2026-08-26 14:25:29 +00:00
2 changed files with 20 additions and 1 deletions
Showing only changes of commit 10ade55525 - Show all commits
+5 -1
View File
@@ -4,7 +4,11 @@ WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
# Do obrazu wchodzi WYŁĄCZNIE kod aplikacji. `COPY . .` wnosiło też katalog
# tests/ — a leży w nim lista słów, które w tej usłudze nie mają prawa paść,
# wypisanych wprost. Obraz tej usługi się KOMUŚ ODDAJE, więc niósłby dokładnie
# to, co ten test ma pilnować. Przy okazji obraz jest mniejszy.
COPY app ./app
EXPOSE 8005
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8005"]
@@ -175,3 +175,18 @@ def test_the_protocol_constants_are_the_one_known_exception():
assert any(z in linia for z in ("x-astrololo", "vnd.astrololo",
"astrololo/link/", 'getlogger("astrololo')), \
f"{f.name}: „{linia.strip()[:70]}” to nie jest stała protokołu"
def test_only_the_application_code_ships_in_the_image():
"""Obraz nie może wieźć tego testu.
Ironia, którą łatwo przeoczyć: plik pilnujący, żeby pewne słowa nie padły,
sam je wypisuje — więc gdy trafi do obrazu, staje się tym wyciekiem, przed
którym broni. `COPY . .` wnosiło cały katalog usługi, razem z tests/.
"""
# Same instrukcje, bez komentarzy: komentarz obok tej linii CYTUJE dawną
# postać, więc szukanie po całym pliku zgłaszałoby własne wyjaśnienie.
instrukcje = [l for l in (APP.parent / "Dockerfile").read_text(encoding="utf-8").splitlines()
if l.strip() and not l.lstrip().startswith("#")]
assert not any(l.strip() == "COPY . ." for l in instrukcje), "obraz wnosi wszystko, w tym testy"
assert any(l.strip() == "COPY app ./app" for l in instrukcje)