diff --git a/services/astrodemo/Dockerfile b/services/astrodemo/Dockerfile index c596363..860165e 100644 --- a/services/astrodemo/Dockerfile +++ b/services/astrodemo/Dockerfile @@ -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"] diff --git a/services/astrodemo/tests/test_slownik_zakazany.py b/services/astrodemo/tests/test_slownik_zakazany.py index 19cc612..1348b37 100644 --- a/services/astrodemo/tests/test_slownik_zakazany.py +++ b/services/astrodemo/tests/test_slownik_zakazany.py @@ -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)