From 0da360a644ba0ec0d444ae2d0aded33509e5bd4d Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Thu, 14 May 2026 00:22:16 +0200 Subject: [PATCH 1/2] 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"] From 9ebb2e7f0f6a9a488638d1e6e013a43402c06e14 Mon Sep 17 00:00:00 2001 From: Ilia Denisov Date: Thu, 14 May 2026 00:22:53 +0200 Subject: [PATCH 2/2] ci: rename workflows for Gitea UI readability MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Switches the `name:` field on every workflow to the bulleted style: Tests · Go (go-unit.yaml) Tests · UI (ui-test.yaml) Tests · Integration (integration.yaml) Deploy · Dev (dev-deploy.yaml) Build · Prod (prod-build.yaml) Deploy · Prod (deploy-prod.yaml) File names stay the same so existing path filters and any URL references continue to work. Co-Authored-By: Claude Opus 4.7 (1M context) --- .gitea/workflows/deploy-prod.yaml | 2 +- .gitea/workflows/dev-deploy.yaml | 2 +- .gitea/workflows/go-unit.yaml | 2 +- .gitea/workflows/integration.yaml | 2 +- .gitea/workflows/prod-build.yaml | 2 +- .gitea/workflows/ui-test.yaml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.gitea/workflows/deploy-prod.yaml b/.gitea/workflows/deploy-prod.yaml index 7514a3c..2d51353 100644 --- a/.gitea/workflows/deploy-prod.yaml +++ b/.gitea/workflows/deploy-prod.yaml @@ -1,4 +1,4 @@ -name: deploy-prod +name: Deploy · Prod # Placeholder for the production rollout workflow. Today it only proves # the manual entry point works; the actual `docker save | ssh prod diff --git a/.gitea/workflows/dev-deploy.yaml b/.gitea/workflows/dev-deploy.yaml index d24f9bf..8337022 100644 --- a/.gitea/workflows/dev-deploy.yaml +++ b/.gitea/workflows/dev-deploy.yaml @@ -1,4 +1,4 @@ -name: dev-deploy +name: Deploy · Dev # Builds the Galaxy stack and (re)deploys it into the long-lived dev # environment on the host running this Gitea Actions runner. Triggered diff --git a/.gitea/workflows/go-unit.yaml b/.gitea/workflows/go-unit.yaml index 200d15b..7c2c10a 100644 --- a/.gitea/workflows/go-unit.yaml +++ b/.gitea/workflows/go-unit.yaml @@ -1,4 +1,4 @@ -name: go-unit +name: Tests · Go # Fast unit tests for the Go side of the monorepo. Runs on every push # and pull request whose path filter matches a Go source directory. diff --git a/.gitea/workflows/integration.yaml b/.gitea/workflows/integration.yaml index 240f244..dcdceec 100644 --- a/.gitea/workflows/integration.yaml +++ b/.gitea/workflows/integration.yaml @@ -1,4 +1,4 @@ -name: integration +name: Tests · Integration # Full integration suite (testcontainers-driven, ~5–10 minutes). Heavy # enough that we do not run it on every push to a feature branch — only diff --git a/.gitea/workflows/prod-build.yaml b/.gitea/workflows/prod-build.yaml index f511e81..fd4aa71 100644 --- a/.gitea/workflows/prod-build.yaml +++ b/.gitea/workflows/prod-build.yaml @@ -1,4 +1,4 @@ -name: prod-build +name: Build · Prod # Builds the production-grade Docker images and the UI bundle on every # merge into `main`, then saves the artifacts so a future diff --git a/.gitea/workflows/ui-test.yaml b/.gitea/workflows/ui-test.yaml index 5eff4ff..93ee672 100644 --- a/.gitea/workflows/ui-test.yaml +++ b/.gitea/workflows/ui-test.yaml @@ -1,4 +1,4 @@ -name: ui-test +name: Tests · UI # UI-side unit and end-to-end tests (Vitest + Playwright). The Go side # of the workspace is tested in `go-unit.yaml`. Both workflows can run