setup-steamcmd@v1.4.1#12
Merged
StephenHodgson merged 3 commits intoMay 31, 2026
Merged
Conversation
…update
On Linux, steamcmd self-updates on first launch and steamcmd.sh then
re-execs ${STEAMROOT}/linux/steamcmd, but the binary stays under
linux32/. The second invocation fails with 'Couldn't find steamcmd at
.../linux/steamcmd'. Mirror linux32 -> linux next to steamcmd.sh so the
re-exec resolves.
Member
|
Thank you! I'll get this releases by the end of the day |
Member
|
idk why codeQL didn't run. will bypass |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
On Linux runners, the first time
steamcmdis invoked aftersetup-steamcmdruns, it fails with:It reproduces in a matrix like:
macOS and Windows are unaffected (this action already handles their bootstrap quirks — Windows' self-update relaunch exit code, etc.). Linux is the only failure.
Root cause
steamcmdself-updates on its first launch (this happens insidegetVersion()during setup). After the update, Valve'ssteamcmd.shre-execs itself via:but the post-update layout leaves the actual binary under
linux32/while the re-exec resolves${STEAMROOT}/linux/steamcmd— so the second invocation can't find the binary and exits 1.${STEAMROOT}ispath.dirname(steamcmd.sh), which on a cache miss is the download dir ($RUNNER_TEMP/steamcmd) — matching the error path above.The action's own
getVersion()(steamcmd.sh +quit) succeeds because it runs before this mismatch bites; the failure only surfaces on the nextsteamcmdcall the consumer makes.Fix
In the
IS_LINUXbranch offindOrDownload(), after writing thesteamcmdwrapper, mirrorlinux32 -> linuxnext tosteamcmd.sh(usingpath.dirname(tool), which is correct for both the cache-miss download dir and the cache-hit tool dir):It's a no-op if
linux32/is absent (future layout changes) or iflinux/already exists, so it's safe across steamcmd versions.How I diagnosed it
Hit this in a real 3-OS Steam deploy where Windows/macOS went green via this action but Linux failed. The CI logs showed
steamcmd.shre-execing.../linux/steamcmdwhile the binary sat at.../linux32/steamcmd, which lines up with theSTEAM_PLATFORM:-linux32resolution in Valve'ssteamcmd.sh. I then confirmed the fix by applying the equivalentln -sfn linux32 linuxas a workflow-level step right aftersetup-steamcmd— the Linux deploy went green on a realubuntu-latestrunner. This PR moves that workaround into the action so consumers don't need it.Testing notes
npx tsc --noEmitis clean;dist/rebuilt withncc(per thebuildscript).ubuntu-latestGitHub runner (Linux Steam depot upload succeeded). I couldn't run the action's own matrix on Linux locally because steamcmd's 32-bit binary segfaults under amd64 emulation on Apple Silicon — happy to adjust if your CI surfaces anything.