diff --git a/gsm-backend/services/serverUpdates.js b/gsm-backend/services/serverUpdates.js index e2c3156..8c0947d 100644 --- a/gsm-backend/services/serverUpdates.js +++ b/gsm-backend/services/serverUpdates.js @@ -495,23 +495,28 @@ const updateHandlers = { `-v ${installHostDir}:/appdata/space-engineers/SpaceEngineersDedicated`, `-v ${steamHostDir}:/home/wine/.steam`, `mmmaxwwwell/space-engineers-dedicated-docker-linux:latest`, - `-c "runuser -l wine bash -c 'steamcmd +@sSteamCmdForcePlatformType windows +force_install_dir /appdata/space-engineers/SpaceEngineersDedicated +login anonymous +app_update ${appId} +quit'"` + `-c "runuser -l wine bash -c 'steamcmd +@sSteamCmdForcePlatformType windows +force_install_dir /appdata/space-engineers/SpaceEngineersDedicated +login anonymous +app_update ${appId} validate +quit'"` ].join(" "); const updateResult = await ssh.execCommand(updateCmd, { execOptions: { timeout: 1200000 } }); // 20 min console.log("[Update] SteamCMD output (tail):", updateResult.stdout.slice(-2000)); - const out = updateResult.stdout || ""; - const success = out.includes("Success! App '298740'") || out.includes("fully installed"); - if (!success) { - const errLine = out.match(/Error![^\n]*/)?.[0] || updateResult.stderr || "Unbekannter Fehler"; - throw new Error("Update fehlgeschlagen: " + errLine); - } - - // New build id + // Verify success by re-reading appmanifest: buildid should now match TargetBuildID (or have changed) const newManifest = await ssh.execCommand(`cat ${manifestPath} 2>/dev/null`); const newMatch = (newManifest.stdout || "").match(/"buildid"\s*"([^"]+)"/); + const newTargetMatch = (newManifest.stdout || "").match(/"TargetBuildID"\s*"([^"]+)"/); const newBuildId = newMatch ? newMatch[1] : null; + const newTargetBuildId = newTargetMatch ? newTargetMatch[1] : null; + + const stillPending = newTargetBuildId && newTargetBuildId !== "0" && newTargetBuildId !== newBuildId; + const buildChanged = oldBuildId && newBuildId && oldBuildId !== newBuildId; + const out = updateResult.stdout || ""; + const reportedSuccess = out.includes("Success! App '298740'") || out.includes("fully installed"); + + if (!buildChanged && !reportedSuccess && stillPending) { + const errLine = out.match(/Error![^\n]*/)?.[0] || updateResult.stderr || "SteamCMD meldet noch ausstehendes Update"; + throw new Error("Update fehlgeschlagen: " + errLine); + } return { success: true,