Skip to content
docker · infrastructure · steam

Steam upload baseSteamCMD Ubuntu

An Ubuntu 24.04 Docker base image with steamcmd preinstalled, used for local config.vdf capture and the CI Steam build upload step — no credentials baked in.

No credentials baked in

Each consumer brings its own config.vdf — a volume mount locally, or the STEAM_CONFIG_VDF secret restored in CI. Steam Guard mobile auth runs once; the resulting machine token blob authenticates Linux runners on subsequent runs.

  • Local — interactive docker run to capture the vdf.
  • CI — ci-unity.yml deploy_steam runs run_app_build.
steamcmd-ubuntuImage
Ubuntu 24.04Base
24.04Tag
none bakedCreds

What it gives you

Features

steamcmd preinstalled

steamcmd lives at /opt/steamcmd/ with a /usr/local/bin/steamcmd shim for direct invocation.

No credentials baked in

Each consumer supplies its own config.vdf — a volume mount locally or the STEAM_CONFIG_VDF secret in CI.

Build-time self-update

Self-update runs at image build time so the first invocation isn't paying the steamcmd bootstrap cost.

32-bit runtime dep

lib32gcc-s1 is the one non-obvious runtime dependency — steamcmd is a 32-bit Linux binary.

What it is

Overview & image hygiene

Ubuntu 24.04 base with steamcmd preinstalled at /opt/steamcmd/, plus a /usr/local/bin/steamcmd shim for direct invocation.

Two consumers:

  1. Local — interactive docker run -it --rm -v ~/steam-export:/export ghcr.io/kbve/steamcmd-ubuntu:24.04 bash to capture a Linux-flavored config.vdf for the STEAM_CONFIG_VDF GitHub secret. Steam Guard mobile auth runs once; the resulting machine token blob authenticates Linux runners on subsequent CI runs.
  2. CIci-unity.yml’s deploy_steam job uses this image to run steamcmd +run_app_build against the demo / main app_build_<label>.vdf configs.
  • No credentials baked in. Each consumer brings its own config.vdf (volume mount locally, secret restore in CI).
  • Self-update runs at image build time so first invocation isn’t paying the steamcmd bootstrap cost.
  • lib32gcc-s1 is the only non-obvious runtime dep — steamcmd is a 32-bit Linux binary.

Capture config.vdf

Local capture flow

Terminal window
mkdir -p ~/steam-export
docker run -it --rm -v ~/steam-export:/export ghcr.io/kbve/steamcmd-ubuntu:24.04 bash
# inside:
# steamcmd +login h0lybyte → password + Steam Guard mobile confirm
# quit
# cp /root/Steam/config/config.vdf /export/
# exit
base64 -i ~/steam-export/config.vdf -o /tmp/steam_config.b64
gh secret set STEAM_CONFIG_VDF --repo kbve/kbve < /tmp/steam_config.b64
rm -rf /tmp/steam_config.b64 ~/steam-export

Publish

Pipeline

pipeline: docker → manifest fan-out builds + pushes to ghcr.io/kbve/steamcmd-ubuntu:24.04 whenever version here outpaces version.toml.

Questions

Frequently asked

What is the steamcmd-ubuntu image for?

It is an Ubuntu 24.04 base image with steamcmd preinstalled, used for local config.vdf capture and the CI Steam build upload step in ci-unity.yml.

Are Steam credentials baked into the image?

No. Each consumer brings its own config.vdf — a volume mount locally, or the STEAM_CONFIG_VDF secret restored in CI.

Why is lib32gcc-s1 installed?

steamcmd is a 32-bit Linux binary, so lib32gcc-s1 is the one non-obvious runtime dependency the image needs.