Heal Bot
A healer-only RPG where you keep everyone alive.
The Pitch
You play as Mira, an ancient healer who refuses to fight. Your party of adventurers attacks on their own. Your job? Keep them breathing. Right spell, right time, right target.
Lore
Mira spent forty years mastering one thing: how to escape. She's unkillable, she always teleports out. Everything else came after. Now she collects spells obsessively, because she remembers what it's like to have nothing when someone is dying.
Three fighters follow her into dungeons. They swing swords and loose arrows. She watches health bars.
How It Plays
- ATB combat: real-time with timers (think Final Fantasy). Your party auto-attacks. You cast heals, buffs, and debuffs.
- No damage spells. Ever. You keep people alive or you don't.
- Tavern hub: between runs, upgrade your party, buy spells, craft gear, read party banter.
- Roguelike structure: pick a quest, fight through encounters, earn materials, get stronger. Die and you're back at the tavern.
- Overworld events: random choices between fights. Help a stranger, open a trapped chest, pray at a shrine.
Style
2D pixel art. Dark fantasy with warm tavern contrast. Old-school RPG feel, modern design sensibility. Solo dev project built in Godot 4.
Status
In development. Pre-alpha playtest coming soon.
Join the Discord
Setting Up CI/CD for a Solo Godot Project (For Free)
I spent an evening setting up automated testing and release builds for Heal Bot. The goal: push a tag, get tested binaries for Linux/Windows/macOS on GitHub Releases, and a Discord notification. All self-hosted, zero monthly cost.
Why Bother?
Solo dev doesn't mean solo QA. I have 47 automated tests that catch broken spells, corrupt saves, missing resources, and combat logic bugs. Every push to main runs them. If I break something at 2am, I know before my playtesters do.
The Setup
A Docker container on my TrueNAS NAS runs a GitHub Actions self-hosted runner. Inside: Fedora 41, Godot 4.5.1 headless, and export templates for all three platforms. It idles at ~50MB RAM and picks up jobs the moment GitHub dispatches them.
The pipeline:
Push to main → run 47 tests → pass/fail on GitHub
Push a tag → run tests → export builds → create GitHub Release → post to Discord
Cross-compilation works out of the box. Linux, Windows, and macOS builds all export from the same Linux container. macOS builds are unsigned (playtesters right-click → Open), which is fine for now.
The Test Framework
I wrote a minimal test runner in GDScript with no external dependencies. Drop a test_*.gd file in the tests directory, add methods starting with test_, return true or an error string. Auto-discovered, runs headless, exits with code 0 or 1 for CI.
There's also a coverage guard: if I add a new spell .tres file without adding a corresponding test, CI fails and tells me what's untested. Forced accountability.
Was It Worth It?
For a solo project? Honestly, the tests are more valuable than the pipeline. Catching a broken save format or a spell that silently does nothing is hours of debugging saved. The release pipeline is just convenience on top.
But the real win: my playtest friend gets a Discord ping with download links the moment I tag a release. No "hey can you download this zip I uploaded somewhere." Professional workflow, hobby project.