Sign inSign up

faulo/ci-tools

By faulo

•Updated 4 days ago

Command-line tools for Steam and itch.io publishing in Linux and Windows containers

Image
0

2.1K

faulo/ci-tools repository overview

⁠CI tools for Linux and Windows containers

Docker Docker image updated License: MIT Platforms: Linux and Windows amd64

faulo/ci-tools⁠ provides command-line tools for uploading builds to Steam and itch.io. Run individual commands with Docker, use the image in a CI pipeline, or extend it with your own build tools.

⁠Available images

TagPlatformsRuntime bases
latestLinux amd64, Windows amd64Debian Trixie Slim; Windows Server Core LTSC 2019 through faulo/choco⁠
latest-linux-amd64Linux amd64Debian Trixie Slim
latest-windows-ltsc2019Windows amd64Windows Server Core LTSC 2019 through faulo/choco

Docker selects the platform matching your daemon. Windows containers require a compatible Windows host. Pin an individual image digest when you need an exact image. Images are rebuilt monthly to pick up dependency updates.

Use latest for automatic platform selection, or a target-specific tag to select Linux amd64 or Windows LTSC 2019 explicitly. The intermediate latest-linux and latest-windows tags select an operating system. Tags receive updates in place; pin an image digest for a reproducible base.

⁠Included tools

CommandPurpose
butlerUpload builds to itch.io.
steamcmdDownload and publish Steam content.
steam-buildfile [ARG...]Generate a Steam app-build VDF.
steam-login [ARG...]Sign in to Steam using Steam and mailbox credentials.
php, composer, nodeRuntime tools, including PHP 8.4 with IMAP and XSL.
pwshPowerShell Core, available on Windows.

The Steam helper commands use slothsoft/unity⁠ through Composer. Run steam-buildfile without arguments, or steam-login unexpected-argument, to display their usage.

⁠Quick start

Generate a Steam app-build VDF on Linux, with your content in a local depot directory:

docker run --rm -v "$PWD:/workspace" faulo/ci-tools:latest steam-buildfile /workspace /workspace/logs 1000 2000=depot preview

Upload a local build to itch.io on Linux:

docker run --rm -e BUTLER_API_KEY -v "$PWD/build:/build:ro" faulo/ci-tools:latest butler push /build username/game:channel

The image declares no entrypoint, so you can replace the complete command. The default command is bash on Linux and cmd.exe on Windows. Interactive containers and overridden commands such as cat or cmd.exe are supported.

Commands are on PATH and also work with docker exec:

docker run -dit --name ci-tools faulo/ci-tools:latest
docker exec ci-tools steam-buildfile
docker rm -f ci-tools

The explicit forms ci-tools-launcher steam-buildfile [ARG...] and ci-tools-launcher steam-login [ARG...] are also available. Shorthands use executable shell wrappers on Linux and ShimGen executables on Windows. The launcher preserves the working directory, argument boundaries, attached standard streams, and child exit status, and manages termination and deadlines.

⁠Persistent Steam state

Mount a named volume to retain SteamCMD downloads and authentication state:

PlatformMount
Linuxsteam:/root/Steam
Windowssteam:C:/steam

For example, on Linux:

docker run --rm -v steam:/root/Steam faulo/ci-tools:latest steamcmd +quit

On Windows:

docker run --rm -v steam:C:/steam faulo/ci-tools:latest steamcmd +quit

The Windows launcher bootstraps SteamCMD into the volume on first use. On Linux, steamcmd invokes Valve's launch script with the native 64-bit client, so self-updates can restart the client before running the requested commands.

⁠Credentials and timeouts

Steam login accepts environment variables or file-backed credentials:

CredentialEnvironment variablesFile-backed variables
SteamSTEAM_CREDENTIALS_USR, STEAM_CREDENTIALS_PSWSTEAM_CREDENTIALS_USR_FILE, STEAM_CREDENTIALS_PSW_FILE
MailboxEMAIL_CREDENTIALS_USR, EMAIL_CREDENTIALS_PSWEMAIL_CREDENTIALS_USR_FILE, EMAIL_CREDENTIALS_PSW_FILE

Each username/password pair may mix direct and file-backed inputs. A variable and its _FILE form cannot both be set, and configured pairs must be complete. Missing, unreadable, or empty credential files fail before the child command starts. One trailing line ending is removed; other whitespace is preserved. Resolved values are passed only to the child process.

With credentials already exported in your shell, sign in on Linux:

docker run --rm -e STEAM_CREDENTIALS_USR -e STEAM_CREDENTIALS_PSW -e EMAIL_CREDENTIALS_USR -e EMAIL_CREDENTIALS_PSW -v steam:/root/Steam faulo/ci-tools:latest steam-login

Set CI_TOOLS_CALL_TIMEOUT to limit each Steam helper call in seconds. Its default is 86400; 0 disables the launcher deadline. A deadline returns exit code 124, and an interrupted call returns 130.

⁠Extending and building the image

Both Dockerfiles use the repository root as their build context. Shared launcher sources live in common/; platform-specific packages and inputs live in linux/ and windows/. A .NET SDK compiles the native launchers in a separate build stage.

Build argumentDefaultPurpose
TOOL_TIMEOUT14400Composer's child-process timeout in seconds.
NODE_VERSION24Linux Node.js major release.
BASE_IMAGEfaulo/choco:windowsservercore-ltsc2019Windows runtime base with Chocolatey and choco-install.

Build from the repository root using a Docker engine configured for the chosen container OS. Run the appropriate command for that engine:

docker build -f linux/Dockerfile -t tmp/ci-tools:latest .
docker build -f windows/Dockerfile -t tmp/ci-tools:latest .

⁠Development checks

Run the launcher unit tests from the repository root with the .NET 9 SDK:

dotnet test common/CiTools.Tests/CiTools.Tests.csproj --configuration Release

The repository also includes image integration tests for the installed tools, launcher behavior, SteamCMD state, and authenticated Steam login on Linux and Windows. Steam login coverage requires the credentials listed above.

⁠Maintenance and updates

Linux amd64 and Windows Server Core LTSC 2019 images are rebuilt monthly. Recreate containers or rebuild downstream images with docker build --pull to adopt updates. Persist Steam state separately from the container layer.

⁠Support and contributions

Open an issue⁠ with the image tag or digest, container OS, command, and a minimal reproduction. For installer failures, include the package version and Windows host version and isolation mode. Remove credentials from logs before sharing them.

Pull requests are welcome. Include tests for changes to launcher behavior and update the documentation when public commands or image contents change.

⁠License

The original code, Dockerfiles, scripts, and documentation are licensed under the MIT License⁠. Bundled tools and base images retain their respective licenses; Steam and itch.io services remain subject to their own terms.

Tag summary

Content type

Image

Digest

sha256:23aefdd04…

Size

269.8 MB

Last updated

4 days ago

docker pull faulo/ci-tools