#!/usr/bin/env sh # Native and container launcher for the dedicated export. Its server boot scene # is baked into the dedicated artifact during the Docker export stage. set -eu # Godot's stdout is fully (block) buffered rather than line-buffered whenever # it isn't attached to a TTY -- true of every real deployment of this script: # `docker run -d` (Docker's log driver presents a pipe, not a TTY), a plain # `docker run` even without -d, and systemd's journal capture (also a pipe). # Verified directly: a `docker run -d` container sat for 20+ seconds with # `docker logs` showing nothing at all, including the startup line, while the # process was confirmed alive and running; docker stop's SIGTERM (Godot has # no SIGTERM hook, see SERVER.md) then killed it without ever flushing that # buffered output, losing it permanently rather than merely delaying it. # `stdbuf -oL -eL` forces line buffering via LD_PRELOAD without touching the # binary; re-verified the same scenario then shows the startup line within # 3s. Fall back to running unwrapped if stdbuf isn't available (e.g. a # minimal image without GNU coreutils) rather than failing to start at all -- # a server with delayed logs is still far better than no server. if command -v stdbuf >/dev/null 2>&1; then exec stdbuf -oL -eL "$(dirname "$0")/CosmicClashServer.x86_64" --headless -- "$@" fi exec "$(dirname "$0")/CosmicClashServer.x86_64" --headless -- "$@"