Skip to content

chore(environment): name the runtime image for what it carries - #136

Merged
jravani merged 1 commit into
mainfrom
chore/runtime-image-naming-and-mounts
Sep 18, 2026
Merged

jravani merged 1 commit into
mainfrom
chore/runtime-image-naming-and-mounts

Conversation

@jravani

@jravani jravani commented Sep 18, 2026

Copy link
Copy Markdown
Member

Two loose ends from #135, both in files that PR could not touch.

The name

Dockerfile.server has built the CLI as well as the server since #135, so the name stopped describing it. Renamed to Dockerfile.runtime; git records it as a 100% rename so history follows. The published image name ghcr.io/thd-spatial-ai/city2tabula-server is unchanged, so no caller, compose file or deployment moves.

The mount

The server service mounted ./../../data:/app/data, which hid the data/tabula baked into the image behind the host's copy. So the configuration the image is built for — running with no TABULA files on the host at all — was never exercised by our own compose, and anything tested there was testing the host's CSVs.

Mounting the dataset directories individually fixes it. Demonstrated rather than reasoned:

old mount   (data:/app/data)              germany.csv visible — from HOST
new mount   (data/lod2, data/lod3 only)   germany.csv visible — from IMAGE
                                          host lod2/germany/*.gml still arrives
no mounts at all                          20 CSVs available

The middle row is the fix; the bottom row is what a deployment actually does.

Four false statements removed

The service comment claimed go run against the already-COPY'd source in the dev image, no separate build target, that data/ was .dockerignored, and that the TABULA import therefore needed the volume mount. None had been true since the runtime image was added, and the last one was the stated justification for the mount that caused the shadowing.

Verification

docker compose config valid, up --dry-run creates all services, image builds under the new name, unit suite green. The three mount shapes above were each run against the built image.

Dockerfile.server built only the server; it now builds the CLI too, so
the name no longer describes it. Renamed to Dockerfile.runtime. The
published image name is unchanged, so nothing downstream moves.

The server service mounted data/ as a whole, which hid the data/tabula
baked into the image behind the host's copy. Anything tested there was
testing the host's CSVs, so the no-host-mount configuration the image is
built for was never exercised by this file. The dataset directories are
now mounted individually.

Verified: with the old mount the CSVs come from the host; with the new
one they come from the image while the host's lod2 tiles still arrive;
with no mounts at all the image carries all 20.

The service comment described `go run` against the dev image, no
separate build target, and data/ being excluded from the image. None of
those had been true since the runtime image was added.
@codecov

codecov Bot commented Sep 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@jravani
jravani merged commit 9c79a30 into main Sep 18, 2026
5 checks passed
@jravani
jravani deleted the chore/runtime-image-naming-and-mounts branch September 18, 2026 19:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant