Architecture

August 5, 2026 ยท View on GitHub

Forge is organized around a self-hosted GitHub Actions runner operating model for AWS:

  • platform modules run the Forge runner runtime for EC2 and ARC lanes
  • infra modules provide EKS only when ARC runners are used
  • helper modules prepare and maintain accounts
  • integration modules connect Forge to external systems when the company uses them

Forge architecture

Vocabulary

TermMeaning
ForgeMTThe open-source product name: Forge multi-tenancy.
ForgeShort name used in prose and by operators after the product is clear.
TenantThe isolation and configuration boundary for a team: labels, runner settings, GitHub App scope, and AWS access.
Ephemeral runnerA runner created for a job and removed after the job or cleanup cycle.
Control planeThe platform-owned system that receives events, provisions runners, manages identity, and collects signals.
Tenant planeWhere tenant jobs execute on EC2 instances or ARC pods.
EC2 laneRunner execution on full AWS instances for VM-level control, custom AMIs, macOS, Windows, or heavy builds.
ARC laneRunner execution on Kubernetes pods through Actions Runner Controller.
LabelsThe API contract between tenant workflows and ForgeMT runner capacity.

The most important mental model is shared platform, isolated execution. Tenants share one platform and upgrade path, but their jobs run behind explicit labels, IAM roles, network placement, and runner specs.

Deployment Categories

CategoryMain pathPurposeRequired for first tenant?
Platformmodules/platform/forge_runnersTenant-facing runner runtime for EC2 and ARC runner specs.Yes
Infrastructuremodules/infra/eksEKS foundation for ARC scale sets, including Kubernetes add-ons used by Forge.Only for ARC
Helpersmodules/helpers/*Account preparation and operations support such as AMIs, ECR, S3, cleanup, and regions.Sometimes
Integrationsmodules/integrations/*Optional Splunk, Teleport, OpenCost, OpenTelemetry, and relay destination modules.No
Examplesexamples/deployments/<category>Terragrunt deployment roots that mirror the module categories.Platform only

See Module Layout for the full path map.

Control Plane And Tenant Plane

Forge separates control-plane ownership from tenant usage.

Multi-tenant overview

The platform team owns:

  • Forge module versions and release metadata
  • AWS accounts, state, deployment roles, and bootstrap decisions
  • GitHub App credentials and webhook configuration
  • runner AMIs and ARC container images
  • tenant onboarding, runner labels, and AWS role access
  • optional integrations and day-2 cleanup jobs

Tenant teams consume:

  • GitHub Actions runner labels
  • documented AWS roles they can assume from jobs
  • approved runner images and toolchains
  • support from the platform team when jobs fail to start or access AWS

Tenant repos should not need to know how Forge deploys its runtime.

EC2 Runner Lane

Use the EC2 lane when jobs need full VM isolation, custom AMIs, Docker builds, or operating-system level tooling.

EC2 runner architecture

Runtime shape:

  1. A GitHub workflow requests a Forge runner label.
  2. GitHub sends a signed webhook event to the Forge runner platform.
  3. Forge evaluates labels and tenant metadata.
  4. The EC2 runner deployment creates an ephemeral runner from the configured AMI, subnet, security groups, and runner settings.
  5. The job assumes tenant AWS roles through OIDC instead of long-lived AWS keys.
  6. The runner is removed after the job or cleanup cycle.

Start here for the smallest first deployment: Configure Platform.

ARC Runner Lane

Use the ARC lane when jobs fit a container runner model and the platform team wants Kubernetes scheduling, Karpenter capacity management, and shared EKS operations.

EKS runner architecture

Runtime shape:

  1. modules/infra/eks creates or manages the EKS foundation used by Forge.
  2. modules/platform/arc and modules/platform/arc_deployment install and configure ARC components and scale sets.
  3. Tenant runner specs select namespaces, labels, images, and runner settings.
  4. Jobs run in ARC-managed pods and use AWS identity controls configured by the platform.

Skip EKS when the first tenant uses only EC2 runner specs. Add it when a tenant has arc_runner_specs or the company standardizes CI workloads on Kubernetes.

For production ARC installations, operate EKS as blue/green cluster pairs. The tenant's arc_cluster_name selects the active cluster for that tenant, and migrate_arc_cluster is used only during a planned tenant move. This lets the platform team rebuild EKS and ARC foundations without editing tenant workflow labels.

Helper Layer

Helpers are not the runner runtime. They support the operating model.

Helper familyTypical ownerWhy it exists
AMI policy and sharingrunner image teampublish, share, and govern base or custom runner AMIs
ECRcontainer teamstore runner, pre-commit, sidecar, or lambda images
Storageplatform teamstore artifacts, templates, logs, and integration files
Service-linked rolesaccount bootstrapprepare AWS services such as EC2 Spot
Opt-in regionsaccount bootstrapenable regions before module deployments
Cloud Custodianoperations teamremove stale AMIs, old runners, and leftover resources
Forge subscriptiontenant onboardingcreate tenant-side access used by Forge-managed jobs
CloudFormation helpersintegration supportprovide admin/execution roles for CloudFormation-based work

Use Configure Helpers to decide what to copy and what to delete from your operating repo.

Optional Integrations

Integrations should be deployed after the platform runner path is proven.

Splunk modules can add dashboards, billing ingestion, OpenTelemetry, OpenCost, Data Manager S3 inputs, and stuck-workflow redelivery. Teleport can support operator access. Webhook relay destination modules can centralize forwarding to external receivers.

If your company does not use one of those systems, skip that example folder and module family. Forge does not require Splunk or Teleport to run a tenant.

Day-2 Operating Loop

Forge is kept healthy by testing the same paths that users copy:

  1. Build or select runner AMIs and container images.
  2. Update helper and platform release metadata.
  3. Plan and apply helpers, infra, platform, then integrations.
  4. Run smoke workflows on EC2 and ARC labels that are enabled.
  5. Destroy weekly validation stacks in reverse order.
  6. Let cleanup, Renovate, and image pipelines keep drift visible.

The copyable operating repo shapes live in Repo Blueprints.