Skip to content

Commit 1bb31f3

Browse files
frostebiteclaude
andcommitted
feat(hot-runner): implement hot runner protocol with registry, health monitoring, and job dispatch (#791)
Adds persistent Unity editor instance support to reduce build iteration time by eliminating cold-start overhead. Includes: - HotRunnerTypes: interfaces for config, status, job request/result, transport - HotRunnerRegistry: in-memory runner management with file-based persistence - HotRunnerHealthMonitor: periodic health checks, idle recycling, job-count recycling - HotRunnerDispatcher: job routing with wait-for-runner, timeout, and output streaming - HotRunnerService: high-level API integrating registry, health, and dispatch - 34 unit tests covering registration, filtering, health, dispatch, timeout, fallback - action.yml inputs for hot runner configuration (7 new inputs) - Input/BuildParameters integration for hot runner settings - index.ts wiring with cold-build fallback when hot runner unavailable Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 49b37f7 commit 1bb31f3

File tree

13 files changed

+2170
-23
lines changed

13 files changed

+2170
-23
lines changed

action.yml

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,8 @@ inputs:
182182
required: false
183183
default: ''
184184
description:
185-
'[Orchestrator] Run a custom job instead of the standard build automation for orchestrator (in yaml format with the
186-
keys image, secrets (name, value object array), command line string)'
185+
'[Orchestrator] Run a custom job instead of the standard build automation for orchestrator (in yaml format with
186+
the keys image, secrets (name, value object array), command line string)'
187187
awsStackName:
188188
default: 'game-ci'
189189
required: false
@@ -280,6 +280,35 @@ inputs:
280280
'[Orchestrator] Specifies the repo for the unity builder. Useful if you forked the repo for testing, features, or
281281
fixes.'
282282

283+
hotRunnerEnabled:
284+
description: '[HotRunner] Use persistent hot runner for builds (requires pre-registered runners)'
285+
required: false
286+
default: 'false'
287+
hotRunnerTransport:
288+
description: '[HotRunner] Transport protocol for hot runner communication: websocket, grpc, named-pipe'
289+
required: false
290+
default: 'websocket'
291+
hotRunnerHost:
292+
description: '[HotRunner] Hot runner host address'
293+
required: false
294+
default: 'localhost'
295+
hotRunnerPort:
296+
description: '[HotRunner] Hot runner port number'
297+
required: false
298+
default: '9090'
299+
hotRunnerHealthInterval:
300+
description: '[HotRunner] Health check interval in seconds'
301+
required: false
302+
default: '30'
303+
hotRunnerMaxIdle:
304+
description: '[HotRunner] Maximum idle time in seconds before recycling runner'
305+
required: false
306+
default: '3600'
307+
hotRunnerFallbackToCold:
308+
description: '[HotRunner] Fall back to cold build if no hot runner available'
309+
required: false
310+
default: 'true'
311+
283312
outputs:
284313
volume:
285314
description: 'The Persistent Volume (PV) where the build artifacts have been stored by Kubernetes'

0 commit comments

Comments
 (0)