Scripts become first-class: named, versioned, uploaded via the UI, optionally scoped to a game or map. Any change that would land on scope-matched servers (marking-required or new version of a scoped script) must first pass a beta. The beta runs a per-server state machine — deploy -beta.gsc → wait empty → Komodo restart → wait healthy → optionally wait for a real match end (games_sp.log 'ExitLevel: executed') — before it's eligible for promotion. Rollback is always available and restores from .OLD. The shared/scripts mirror and its betas/ staging folder are gone. Every server now has a tracked script inventory (server_scripts table), populated only by explicit upload flows. New: /scripts, /scripts/[id], /betas/[id] UI; /api/scripts + /api/betas + /api/servers/[name]/scripts endpoints; scripts.ts, inventory.ts, beta.ts (rewritten), beta-runner.ts, match-log.ts, komodoInspectHealthy(). Removed: push.ts, /api/push, BetaPanel, legacy importer. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
31 lines
1.1 KiB
YAML
31 lines
1.1 KiB
YAML
services:
|
|
electric-cherry:
|
|
build:
|
|
context: .
|
|
image: electric-cherry:latest
|
|
container_name: electric-cherry
|
|
restart: unless-stopped
|
|
ports:
|
|
- "3000:3000"
|
|
# Lets RCON_HOST=host.docker.internal reach game servers running on the
|
|
# same Komodo host. Docker Engine 20.10+ resolves this alias when the
|
|
# extra_hosts entry is present.
|
|
extra_hosts:
|
|
- "host.docker.internal:host-gateway"
|
|
volumes:
|
|
# in prod (Komodo host), the game server tree is at /root/zombies
|
|
- /root/zombies:/root/zombies:rw
|
|
- /root/zombies/.electric-cherry:/data:rw
|
|
environment:
|
|
SERVERS_ROOT: /root/zombies/t5
|
|
REL_DEST: runtime/plutonium/storage/t5/raw/scripts/sp
|
|
BETA_ARCHIVE_DIR: /root/zombies/beta-archive
|
|
DB_PATH: /data/cherry.db
|
|
DEPLOY_KEEP_DAYS: "7"
|
|
KOMODO_ADDRESS: ${KOMODO_ADDRESS}
|
|
KOMODO_API_KEY: ${KOMODO_API_KEY}
|
|
KOMODO_API_SECRET: ${KOMODO_API_SECRET}
|
|
RCON_PASSWORD: ${RCON_PASSWORD}
|
|
RCON_HOST: ${RCON_HOST:-host.docker.internal}
|
|
RCON_TIMEOUT_MS: ${RCON_TIMEOUT_MS:-3000}
|