From 9fef27cd4025c48f4afe82427939547497d134e4 Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 25 Oct 2026 02:25:45 -0400 Subject: [PATCH 1/2] fix(ark): retry the server install before handing over to the image The image's start_server runs SteamCMD once and carries on even when it fails; SteamCMD's intermittent "Missing configuration" error then left no server installed, so ARK exited and only the node's restart policy saved it (a boot test would fail on the restart). First boot showed it. The startup command now downloads SteamCMD if missing, runs the usual "+login anonymous +quit" warm-up and installs app 2430930, retrying up to three times until ArkAscendedServer.exe exists. start_server's own install step then only validates. Co-Authored-By: Claude Opus 5.5 --- games/ark-survival-ascended-crossplay/game.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/games/ark-survival-ascended-crossplay/game.yaml b/games/ark-survival-ascended-crossplay/game.yaml index 06038f9..59809ad 100644 --- a/games/ark-survival-ascended-crossplay/game.yaml +++ b/games/ark-survival-ascended-crossplay/game.yaml @@ -3,7 +3,7 @@ id: ark-survival-ascended-crossplay name: 'ARK: Survival Ascended (Crossplay Dedicated Server)' defaultDockerImage: mschnitzer/asa-linux-server:latest 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' +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 && (cd /home/gameserver/steamcmd && { [ -x steamcmd.sh ] || wget -qO- https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar xz; } && for i in 1 2 3; do ./steamcmd.sh +login anonymous +quit; ./steamcmd.sh +force_install_dir /home/gameserver/server-files +login anonymous +app_update 2430930 validate +quit; [ -f /home/gameserver/server-files/ShooterGame/Binaries/Win64/ArkAscendedServer.exe ] && break; echo "ARK install attempt $i failed, retrying in 15s"; sleep 15; done) && 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: -- 2.30.2 From 65cbb8cfd4ccc66c32ec7efdc86838af1535e61d Mon Sep 17 00:00:00 2001 From: Greg Date: Sun, 25 Oct 2026 02:35:52 -0400 Subject: [PATCH 2/2] feat(ark): ready when advertising for join First boot with the install fix ran ARK for ~10 minutes and found, in ShooterGame.log: "Server: ... has successfully started!", "EOS ownership validation initialized: Success", "Full Startup: 36.26 seconds" and, about two minutes later, "Server has completed startup and is now advertising for join. (9.96GB Mem)". That last line is when players, console players through EOS included, can join, so it is the readyPattern; the real line is test.yaml's readyExample. Boot tests now wait for it instead of only checking ARK stays up for 10 minutes. Co-Authored-By: Claude Opus 5.5 --- games/ark-survival-ascended-crossplay/game.yaml | 1 + games/ark-survival-ascended-crossplay/test.yaml | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/games/ark-survival-ascended-crossplay/game.yaml b/games/ark-survival-ascended-crossplay/game.yaml index 59809ad..460f979 100644 --- a/games/ark-survival-ascended-crossplay/game.yaml +++ b/games/ark-survival-ascended-crossplay/game.yaml @@ -325,6 +325,7 @@ agnosticCommandConfig: restPortKey: null restUser: null logFilePath: ShooterGame/Saved/Logs/ShooterGame.log +readyPattern: Server has completed startup and is now advertising for join backupPaths: - ShooterGame/Saved maxBackupSizeMb: 4096 diff --git a/games/ark-survival-ascended-crossplay/test.yaml b/games/ark-survival-ascended-crossplay/test.yaml index f3ff373..5ce4a54 100644 --- a/games/ark-survival-ascended-crossplay/test.yaml +++ b/games/ark-survival-ascended-crossplay/test.yaml @@ -1,6 +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'. -# 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 +# Ready means advertising for join, which comes about 2 minutes after "Full Startup"; the first boot also +# installs ~13 GB and Proton, so the timeout is generous. +readyExample: '[2026.10.25-06.32.24:246][239]Server has completed startup and is now advertising for join. (9.96GB Mem)' timeoutSec: 2400 -- 2.30.2