feat: game templates, schemas and validator
Validate game templates / validate (push) Successful in 10m6s

Public game templates for GBR Hosting, one games/<id>/game.yaml per game,
imported from the panel. A Go tool validates them against JSON Schemas and
checks for credentials, private addresses and consents that default to
accepted; CI runs it on every push.

Admin/RCON passwords are no longer shared defaults: they are blank with
x-generate so the panel creates one per server, and Palworld/ARK no longer
publish their RCON/REST ports.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
gregandClaude Opus 5.5 committed 2026-10-24 16:54:21 -04:00
commit 822b44e2e5
20 files changed
+2283

No files matched your search

@@ -0,0 +1,117 @@
# yaml-language-server: $schema=../../schema/game.schema.json
id: runescape-dragonwilds-native-linux
name: 'RuneScape: Dragonwilds (Native Linux Server)'
defaultDockerImage: cm2network/steamcmd:root
defaultStartupCommand: ./RSDragonwildsServer.sh -log -Port=7777
requiredMemoryMb: 10240
requiredDiskMb: 20480
defaultPorts:
- 7777/udp
- 8888/udp
installMethod: STEAMCMD
installConfig:
appId: "4019830"
defaultConfig:
AdminPassword: ""
DefaultWorldName: '{SERVER_NAME}'
OwnerId: ""
PlatformPolicy: Crossplay
ServerName: GBRHosting - {SERVER_NAME}
WorldPassword: ""
configSchema:
$schema: http://json-schema.org/draft-07/schema#
properties:
AdminPassword:
category: Security & Access
default: ""
description: Password required to access the Server Management screen in-game.
showOnDeploy: true
title: Admin Password
type: string
x-savedValue:
key: GAME_ADMIN_PASSWORD
label: Game admin password
secret: true
DefaultWorldName:
category: World & Environment
default: '{SERVER_NAME}'
description: Players find your server in Dragonwilds under Worlds → Public by searching this name. Defaults to your server's name in GBR; type any short name to change it.
showOnDeploy: true
title: World Name (what players search for)
type: string
OwnerId:
category: Security & Access
default: ""
description: 'Your RuneScape: DragonWilds Player ID (bottom of in-game Settings). Required for server to boot.'
showOnDeploy: true
title: Owner Player ID
type: string
x-savedValue:
key: DRAGONWILDS_PLAYER_ID
label: Dragonwilds Player ID
PlatformPolicy:
category: Security & Access
default: Crossplay
description: Controls platform authorization and crossplay access policies.
enum:
- Crossplay
- PC
- PlayStation
- Xbox
- Nintendo
title: Platform Policy
type: string
ServerName:
category: System & General
default: GBRHosting - {SERVER_NAME}
description: Display name of the dedicated server. Defaults to "GBRHosting - <your server name>".
showOnDeploy: true
title: Server Name
type: string
WorldPassword:
category: Security & Access
default: ""
description: Optional password for players to join. Leave empty for public access.
showOnDeploy: true
title: World Password
type: string
x-savedValue:
key: GAME_JOIN_PASSWORD
label: Game join password
secret: true
required:
- OwnerId
- AdminPassword
type: object
configFilePath: RSDragonwilds/Saved/Config/LinuxServer/DedicatedServer.ini
configFileFormat: STANDARD
configFormatOptions:
assignment: =
falseValue: "False"
footer: ""
header: |
[/Script/Dominion.DedicatedServerSettings]
quoteStrings: false
separator: ""
trueValue: "True"
uppercaseKeys: false
agnosticCommandConfig:
actions:
Ban:
type: UNSUPPORTED
Broadcast:
type: UNSUPPORTED
Kick:
type: UNSUPPORTED
Save:
type: UNSUPPORTED
playerJoinRegex: 'LogNet: Join succeeded: ([^\r\n]+)'
playerLeaveRegex: 'LogNet: UNetConnection::.*Player(?: name)?:\s*([^,\r\n]+)'
queryType: LOG_ONLY
logFilePath: RSDragonwilds/Saved/Logs/RSDragonwilds.log
backupPaths:
- RSDragonwilds/Saved
maxBackupSizeMb: 5000
publicIpConfigKey: MULTIHOME
maxPlayersConfigKey: MaxPlayers
aiCoverPrompt: 'A cinematic wide shot of Ashenfall in the fantasy world of Gielinor from RuneScape: Dragonwilds. Ancient stone spires and forgotten fortresses rise amidst untamed wilderness. Colossal ancient dragons circle through stormy twilight skies illuminated by magical embers, while adventurers gather around a runic encampment wielding enchanted sorcery and survival gear.'