Release automation · Released
Butler itch.io Deployment turns game publishing into a repeatable GitHub Actions job. A push to the main branch builds or selects the game files, installs itch.io’s Butler command-line tool, and sends each platform build to the correct itch.io channel.
The workflow also supports a manual run from GitHub Actions. This gives a developer control over release timing without rebuilding the upload commands on a local machine.
The standard publishing workflow
The general workflow publishes an existing build folder. It includes examples for:
- HTML games from a
wwwfolder - Windows builds
- macOS builds
- Linux builds
- several platform builds in one release job
Each upload follows the same Butler pattern:
butler push build-folder username/game-name:channel
The folder points to the game files. The project name identifies the itch.io page. The channel tells itch.io whether the upload belongs to HTML, Windows, macOS, or Linux.
One release job might use:
butler push www username/game-name:html
butler push build/windows username/game-name:windows
butler push build/macos username/game-name:mac
butler push build/linux username/game-name:linux
Developers remove the platforms they do not ship and replace the sample project name with their itch.io account and game slug.
Secure itch.io access
The workflow reads the Butler API key from a GitHub Actions secret named BUTLER_API_KEY. The key stays out of the workflow file and game source.
The secret enters the environment only during the upload step:
env:
BUTLER_API_KEY: $
This setup avoids storing a release credential in source files or repeating it in local shell history.
Turbo game builds
A second workflow handles web games made with the Turbo game engine. It prepares Rust, adds the WebAssembly target, installs the Turbo CLI, and runs turbo export.
Turbo writes the HTML and WebAssembly build to www. Butler then publishes the folder to the itch.io HTML channel.
This path joins build and release work in one job:
- Check out the game source.
- Prepare Rust and WebAssembly.
- Install the Turbo CLI.
- Export the web build.
- Install Butler.
- Publish the build to itch.io.
Why I use it
Manual uploads are easy to forget or perform differently from one release to the next. This workflow keeps platform folders, itch.io channels, credentials, and release steps in one visible process.
GitHub Actions records each run and its output. A failed build or upload leaves a log, while a successful run publishes the same way every time.
The templates work as a starting point. A game project still needs its own build folders, itch.io page, API secret, account name, game slug, and selected platform channels.
- Role
- Developer
- Technologies
- GitHub Actions, YAML, Butler, itch.io, Turbo, Rust, WebAssembly