Skip to main content
Version: v4 (current)

Introduction

GameCI has two layers that work together.

Standard GameCI is the clean foundation: container-based builds, essential engine setup, predictable inputs, artifacts, and CI-friendly defaults. Unity is the primary maintained built-in package, including official containers, license handling, and target platform setup. GameCI also ships built-in configurations for other engines, and its plugin API can add new engine providers. The foundation stays minimal on purpose. If your project fits comfortably in one straightforward CI pipeline and you do not need specialized cache, workspace, routing, or automation behavior, standard GameCI is usually the best starting point.

Orchestrator is the advanced automation layer. It adds provider logic, workspace and cache strategy, runner routing, async execution, hooks, cleanup, and coordination behavior on top of the same GameCI build foundation. Use it when the build is no longer just "run a container here" and becomes "choose the best machine, prepare the workspace efficiently, run reliably, and return outputs."

What Standard GameCI Gives You

Standard GameCI exposes the essential build functionality without forcing an infrastructure model on you.

AreaStandard GameCI behavior
Container buildsUses GameCI Unity editor containers for repeatable builds.
License setupActivates, uses, and returns Unity licenses through action inputs and environment variables.
Platform setupPrepares common Unity target platforms and build parameters.
Cache basicsWorks with the CI platform cache and local runner state.
ArtifactsProduces build outputs that normal CI steps can upload.
Workflow shapeKeeps YAML small and easy to reason about.

This is intentionally unbloated. It gives teams a stable foundation that is easy to adopt, easy to debug, and close to the standard CI model.

What Orchestrator Adds

Orchestrator specializes CI and automation for projects where the simple runner model is no longer enough. That may be one machine with multiple runners, one runner that builds several projects, retained workspaces, shared caches, custom providers, provider fallback, or automation that needs consistent behavior across environments.

AreaWhat Orchestrator adds
Provider unificationOne workflow model across Docker, local system, self-hosted runners, cloud, Kubernetes, and custom providers.
Advanced cachingS3/rclone caches, checkpoints, retained workspaces, cache fallback, and failure-aware cache saving.
Workspace optimizationGit/LFS preparation, submodule handling, large-project paths, and streaming hot runner sync.
Load balancingProvider fallback, runner checks, capacity routing, and burst behavior.
Async executionBuilds can continue on provider infrastructure after the dispatcher job returns.
Hooks and servicesCommand hooks, container hooks, middleware, storage services, LFS agents, and custom jobs.
Game-specific workflowsHot runners, test workflow execution, engine plugins, artifact manifests, and structured outputs.
Cleanup and reliabilityLocks, retries, resource cleanup, garbage collection, and provider health checks.

Orchestrator is not meant to replace the simple path. It exists for projects where build time, import cost, cache reuse, workspace size, runner availability, hardware needs, or infrastructure consistency have become real engineering problems.

Built into Unity Builder

For GitHub Actions, Orchestrator is available through game-ci/unity-builder. It activates when you choose a non-local providerStrategy or enable Orchestrator-backed services. You do not need a separate standalone install for normal GitHub Actions usage.

The standalone @game-ci/orchestrator CLI remains useful for provider development, debugging, and direct backend usage.

Common Starting Points

GoalStart here
Decide whether you need OrchestratorGameCI vs Orchestrator
Run an engine build on AWS or K8sGetting Started
Run from a terminalGameCI CLI
Choose a providerProviders
Tune cache behaviorCaching
Keep whole workspaces warmRetained Workspaces
Stream jobs to warm runnersStandalone Streaming Hot Runner
Route across providersLoad Balancing
Add custom build stepsHooks
Look up inputsAPI Reference

Providers

ProviderDescription
AWS FargateFully managed containers on AWS. No servers to maintain.
KubernetesRun jobs on any Kubernetes cluster.
Local DockerRun the same container workflow on a local machine.
LocalExecute directly on the host machine.

Additional provider integrations include GCP Cloud Run, Azure ACI, custom providers, and community providers.

When It Helps Most

  • Engine import, cache restore, or LFS pulls dominate build time.
  • One host runs multiple runners, projects, or workspaces that should share cache safely.
  • Hosted runner CPU, memory, disk, GPU, or timeout limits are too small.
  • Self-hosted runners need shared cache, locks, fallback, or cleanup.
  • The same workflow should run on Docker locally, owned hardware, and cloud providers.
  • Builds should keep running asynchronously after the CI dispatcher exits.
  • Teams need custom hooks, storage backends, hot runners, or game-specific test workflows.

If one simple pipeline on one simple runner is fast and reliable, keep using standard GameCI. Move to Orchestrator when cache reuse, workspace reuse, runner coordination, provider routing, or other automation concerns need a dedicated layer.