Skip to content

entrypoint: retry SteamCMD app_update + compose ui bind - #6

Merged
seslly merged 2 commits into
mainfrom
fix/steamcmd-anonymous-fresh-install
Apr 28, 2026
Merged

seslly merged 2 commits into
mainfrom
fix/steamcmd-anonymous-fresh-install

Conversation

@seslly

@seslly seslly commented Apr 28, 2026

Copy link
Copy Markdown
Contributor

fresh-install bootstrap was flaky

User-reported fresh docker compose up failed with:
ERROR! Failed to install app '4129620' (Missing configuration)
ERROR: SteamCMD exited with 8

Root cause (verified by clean-container A/B): SteamCMD's anonymous app_update is flaky on the FIRST attempt within a container, then succeeds reliably on attempt #2 with no other change. Probably a Steam-side anonymous-license caching quirk that warms up after the first call. Fresh containers always hit attempt #1.

Fix: retry the heredoc-based app_update up to 3 times, gated on server_files_present (the .exe being on disk after the run). SteamCMD resumes partial downloads across retries, so we don't pay bandwidth twice. Most fresh installs succeed on attempt #2.

Switched from +command chain to stdin heredoc while we're here — heredoc reads more like the official Windrose dedicated-server FAQ examples that operators paste into interactive SteamCMD for debugging, and is functionally equivalent post-warm-up.

seslly and others added 2 commits April 27, 2026 18:02
…laky

User-reported fresh `docker compose up` failed with:
  ERROR! Failed to install app '4129620' (Missing configuration)
  ERROR: SteamCMD exited with 8

Root cause (verified by clean-container A/B): SteamCMD's anonymous
app_update is flaky on the FIRST attempt within a container, then
succeeds reliably on attempt #2 with no other change. Probably a
Steam-side anonymous-license caching quirk that warms up after the
first call. Fresh containers always hit attempt #1.

Reproduced cleanly: cold attempt #1 FAILs, #2 OK + starts downloading,
#3 resumes #2's partial download at ~50-65%. The depots are public
anonymous regardless, the credentials are valid, the manifest is
present — Steam just returns the cryptic "Missing configuration"
on the cold call and accepts the warm one.

Existing canary / prod / VPS installs were unaffected because their
populated WindowsServer/ trees mean every boot's app_update is a
verify-only no-download path that doesn't go through the failing
licensing code. So this regression silently shipped to anyone trying
a clean `docker compose up` while the live deployments kept working.

Fix: retry the heredoc-based app_update up to 3 times, gated on
server_files_present (the .exe being on disk after the run).
SteamCMD resumes partial downloads across retries, so we don't pay
bandwidth twice. Most fresh installs succeed on attempt #2.

Switched from `+command` chain to stdin heredoc while we're here —
heredoc reads more like the official Windrose dedicated-server FAQ
examples that operators paste into interactive SteamCMD for
debugging, and is functionally equivalent post-warm-up.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@seslly seslly changed the title entrypoint: retry SteamCMD app_update entrypoint: retry SteamCMD app_update + compose ui bind Apr 28, 2026
@seslly
seslly merged commit 65110df into main Apr 28, 2026
11 checks passed
@seslly
seslly deleted the fix/steamcmd-anonymous-fresh-install branch April 28, 2026 01:15

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: c71e1f1abf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/entrypoint.sh
Comment on lines +226 to +228
if server_files_present; then
rc=0
break

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Keep non-zero SteamCMD exits from being treated as success

In install_via_steamcmd, this success check promotes any run to success as soon as the server binary exists, but on populated installs that binary already exists before app_update starts (only Saved/ and JSON are stashed). If SteamCMD fails with a non-zero exit due to transient Steam/network issues, this block sets rc=0 and breaks anyway, so the script logs a successful install while silently skipping the update; after game patches this can leave the server on a stale build and cause client version mismatch failures.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant