cryptiklemur/Build Steam game image

Download a Steam game with steamcmd and push it as a private OCI image to a registry you control.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Activelast commit Jun 26, 2026
License
MIT

Pinned Snippet

workflow.ymlSHA-pinned
uses: cryptiklemur/steam-game-image-action@b8518cf91bccdb64208c684f0d4a6d87263da410 # v1.0.6

tags can be moved; commit SHAs can't. why a SHA?

namedescriptionrequireddefault
steam-usernameSteam account name that owns the game and matches the config.vdf session.yes
steam-config-vdfBase64-encoded steamcmd config.vdf for a logged-in session (a repo secret).yes
app-idSteam app id to download.no294100
branchSteam branch to install (e.g. public, 1.5, 1.4).nopublic
branch-passwordPassword for a password-protected beta branch (optional).no""
imageTarget image ref WITHOUT a tag, e.g. ghcr.io/you/rimworld-game.yes
registryRegistry host for auth (default ghcr.io).noghcr.io
registry-usernameRegistry username (default the GitHub actor).no${{ github.actor }}
registry-passwordRegistry token/password. For GHCR pass secrets.GITHUB_TOKEN (needs packages: write).yes
base-imageBase image to append the game layer onto. Empty = auto (runtime-base if runnable, else a minimal base).no""
runnabletrue = append onto the xvfb/native-deps runtime base (launchable); false = minimal build/reference base.notrue
runtime-base-imageOverride the default public runtime base image.noghcr.io/cryptiklemur/steam-game-image-action/runtime-base:latest
minimal-base-imageBase used when runnable=false.nodebian:stable-slim
game-pathPath the game is placed at inside the image.no/game
platformImage platform.nolinux/amd64
crane-versiongo-containerregistry (crane) version to install.no0.20.2
skip-if-unchangedtrue = compare the published buildid to the image's steam.buildid label and skip when unchanged.notrue
include-pathsSpace/newline-separated subpaths (relative to the game install dir) to include in the image. Empty (default) = the whole game (runnable). Set e.g. 'RimWorldLinux_Data/Managed' for a tiny build/reference image with just the managed assemblies. Pair a subset with runnable=false.no""
namedescription
image-refImage ref to consume: image:version when built, image:latest-<branch> when the build was skipped.
versionThe version tag used.
buildidThe Steam buildid that was built.
skippedtrue if the build was skipped because the buildid was unchanged.