From 0da360a644ba0ec0d444ae2d0aded33509e5bd4d Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Thu, 14 May 2026 00:22:16 +0200 Subject: [PATCH] dev-deploy: fix backend startup in CI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two bugs surfaced on the first real merge into development: 1. `${{ env.HOME }}` evaluates to empty string at the workflow stage, so GALAXY_DEV_GAME_STATE_DIR became `/.galaxy-dev/game-state`. Resolve in the shell instead of YAML. 2. The compose bind-mount of GeoIP2-Country-Test.mmdb referenced a path inside the runner's workspace volume, which the host Docker daemon cannot see — it created an empty directory and the backend crashed with "geoip database: is a directory" in a restart loop. Bake the file into the backend image so dev-deploy no longer needs a bind-mount; local-dev compose still mounts it on top for swap-in during development. Co-Authored-By: Claude Opus 4.7 (1M context) --- .gitea/workflows/dev-deploy.yaml | 5 +++-- tools/dev-deploy/docker-compose.yml | 6 +++++- tools/local-dev/backend.Dockerfile | 11 +++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/.gitea/workflows/dev-deploy.yaml b/.gitea/workflows/dev-deploy.yaml index 13c4a92..d24f9bf 100644 --- a/.gitea/workflows/dev-deploy.yaml +++ b/.gitea/workflows/dev-deploy.yaml @@ -100,9 +100,10 @@ jobs: - name: Bring up the stack working-directory: tools/dev-deploy - env: - GALAXY_DEV_GAME_STATE_DIR: ${{ env.HOME }}/.galaxy-dev/game-state run: | + # Resolve in the shell, not in YAML expressions — `env.HOME` + # is empty at the workflow-evaluation stage. + export GALAXY_DEV_GAME_STATE_DIR="$HOME/.galaxy-dev/game-state" mkdir -p "$GALAXY_DEV_GAME_STATE_DIR" docker compose up -d --wait --remove-orphans diff --git a/tools/dev-deploy/docker-compose.yml b/tools/dev-deploy/docker-compose.yml index 5a449df..a6e4e67 100644 --- a/tools/dev-deploy/docker-compose.yml +++ b/tools/dev-deploy/docker-compose.yml @@ -125,7 +125,11 @@ services: target: ${GALAXY_DEV_GAME_STATE_DIR} bind: create_host_path: true - - ../../pkg/geoip/test-data/test-data/GeoIP2-Country-Test.mmdb:/var/lib/galaxy/geoip.mmdb:ro + # The GeoIP database is baked into the backend image (see + # tools/local-dev/backend.Dockerfile); a bind-mount is not used + # here because the source path resolves inside the runner + # workspace volume and the host Docker daemon cannot see it, + # which produced an "is a directory" error in CI. networks: - galaxy-internal healthcheck: diff --git a/tools/local-dev/backend.Dockerfile b/tools/local-dev/backend.Dockerfile index 1cd01c3..01e5898 100644 --- a/tools/local-dev/backend.Dockerfile +++ b/tools/local-dev/backend.Dockerfile @@ -24,6 +24,16 @@ COPY pkg/transcoder/ ./pkg/transcoder/ COPY pkg/util/ ./pkg/util/ COPY backend/ ./backend/ +# Bake the GeoIP test database into the build context so downstream +# stages can copy it into the runtime image. The path is the +# `MaxMind-DB` git submodule under `pkg/geoip/test-data/`; the file is +# the smallest country DB MaxMind publishes and is what every other +# dev-stack uses. Baking it lets dev-deploy skip the bind-mount that +# fails on runner-workspace volumes the host Docker daemon cannot see. +RUN mkdir -p /out/var/lib/galaxy +COPY pkg/geoip/test-data/test-data/GeoIP2-Country-Test.mmdb \ + /out/var/lib/galaxy/geoip.mmdb + RUN <<'EOF' cat > go.work go 1.26.2 @@ -67,5 +77,6 @@ EXPOSE 8080 EXPOSE 8081 COPY --from=builder /out/backend /usr/local/bin/backend +COPY --from=builder /out/var/lib/galaxy/geoip.mmdb /var/lib/galaxy/geoip.mmdb ENTRYPOINT ["/usr/local/bin/backend"]