Repository navigation
Releases
Releases · AltSystem42/runescape-dragonwilds-dedicated-server-docker
v0.5.0
🐛 Fixes
- Update loop no longer fires every hour. The wrapper now refreshes SteamCMD's app info (
+app_info_update 1) before reading the public-branch buildid, and only records an update as applied / sends the ✅ message when the installed build inappmanifest_4019830.acfactually matches Steam's. When SteamCMD reports success without changing the build, the stale-cache condition is logged clearly and the next attempt backs off exponentially instead of restarting the server every hour. - Player tracking now uses stable account IDs instead of display names, so idle detection (auto-updates and scheduled backups) works even when a player's Steam name differs from their in-game character name. Joins use
Player ADDED to session [<id>]-[<name>](withPlayerChar entered worldas a fallback); leaves usePlayer Removed from session [<id>](withClientRequestDisconnect ... Account[XP:<id>]as a fallback). Add/remove are idempotent, so duplicate log lines and reconnects can't double-count or leave ghost players. - First-install verification. A silent SteamCMD failure (exit 0 with no files installed) is now detected: the wrapper verifies the app manifest's buildid and the server binary after every attempt, retries all 5 attempts, sends a failure notification, and exits so Docker can retry instead of reporting a successful install that never happened.
🧪 Testing
- Four regression suites under
scripts/tests/covering player tracking (including the Steam-vs-character-name mismatch), update-helper parsing/verification/backoff, the realrun_updateflow with a fake SteamCMD, and the real first-install flow. - New GitHub Actions workflow (
.github/workflows/test.yml) runs all four suites on every push and pull request. - CI "Shell tests" run passed on both
mainand thev0.5.0tag.
📖 Docs
README.mdanddockerhub.mdupdated with the new install-verification and idle-detection behavior; version history entry added for v0.5.0.
v0.4.0
🐛 Fixes
- Server no longer vanishes from the server browser after an auto-update/backup. The wrapper now actually waits for the old server process to exit before running SteamCMD and restarting (live PID tracking, SIGTERM → SIGKILL escalation), instead of the container exiting and the server staying unlisted until a manual restart.
- Update loop no longer gets killed mid-SteamCMD.
⚙️ Configure server settings via .env
- Set
OWNER_ID,SERVER_NAME,DEFAULT_WORLD_NAME,ADMIN_PASSWORD,WORLD_PASSWORD,SERVER_GUIDin.env— they are written intoDedicatedServer.inion container start. - Set a variable to override the value; leave it empty to keep the existing ini value.
- Warns at startup if
OwnerIdis missing (the server won't be visible until it's set).
📜 Logging
- Dedicated script log at
server-data/logs/entrypoint.log, separate from game logs; appended across restarts and rotated by size. - New variables:
LOG_TO_STDOUT,MAX_LOG_SIZE,LOG_RETENTION. Timestamped entries.
🔒 Security / config
.envremoved from git tracking (now gitignored) — use the new.env.exampleas your template; repo history was rewritten to purge it.- Trivy + Hadolint security scanning in CI; hardened workflow permissions.
- Consistent
server-datavolume setup;server-datagitignored.
📖 Docs
- README overhaul:
OwnerIdpost-build setup, server settings env vars, logs, and troubleshooting.