GitHub Actions Runner Manager
Find a file
Gabriel 7651671377
Merge pull request #410 from gabriel-samfira/make-default-ep-mutable
Make the default github.com endpoint mutable
2025-05-24 16:47:25 +03:00
.github Update all dependencies 2025-04-17 18:07:33 +03:00
apiserver Update event logging 2025-02-10 13:15:35 +00:00
auth Relax URLs validation 2025-02-05 20:10:02 +00:00
client Move URLs from default section of config to DB 2024-06-07 09:27:24 +00:00
cmd Add additional info when listing resources 2025-02-10 12:45:30 +00:00
config Merge pull request #328 from gabriel-samfira/add-busy-timeout 2025-02-13 13:10:15 +02:00
contrib Update docs 2024-08-06 15:18:18 +00:00
database Make the default github.com endpoint mutable 2025-05-24 13:35:17 +00:00
doc Update Performance Considerations - Cached runners section 2025-01-17 10:14:24 +02:00
internal/testing Refactor the websocket client and add fixes 2024-07-05 12:55:35 +00:00
metrics fix: gci section warnings 2024-02-22 15:06:53 +01:00
params set base URL in ghinstallation transport 2025-05-04 00:51:25 +03:00
runner Make the default github.com endpoint mutable 2025-05-24 13:35:17 +00:00
scripts Add version to controller info response 2024-07-05 12:49:16 +00:00
test/integration Allow using LXD image mirror 2024-08-14 19:44:23 +00:00
testdata Add knob to tweak _busy_timeout 2025-01-28 20:07:07 +00:00
util Add version to controller info response 2024-07-05 12:49:16 +00:00
vendor Make the default github.com endpoint mutable 2025-05-24 13:35:17 +00:00
websocket Update garm-provider-common 2024-08-03 16:07:21 +00:00
.gitignore Refactor integration E2E tests 2023-08-24 15:22:46 +03:00
.golangci.yml lint: exclude gosec G115 2024-11-26 09:23:58 +01:00
Dockerfile Copy the CA certificates to final image 2024-09-28 19:30:20 +00:00
Dockerfile.build-static Enable Windows builds 2023-08-18 14:46:00 +00:00
go.mod Make the default github.com endpoint mutable 2025-05-24 13:35:17 +00:00
go.sum Make the default github.com endpoint mutable 2025-05-24 13:35:17 +00:00
LICENSE Initial commit 2022-04-13 19:45:01 +03:00
Makefile fix: remove duplication in Makefile 2024-11-26 15:04:53 +01:00
README.md Update docs 2024-08-08 15:01:24 +03:00

GitHub Actions Runner Manager (GARM)

Go Tests

About GARM

Welcome to GARM!

GARM enables you to create and automatically maintain pools of self-hosted GitHub runners, with auto-scaling that can be used inside your github workflow runs.

The goal of GARM is to be simple to set up, simple to configure and simple to use. The server itself is a single binary that can run on any GNU/Linux machine without any other requirements other than the providers you want to enable in your setup. It is intended to be easy to deploy in any environment and can create runners in virtually any system you can write a provider for. There is no complicated setup process and no extremely complex concepts to understand. Once set up, it's meant to stay out of your way.

GARM supports creating pools in either GitHub itself or in your own deployment of GitHub Enterprise Server. For instructions on how to use GARM with GHE, see the credentials section of the documentation.

Through the use of providers, GARM can create runners in a variety of environments using the same GARM instance. Whether you want to create pools of runners in your OpenStack cloud, your Azure cloud or your Kubernetes cluster, that is easily achieved by just installing the appropriate providers, configuring them in GARM and creating pools that use them. You can create zero-runner pools for instances with high costs (large VMs, GPU enabled instances, etc) and have them spin up on demand, or you can create large pools of eagerly created k8s backed runners that can be used for your CI/CD pipelines at a moment's notice. You can mix them up and create pools in any combination of providers or resource allocations you want.

Here is a brief architectural diagram of how GARM reacts to workflows triggered in GitHub (click the image to see a larger version):

GARM architecture diagram GARM architecture diagram

⚠️ Important note: The README and documentation in the main branch are relevant to the not yet released code that is present in main. Following the documentation from the main branch 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 up v0.1.5, please refer to the v0.1.5 tag.

Join us on slack

Whether you're running into issues or just want to drop by and say "hi", feel free to join us on slack.

slack

Installing

Quickstart

Check out the quickstart document for instructions on how to install GARM. If you'd like to build from source, check out the building from source document.

Installing on Kubernetes

Thanks to the efforts of the amazing folks at @mercedes-benz, GARM can now be integrated into k8s via their operator. Check out the GARM operator for more details.

Using GARM

GARM is designed with simplicity in mind. At least we try to keep it as simple as possible. We're aware that adding a new tool in your workflow can be painful, especially when you already have to deal with so many. The cognitive load for OPS has reached a level where it feels overwhelming at times to even wrap your head around a new tool. As such, we believe that tools should be simple, should take no more than a few hours to understand and set up and if you absolutely need to interact with the tool, it should be as intuitive as possible. Although we try our best to make this happen, we're aware that GARM has some rough edges, especially for new users. If you encounter issues or feel like the setup process was too complicated, please let us know. We're always looking to improve the user experience.

We've written a short introduction into some of the commands that GARM has and some of the concepts involved in setting up GARM, managing runners and how GitHub does some of the things it does.

You can find it here.

Please, feel free to open an issue if you find the documentation lacking and would like more info. Sometimes we forget the challenges that new users face as we're so close to the code and how it works. Any feedback is welcome and we're always looking to improve the documentation.

Supported providers

GARM uses providers to create runners in a particular IaaS. The providers are external executables that GARM calls into to create runners. Before you can create runners, you'll need to install at least one provider.

Installing external providers

External providers are binaries that GARM calls into to create runners in a particular IaaS. There are several external providers available:

Follow the instructions in the README of each provider to install them.

Optimizing your runners

If you would like to optimize the startup time of new instance, take a look at the performance considerations page.

Write your own provider

The providers are interfaces between GARM and a particular IaaS in which we spin up GitHub Runners. External providers can be written in any language, as they are in the form of an external executable that GARM calls into. Please see the Writing an external provider document for details. Also, feel free to inspect the two available sample external providers in this repository.