Skip to content

Remmik/steam-deploy

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Steam Deploy

GitHub Action to deploy game builds to Steam via steamcmd. Runs directly on the runner. Works on ubuntu-latest, self-hosted Linux, Kubernetes runner pods, and ARM machines.

Usage

- uses: remmik/steam-deploy@v0
  with:
    appId: '4663600'
    buildDescription: 'v1.0.0'
    rootPath: steampipe-content
    depots: |
      4663601 windows
      4663602 macos
      4663603 linux
    releaseBranch: develop
    username: ${{ secrets.STEAM_USERNAME }}
    configVdf: ${{ secrets.STEAM_CONFIG_VDF }}

Single depot (simplest case)

If you have a single build directory, skip depots entirely. The action uploads rootPath as depot appId + 1:

- uses: remmik/steam-deploy@v0
  with:
    appId: '4663600'
    rootPath: build/output
    releaseBranch: main
    username: ${{ secrets.STEAM_USERNAME }}
    configVdf: ${{ secrets.STEAM_CONFIG_VDF }}

Inputs

Input Required Description
appId Yes Steam Application ID
buildDescription No Description shown in Steamworks
rootPath Yes Root path to the build content directory
depots No Newline-separated depotId path mappings (path relative to rootPath)
releaseBranch Yes Steam branch to set live after upload
username Yes Steam username
configVdf Yes Base64-encoded config.vdf for authentication

Outputs

Output Description
buildId Steam BuildID of the uploaded build

Authentication

This action uses Steam's config.vdf for authentication, the same approach used by most CI/CD Steam deploy setups.

Generating config.vdf

  1. Install steamcmd locally
  2. Log in with your Steam builder account:
    steamcmd +login <username> <password> +quit
    
  3. Complete the SteamGuard prompt
  4. Base64-encode the generated config file:
    base64 -w 0 ~/Steam/config/config.vdf
    
  5. Store the output as a GitHub secret (STEAM_CONFIG_VDF)

Note: The config.vdf contains your cached login token. It expires periodically. You'll need to regenerate it when deploys start failing with auth errors.

Why not game-ci/steam-deploy?

game-ci/steam-deploy is a Docker-based action. This causes real problems:

  • Self-hosted runners: Docker isn't always available (Kubernetes pods, ARM machines, hardened hosts)
  • Permission errors: Docker volume mounts cause file permission issues across runs (/usr/bin/tar permission denied, files that can't be cleaned up)
  • Pull failures: docker pull can fail with "Pull access denied" errors
  • Windows: Docker Linux containers don't run on Windows runners

This action runs steamcmd directly on the runner, avoiding all of these.

Migrating from game-ci/steam-deploy

Replace the numbered depot*Path/depot*Id inputs with the depots input:

# Before (game-ci/steam-deploy)
- uses: game-ci/steam-deploy@v3
  with:
    appId: '4663600'
    rootPath: steampipe-content
    depot1Path: windows
    depot2Path: macos
    depot3Path: linux
    releaseBranch: develop
    username: ${{ secrets.STEAM_USERNAME }}
    configVdf: ${{ secrets.STEAM_CONFIG_VDF }}

# After (remmik/steam-deploy)
- uses: remmik/steam-deploy@v0
  with:
    appId: '4663600'
    rootPath: steampipe-content
    depots: |
      4663601 windows
      4663602 macos
      4663603 linux
    releaseBranch: develop
    username: ${{ secrets.STEAM_USERNAME }}
    configVdf: ${{ secrets.STEAM_CONFIG_VDF }}

The depots format makes the depot-to-directory mapping explicit rather than relying on positional numbering.

License

MIT

About

Deploy game builds to Steam via steamcmd on any Linux runner

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages