GloriousFlywheel

Runners Overview

GloriousFlywheel provides a cross-forge runner pool that serves both GitLab CI and GitHub Actions from the same Kubernetes cluster. Six runner types are deployed across two scaling models.

Runner Types

Runner Forge Scaling Base Image Privileged Use Case
{prefix}-docker GitLab CI HPA Alpine No General CI jobs
{prefix}-dind GitLab CI HPA Alpine + Docker Yes Container builds
{prefix}-nix GitLab CI HPA NixOS No Reproducible builds
gh-docker GitHub Actions ARC Alpine No General CI jobs
gh-dind GitHub Actions ARC Alpine + Docker Yes Container builds
gh-nix GitHub Actions ARC NixOS No Reproducible builds

Scaling Models

GitLab runners use Kubernetes HorizontalPodAutoscalers (HPA) with configurable min/max replicas and CPU-based scaling. Runners are always warm with at least one replica.

GitHub Actions runners use ARC (Actions Runner Controller) scale sets with scale-to-zero. Runner pods are created on demand when a workflow job matches the runs-on label and terminated after the job completes.

Namespace Layout

graph TD
    subgraph cluster["Kubernetes Cluster"]
        subgraph ns_gl["gitlab-runners namespace"]
            GL_NIX["{prefix}-nix"]
            GL_DOCKER["{prefix}-docker"]
            GL_DIND["{prefix}-dind"]
        end
        subgraph ns_arc_sys["arc-systems namespace"]
            CTRL["ARC Controller"]
        end
        subgraph ns_arc["arc-runners namespace"]
            GH_NIX["gh-nix"]
            GH_DOCKER["gh-docker"]
            GH_DIND["gh-dind"]
        end
        subgraph ns_cache["nix-cache namespace"]
            ATTIC["Attic API"]
            BAZEL["Bazel Cache"]
        end
    end
    GL_NIX -->|"cluster DNS"| ATTIC
    GH_NIX -->|"cluster DNS"| ATTIC
    GL_NIX --> BAZEL
    GH_NIX --> BAZEL
    CTRL -->|"manages"| GH_NIX
    CTRL -->|"manages"| GH_DOCKER
    CTRL -->|"manages"| GH_DIND

Common Properties

Further Reading

GitLab CI Runners

GitHub Actions Runners

Operations