RenPy CI (Continuous integration)
A downloadable CI
Continuous integration, automated building, and multi-channel distribution pipeline for Ren'Py visual novels and games on GitHub Actions.
Features headless SDK installation, bytecode compilation, static linting, multi-platform distribution packaging, GitHub Releases, automated itch.io deployments via Butler, and SteamPipe uploads with Valve Steam DRM wrapping.
Features
- Automated SDK Setup: Downloads and configures any official Ren'Py SDK (7.x and 8.x series).
- Steamworks SDK Integration: Automatically downloads and installs Steam support libraries into the Ren'Py SDK runtime (
install-steam: true). - Headless Virtual Displays: Built-in dummy audio and video drivers (
SDL_VIDEODRIVER=dummy,SDL_AUDIODRIVER=dummy) for reliable execution in non-interactive runner environments. - Code Quality & Bytecode: Static analysis via
renpy lintand compilation viarenpy compile. - Packaging Engine: Builds platform distributions headlessly (
market,pc,win,mac,linux,all). - Multi-Channel Publishing:
- GitHub Releases: Automatic creation of releases with attached game archives and generated changelogs.
- itch.io (Butler): Direct pushes to target itch.io channels with automatic channel resolution.
- Steam (SteamPipe & DRM): Automatic generation of
app_buildanddepot_buildVDFs, in-place Steam DRM wrapping, and depot upload in a single atomic SteamCMD session.
- Self-Hosted Runner Support:
- Automatic 32-bit multiarch runtime library setup (
lib32gcc-s1,libc6:i386,lib32stdc++6) for SteamCMD. - Node.js runtime fallback ensuring execution on minimal hosts.
- Automated post-job workspace and temporary build cleanup (
use-self-hosted: true) to protect VPS disk space. - Persistent host session preservation to eliminate repeated Steam Guard 2FA challenges.
- Automatic 32-bit multiarch runtime library setup (
Technical Notes
- PE Header Sanitization for Steam DRM: MinGW-compiled 64-bit Windows executables built by Ren'Py often contain PE Data Directory 5 (Base Relocations) pointing to an unmapped RVA (
0x1F000), which causes Valve's DRM wrapper tool to fail withInvalid data directory 5 VA range: Not a valid PE code module(EResult 8). RenPy CI inspects and sanitizes the PE header in-place before wrapping, ensuring 100% reliable DRM application. - Atomic SteamCMD Session: DRM wrapping and SteamPipe depot uploading are chained in a single unified SteamCMD command (
+login ... +drm_wrap ... +run_app_build ... +quit). This ensures that an authenticated session is established once, preventing invalidation or disappearing push notifications in the Steam Mobile app. - Headless Audio and Graphics: Automatically configures dummy audio and video drivers to allow execution on headless Linux runners without requiring an active X server, pulse audio daemon, or display.
- Secret Masking: All sensitive credentials passed for SteamCMD and Butler are securely masked in CI execution logs.
License
This project is licensed under the UnSetSoft Public License (UPL) 1.0. See the LICENSE file for terms and conditions.
Important
Please report any comments or bugs correctly in the GitHub repository. You are also welcome to contribute to the GitHub repository by fixing and patching any bugs you may find.
This tool should help streamline automatic releases on itch.io and Steam, as well as keep your game code in sync with updates.
| Published | 11 days ago |
| Status | Released |
| Category | Other |
| Author | KagariSoft |
| Genre | Visual Novel |
| Tags | continuous-integration, Ren'Py, tool |
| Content | No generative AI was used |
Download
Click download now to get access to the following files: