GitHub/GHES
GitHub/GHES
GARM
GARM
Incus/LXD
Incus/LXD
Providers
Providers
k8s
k8s
AWS EC2
AWS EC2
Azure
Azure
LXD/Incus
LXD/Incus
Provider creates compute instance in target infrastructure
Provider creates compute instance in target infrastructure
GCP/openstack/etc
GCP/openstack/etc
Web hook endpoint records/updates job
Web hook endpoint records/updates job
Webhook Endpoint
Webhook Endpoint
Job queue
Job queue
Pool manager consumes jobs in "queued" state
Pool manager consumes jobs in "queued" state
Entities (repos/orgs/enterprises)
Entities (repos/orgs/enterprises)
Pool Manager
Pool Manager
Pool leverages provider to create instance
Pool leverages provider to create instance
Pools
(homogeneous set of ephemeral runners)
Pools...
Instances fetch their metadata and report installation progress
Instances fetch their metadata and report installation progress
garm-runnerN
garm-runnerN
Azure
Azure
garm-runnerN
garm-runnerN
AWS EC2
AWS EC2
garm-runnerN
garm-runnerN
k8s
k8s
garm-runnerN
garm-runnerN
Entities (repos/orgs/enterprises)
Entities (repos/orgs/enterprises)
Webhook signals new Job
Webhook signals new Job
Webhooks
Webhooks
Pool manager selects appropriate pool
Pool manager selects appropriate pool
garm-runner1
garm-runner1
garm-runnerN
garm-runnerN
Runner status is updated in the GARM DB
Runner status is updated in the GARM DB
Callback URLs (metadata, status updates, etc)
Callback URLs (metadata, status updates, etc)
Self-hosted runners
Self-hosted runners
garm-runner1
garm-runner1
garm-runner3
garm-runner3
garm-runner2
garm-runner2
garm-runnerN
garm-runnerN
The GitHub runner registers itself in the target entity
The GitHub runner registers itself in the target entity
WebSocket (logs/events)
WebSocket (logs/events)