Game-server ops and CI for BlackNBrown games
  • Go 88.6%
  • JavaScript 8%
  • HTML 2.1%
  • CSS 1.2%
  • Dockerfile 0.1%
Find a file
kblack0610 0634bcc0c6
All checks were successful
Publish Registry Image / build-and-push (push) Successful in 51s
feat(registry): match/find takes ?game_id= so a ranked server plays the ladder match game (#29)
2026-11-06 17:53:35 +00:00
.forgejo/workflows fix(ci): add GITHUB_TOKEN auth for git clone 2026-04-16 13:39:40 -07:00
game-server Phase 1 scaffold: registry + game-server Dockerfile + README 2026-04-15 14:01:17 -07:00
registry feat(registry): match/find takes ?game_id= so a ranked server plays the ladder match game (#29) 2026-11-06 17:53:35 +00:00
.gitignore feat(registry): Postgres, accounts with player codes, worlds and characters as snapshots (#9) 2026-10-25 18:37:15 +00:00
README.md feat(registry): player profiles, results, ELO ladders and records boards (#1) 2026-10-04 16:47:11 +00:00

bnb-game-servers

Game-server ops and CI for BlackNBrown games.

Holds the Go server registry (generic matchmaker / lobby service) and the game-server Dockerfile template used to containerize per-game Unity dedicated-server binaries. Per-game repos (DodginBalls, etc.) build their own Linux server binary via game-ci, then call the reusable workflow here to wrap that binary in a container image and publish it to the home-cluster registry.

Layout

Path Purpose
registry/ Go HTTP service. Register / heartbeat / list / deregister game servers (filterable by game), plus player profiles, match and record results, ELO ladders and records boards. game_rules is an opaque JSON blob. Routes, env vars and token tiers: registry/README.md.
game-server/Dockerfile Generic server container. COPYs a pre-built Builds/LinuxServer/ Unity headless binary and runs ServerBuild with CLI args for the registry, token, name, port, region, etc.
compose/ Reusable compose templates for local dev and multi-server deployments.
.forgejo/workflows/publish-registry.yaml On a registry-v* tag, builds registry/ and pushes git.kblab.me/kblack0610/bnb-game-servers/registry:<tag> to the Forgejo container registry.
.github/workflows/publish-server-image.yml Reusable workflow (on: workflow_call) that per-game repos call to publish their server image. (Phase 4, not yet wired.)

Published images

The registry image is published to the Forgejo container registry by tagging a commit registry-vX.Y.Z (the image tag is the git tag, for example registry:registry-v0.2.0). The other rows below are the older plan for the home-cluster registry at 192.168.1.20:30500 and are not wired yet.

Image Source Consumers
git.kblab.me/kblack0610/bnb-game-servers/registry:registry-v<x.y.z> registry/ home-config compose stack (REGISTRY_IMAGE_TAG)
192.168.1.20:30500/bnb/dodginballs-server:<tag> dodginballs game-ci build + game-server/Dockerfile home-config compose stack
192.168.1.20:30500/bnb/<game>-server:<tag> any future game, via the same reusable workflow future deployments

Consumers on HP/Thinkpad need insecure-registries: ["192.168.1.20:30500"] in /etc/docker/daemon.json since the registry is HTTP-only.

Current status - Phase 1 (scaffold)

  • Repo scaffolded with registry source and game-server Dockerfile.
  • Self-hosted GitHub Actions runner on home-cluster (prerequisite for CI phases; separate bnb-platform PR).
  • publish-registry.yaml workflow (Phase 3, Forgejo Actions, on registry-v* tags).
  • publish-server-image.yml reusable workflow (Phase 4).
  • DodginBalls release.yml wired to call the reusable workflow (Phase 5).
  • home-config/apps/game-servers/ compose swapped to pull published images (Phase 6).
  • Duplicate registry / Dockerfile copies deleted from dodginballs, dodginballs-agent-2, engine/unity-core/infrastructure/ (Phase 7).

Full plan: ~/.claude/plans/snappy-orbiting-lagoon.md.

Sources this scaffold was copied from

  • registry/ <- engine/unity-core/infrastructure/registry/ (since reworked: split into files, game filter, players, results, ladders)
  • game-server/Dockerfile <- home-config/apps/game-servers/Dockerfile.server (verbatim)

Those sources remain in place and functional until Phase 7. This repo is the intended canonical home going forward.