OPEN SOURCE · FREE · AWS & GCP
RunRight monitors every CI job and maps your actual p95 usage to the right AWS or GCP instance type, automatically, on every run.
Install →Add one line to your GitHub Action. RunRight samples CPU, memory, disk I/O, and threads throughout your build and stores a snapshot for every run, automatically.
The dashboard accumulates job history over time. As your build grows or shrinks, the data reflects it. No one-off audits, no spreadsheets. Everything is already there.
RunRight scores every instance in the AWS and GCP catalog against your real workload history and ranks options by cost, headroom, and fit. Pick the right machine with confidence.
CPU, memory, disk I/O and threads sampled live, not guessed.
Hundreds of instance types, kept fresh automatically.
File, OTLP, Prometheus, HTTP. Plug into your existing stack.
Your data stays on your infra. No third-party SaaS.
Bare VMs, containers, K8s pods, DinD — detection adapts to the environment automatically.
Reads vCPU count and total memory from the OS, then matches against the catalog within a 2 GiB tolerance. Works on GitHub-hosted runners, self-hosted EC2, and GCP VMs.
Reads cgroup v2 (cpu.max, memory.max) or cgroup v1 equivalents. Reflects your pod's actual CPU quota and memory limit.
# K8s Downward API override (optional)
env:
- name: RUNRIGHT_VCPUS
valueFrom:
resourceFieldRef:
resource: limits.cpu
- name: RUNRIGHT_MEMORY_GIB
valueFrom:
resourceFieldRef:
resource: limits.memory
divisor: 1Gi
Skip auto-detection with two env vars. Works for Azure VMs, ARM instances, on-prem, or any environment where OS-level resource counts are unreliable.
RUNRIGHT_VCPUS=4 RUNRIGHT_MEMORY_GIB=16
Native GitHub Action or a two-line shell snippet. Pick whichever fits your stack.
- uses: gbudjeakp/run-right@v1
with:
run: make build
export: file,http
http-url: ${{ vars.RUNRIGHT_URL }}
env:
RUNRIGHT_API_KEY: ${{ secrets.RUNRIGHT_API_KEY }}
build:
before_script:
- curl -fsSL "https://github.com/gbudjeakp/run-right/releases/latest/download/runright_linux_amd64" -o runright && chmod +x runright
- ./runright monitor --export http --http-url "$RUNRIGHT_URL" &
- echo $! > .runright.pid
script:
- make build
after_script:
- kill $(cat .runright.pid) 2>/dev/null || true
jobs:
build:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: Install RunRight
command: curl -fsSL "https://github.com/gbudjeakp/run-right/releases/latest/download/runright_linux_amd64" -o runright && chmod +x runright
- run:
name: Build
command: |
./runright monitor --export http --http-url "$RUNRIGHT_URL" &
echo $! > .runright.pid
make build
kill $(cat .runright.pid) 2>/dev/null || true
pipelines:
default:
- step:
script:
- curl -fsSL "https://github.com/gbudjeakp/run-right/releases/latest/download/runright_linux_amd64" -o runright && chmod +x runright
- ./runright monitor --export http --http-url "$RUNRIGHT_URL" &
- echo $! > .runright.pid
- make build
- kill $(cat .runright.pid) 2>/dev/null || true
pipeline {
agent any
environment {
RUNRIGHT_URL = credentials('runright-url')
RUNRIGHT_API_KEY = credentials('runright-api-key')
}
stages {
stage('Build') {
steps {
sh """
curl -fsSL "https://github.com/gbudjeakp/run-right/releases/latest/download/runright_linux_amd64" -o runright && chmod +x runright
./runright monitor --export http --http-url \$RUNRIGHT_URL &
echo \$! > .runright.pid
make build
kill \$(cat .runright.pid) 2>/dev/null || true
"""
}
}
}
}
SELF-HOST THE DASHBOARD
A Go binary + a Postgres database. One Docker Compose file brings it all up.
RunRight authenticates the agent to the backend with a single shared secret. Generate one now and keep it in your CI secrets.
export RUNRIGHT_API_KEY=$(openssl rand -hex 32)
One command starts the backend, dashboard, and Postgres. The dashboard is available at localhost:3000 once it's up.
docker compose up -d
Drop the RunRight step into any job above. It runs as a background process, samples every few seconds, and posts a summary when the job finishes. Your existing steps are untouched.
- uses: gbudjeakp/run-right@v1
with:
run: make build
export: file,http
http-url: ${{ vars.RUNRIGHT_URL }}
env:
RUNRIGHT_API_KEY: ${{ secrets.RUNRIGHT_API_KEY }}
SAVINGS CALCULATOR
Based on typical CI job utilisation (p95 CPU 30%, p95 RAM 40%).
CURRENT / MO
—
SAVINGS / MO
—
AFTER RUNRIGHT / MO
—
PRICING
No seats, no usage caps, no SaaS. Self-hosted on your infrastructure.
See full pricing →No. It polls /proc every 5s as a background sidecar. Under 5 MB RSS, under 0.1% CPU on the sampler. Your build time is not affected.
No. RunRight wraps your existing CI step. No SDK, no annotations, no config file.
No. Use --export otlp with OTEL_EXPORTER_OTLP_ENDPOINT pointing at your existing collector. The backend and Postgres are only needed for the self-hosted RunRight dashboard.