<img src="https://github.com/cloudbase/garm/raw/v0.2.1/doc/images/garm-light.svg#gh-light-mode-only" width="384px" alt="Light mode image" />
<img src="https://github.com/cloudbase/garm/raw/v0.2.1/doc/images/garm-dark.svg#gh-dark-mode-only" width="384px" alt="Dark mode image" />
GARM is an open-source, self-hosted runner manager for GitHub Actions and Gitea Actions. It automatically creates, scales, and destroys ephemeral runner instances across multiple clouds and infrastructure providers from a single controller.
GARM supports two scaling modes:
Pools receive workflow_job webhooks from GitHub/Gitea, match jobs to pools by label, and create runners on demand. When multiple pools match, a configurable balancer (round-robin or pack) decides which pool handles the job.
Scale Sets use GitHub's native message queue. GitHub handles scheduling; GARM handles provisioning.
Architecture diagram (pools)
[!IMPORTANT] The README and documentation in the
mainbranch are relevant to the not yet released code that is present inmain. Following the documentation from themainbranch for a stable release of GARM, may lead to errors. To view the documentation for the latest stable release, please switch to the appropriate tag. For information about setting upv0.2.0-beta1, please refer to the v0.2.0-beta1 tag.[!CAUTION] The
mainbranch holds the latest code and is not guaranteed to be stable. If you are looking for a stable release, please check the releases page. If you plan to use themainbranch, please do so on a new instance. Do not upgrade from a stable release tomain.
Pick the quickstart that matches your setup:
For Kubernetes deployments, see the GARM operator. To build from source, see Building from Source.
Full documentation lives in the doc/ directory:
| Section | Guides |
|---|---|
| Setup | Credentials · Configuration · Webhooks |
| Usage | Managing Entities · Pools and Scaling · Scale Sets |
| Advanced | Templates · Providers · Gitea · Agent and Object Store |
| Operations | Monitoring · Performance · FAQ |
If you find the documentation lacking, please open an issue. Feedback from new users is especially valuable.
GARM uses external providers to create runners in a particular IaaS. Providers are standalone executables that GARM calls to manage runner instances.
| Provider | Repository |
|---|---|
| Akamai/Linode | flatcar/garm-provider-linode (experimental) |
| Amazon EC2 | cloudbase/garm-provider-aws |
| Azure | cloudbase/garm-provider-azure |
| CloudStack | nexthop-ai/garm-provider-cloudstack |
| GCP | cloudbase/garm-provider-gcp |
| Incus | cloudbase/garm-provider-incus |
| Kubernetes | mercedes-benz/garm-provider-k8s |
| LXD | cloudbase/garm-provider-lxd |
| OpenStack | cloudbase/garm-provider-openstack |
| Oracle OCI | cloudbase/garm-provider-oci |
Follow the instructions in each provider's README to install them.
Providers are external executables that GARM calls to manage runner lifecycle in a given IaaS. They can be written in any language. See Writing an external provider for details.
Whether you're running into issues or just want to drop by and say "hi", feel free to join us on Slack.