shields.io can't fetch JSON from our self-hosted Gitea instance (not publicly reachable), so badges showed "unknown". Switched to generating self-contained SVG badge files that are served directly by Gitea's raw file API — no external service needed. Changes: - generate_badges.py: Added render_svg() to produce shields.io-style SVG badges with gradient, rounded corners, and Verdana font - Replaced xml.sax.saxutils.escape with a simple _xml_escape() to avoid bandit B406 warning (no defusedxml dependency needed) - CI workflow: Push .svg files instead of .json to badges branch - README.md and docs/index.md: Updated badge URLs to use raw SVG from the badges branch instead of shields.io endpoint Also fixed: - Coverage regex now handles 100% without decimal (was 100.00%) - doc_coverage.py: Removed redundant % in pct variable that caused double-percent (100%%) in output Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Gitea Runner Manager (GRM)
A lean command-line tool to automate the installation, configuration, and lifecycle management of Gitea Actions runners on Arch Linux, Ubuntu, and Debian hosts.
Each runner runs in an isolated rootless Docker environment under a dedicated system user, enabling multiple runners to operate in parallel on the same host without conflicts.
Pronunciation: GRM is short for Gitea Runner Manager, but say it like ГРЪМ (roughly "GRUM") — the Bulgarian word for thunder. An open-source project from Oblachno (облачно means cloudy in Bulgarian).
Quick Start
git clone https://git.oblachno.oblachno.fyi/oblachno-oss/grm.git
cd grm
make setup
cp .env.example .env # Edit with your Gitea URL and tokens
grm install 192.168.1.10 --user ubuntu --key ~/.ssh/id_ed25519 --name prod-runner
Tokens: You need two tokens from your Gitea instance — a registration token to register runners, and an admin API token for optional post-install verification. See Getting Started for detailed setup instructions.
Documentation
Full documentation lives on the GRM Wiki.
User Documentation
- Getting Started — Installation, quick start, token setup, first run
- Installation — Prerequisites, setup, multiple instances
- CLI Commands — All commands with arguments and options
- Troubleshooting — Common issues and solutions
- FAQ — Frequently asked questions
Technical Documentation
- Architecture — High-level design, component interactions
- Development Setup — Environment setup, dependencies, local testing
- CI/CD Workflow — How CI works, release process, branch protection
- Testing Strategy — Unit, integration, and Molecule tests
- Decision Log — Key technical decisions and rationale
- Contributing Guide — Coding standards, PR workflow, commit rules
License
GPL-3.0