diff --git a/cmd/gbrgames/boottest.go b/cmd/gbrgames/boottest.go index 2b6167e..7ad80b4 100644 --- a/cmd/gbrgames/boottest.go +++ b/cmd/gbrgames/boottest.go @@ -119,6 +119,7 @@ func runBootTestPayload(args []string) error { "configFormatOptions": g["configFormatOptions"], "startupCommand": g["defaultStartupCommand"], "memoryLimitMb": g["requiredMemoryMb"], + "containerUser": g["containerUser"], "dockerNetwork": bootTestNetwork, "logFilePath": g["logFilePath"], "readyPattern": g["readyPattern"], diff --git a/cmd/gbrgames/import.go b/cmd/gbrgames/import.go index 5ad9848..79da1d5 100644 --- a/cmd/gbrgames/import.go +++ b/cmd/gbrgames/import.go @@ -18,7 +18,7 @@ import ( // (enabled, allowPaidHosting, allowPrivateHosting, imageUrl) are deliberately left out. var gameFields = []string{ "id", "name", - "defaultDockerImage", "defaultStartupCommand", "requiredMemoryMb", "requiredDiskMb", "defaultPorts", + "defaultDockerImage", "containerUser", "defaultStartupCommand", "requiredMemoryMb", "requiredDiskMb", "defaultPorts", "installMethod", "installConfig", "defaultConfig", "configSchema", "configFilePath", "configFileFormat", "configFormatOptions", "agnosticCommandConfig", "clusterConfig", diff --git a/games/ark-survival-ascended-crossplay/game.yaml b/games/ark-survival-ascended-crossplay/game.yaml index e34b705..06038f9 100644 --- a/games/ark-survival-ascended-crossplay/game.yaml +++ b/games/ark-survival-ascended-crossplay/game.yaml @@ -2,7 +2,8 @@ id: ark-survival-ascended-crossplay name: 'ARK: Survival Ascended (Crossplay Dedicated Server)' defaultDockerImage: mschnitzer/asa-linux-server:latest -defaultStartupCommand: bash -c 'mkdir -p /server /data/Steam /data/steamcmd /data/cluster-shared && rm -rf /home/gameserver/server-files /home/gameserver/Steam /home/gameserver/steamcmd /home/gameserver/cluster-shared && ln -sfn /server /home/gameserver/server-files && ln -sfn /data/Steam /home/gameserver/Steam && ln -sfn /data/steamcmd /home/gameserver/steamcmd && ln -sfn /data/cluster-shared /home/gameserver/cluster-shared && export ASA_START_PARAMS="${ASA_START_PARAMS:-${SERVER_MAP:-TheIsland_WP}?listen?Port=${PORT:-7777}?RCONPort=${RCON_PORT:-27020}?RCONEnabled=True -WinLiveMaxPlayers=${MAX_PLAYERS:-70} -ServerPlatform=ALL}" && exec /usr/bin/start_server' +containerUser: "25000:25000" +defaultStartupCommand: bash -c 'mkdir -p /server /data/Steam /data/steamcmd /data/cluster-shared && rm -rf /home/gameserver/server-files /home/gameserver/Steam /home/gameserver/steamcmd /home/gameserver/cluster-shared && ln -sfn /server /home/gameserver/server-files && ln -sfn /data/Steam /home/gameserver/Steam && ln -sfn /data/steamcmd /home/gameserver/steamcmd && ln -sfn /data/cluster-shared /home/gameserver/cluster-shared && export ASA_START_PARAMS="${ASA_START_PARAMS:-${SERVER_MAP:-TheIsland_WP}?listen?Port=${PORT:-7777}?RCONPort=${RCONPORT:-27020}?RCONEnabled=True -WinLiveMaxPlayers=${MAX_PLAYERS:-70} -ServerPlatform=ALL}" && exec /usr/bin/start_server' requiredMemoryMb: 16384 requiredDiskMb: 32768 defaultPorts: diff --git a/games/ark-survival-ascended-crossplay/test.yaml b/games/ark-survival-ascended-crossplay/test.yaml index 1b49f91..f3ff373 100644 --- a/games/ark-survival-ascended-crossplay/test.yaml +++ b/games/ark-survival-ascended-crossplay/test.yaml @@ -1,3 +1,6 @@ # yaml-language-server: $schema=../../schema/test.schema.json # Values CI uses to boot-test this game. Never put real credentials here: map them under 'secrets'. -timeoutSec: 900 +# No readyPattern yet: the server must stay up for 10 minutes, which covers the ~13 GB first +# download and Proton's slow first start. +settleSec: 600 +timeoutSec: 2400 diff --git a/schema/game.schema.json b/schema/game.schema.json index 1287166..7ba4bf9 100644 --- a/schema/game.schema.json +++ b/schema/game.schema.json @@ -16,6 +16,11 @@ "name": { "description": "Display name shown to users.", "type": "string", "minLength": 1 }, "defaultDockerImage": { "description": "Image the game server runs in.", "type": "string", "minLength": 1 }, + "containerUser": { + "description": "uid:gid the server runs as, for images built around their own user (ARK's needs 25000:25000). Defaults to 1000:1000; root is never allowed.", + "type": ["string", "null"], + "pattern": "^[1-9][0-9]{0,8}:[1-9][0-9]{0,8}$" + }, "defaultStartupCommand": { "description": "Command run inside the container. May use config placeholders.", "type": ["string", "null"] }, "requiredMemoryMb": { "type": ["integer", "null"], "minimum": 128 }, "requiredDiskMb": { "type": ["integer", "null"], "minimum": 128 },