Skip to content

Demo: a real job on a local cluster

GitHub Actions Gateway (GAG) in 30 seconds: a real GitHub Actions job runs in a worker pod that exists only while the job runs, then disappears — no runner sits idle. Nothing here is staged; every line was captured from a real run on a local kind cluster against real GitHub (a self-hosted runs-on: e2e workflow).

Terminal recording: a GitHub Actions job running on GAG — no idle pods, then one job spins up a worker pod that runs and is deleted on completion, green on GitHub.

The recording assumes GAG is already installed and shows only the payoff — see Try it yourself to run it on your own cluster.

What the demo shows

Beat What happens Why it matters
Idle Before any job, the team's namespace holds only a lightweight controller and proxy — zero worker pods. No idle compute (and no idle GPUs) between jobs.
Run One gh workflow run triggers a job. A worker pod goes Pending → Running → Completed, then is deleted on completion. One job → one short-lived pod; the node is freed instantly.
Green gh run view shows the job succeeded on GitHub (in ~8s). The job really ran on real GitHub — you paid for compute only while it ran.

Try it yourself

  • Install GAG on your clusterGetting Started covers the Helm chart, a tenant namespace and quota, the GitHub App credential Secret, and the ActionsGateway resource.
  • Reproduce this exact demo for free on a local kind cluster — a step-by-step from-source guide (build the images, stand up kind, onboard a tenant, run one job) lives in the repository: Reproduce the local-kind demo.

Next steps

  • Why GAG? — how GAG compares to Actions Runner Controller (ARC).
  • Architecture — the four-tier design behind what the demo shows.

The recording is a hand-authored asciinema cast (v2) assembled from the real command outputs of a run on a local kind cluster against real GitHub, then rendered to a self-contained animated SVG. The cast and its generator live in docs/assets/ (demo-local-kind.cast, generate-demo-cast.py).