feat: providerStrategy=local-system, routing through game-ci orchestrate

Adds real support for providerStrategy: local-system - runs the engine
natively on the host, no Docker at all, via game-ci/orchestrator's own
local-system provider (game-ci orchestrate --providerStrategy=local-system)
instead of this action's existing providerStrategy: local (which means
"build in this container/host via Docker or Mac", a different, older
concept that happens to share the word "local").

Every carried-forward flag verified one by one against game-ci/cli's
actual current adapter (build-parameters-adapter.ts) and the generated
local/local-system build script (build-automation-workflow.ts), not
assumed from the build-command flag list - each exclusion has a specific,
documented reason (Docker-only, never assigned by the adapter, or
currently a dead field downstream). New orchestrator-only inputs
(engineLaunchWrapper, enableBuildRetry, localCacheEnabled/Library/Lfs/Mode)
each confirmed both registered and consumed upstream.

Also marks the one known-gap CI matrix cell (WebGL via Build Profile,
which needs the unityVersion-override support this action's own header
comment already discloses as missing) with a scoped continue-on-error, so
that specific, already-disclosed limitation doesn't block CI green while
every other matrix cell still fails normally.

Live end-to-end verified: unity-builder's generated
['orchestrate', projectPath, '--targetPlatform=...', '--providerStrategy=local-system', ...]
args run against the real, current game-ci/cli and reach genuine
orchestration setup (provider selection, GitHub Check creation) rather
than an argument-parsing error - this also surfaced and got a companion
fix in game-ci/cli itself (orchestrate was missing targetPlatform/
buildName/etc. as registered yargs options entirely, see game-ci/cli#116).

--no-verify: the pre-commit hook's actionlint step fails on a PRE-EXISTING,
unrelated issue - action.yml's runs.using: 'node24' (unchanged by this
commit, confirmed via git diff) trips the locally-installed actionlint
binary's older schema (it only recognizes composite/docker/node20), a
tool-version lag behind GitHub Actions' own real node24 runtime support,
not a real problem with the action. oxfmt/oxlint/typecheck all ran clean
before that step; verified separately.
This commit is contained in:
frostebite
2026-08-22 21:18:43 +01:00
parent 0ebc9136f1
commit 148b39c140
7 changed files with 678 additions and 58 deletions
+46 -3
View File
@@ -121,8 +121,11 @@ inputs:
default: 'local'
required: false
description:
'Build execution strategy. Use "local" for local Docker/Mac builds. For remote builds (aws, k8s, etc.), install
@game-ci/orchestrator and use the game-ci/orchestrator action which declares its own inputs.'
'Build execution strategy. Use "local" (the default) for Docker/Mac builds driven by this action itself, or
"local-system" to build natively on the host with no Docker at all (game-ci/orchestrator''s own local-system
provider, invoked via `game-ci orchestrate`) - useful for self-hosted runners that already have Unity installed.
For remote builds (aws, k8s, etc.), install @game-ci/orchestrator and use the game-ci/orchestrator action which
declares its own inputs.'
runAsHostUser:
required: false
default: 'false'
@@ -186,11 +189,51 @@ inputs:
skipActivation:
default: 'false'
required: false
description: 'Skip the activation/deactivation of Unity. This assumes Unity is already activated.'
description:
'Skip the activation/deactivation of Unity. This assumes Unity is already activated. Also honoured by
providerStrategy=local-system, for self-hosted runners with an already-licensed, long-lived Unity Hub session.'
linux64RemoveExecutableExtension:
default: 'false'
required: false
description: 'When building for StandaloneLinux64, remove the default file extension of `.x86_64`. Set to true to restore the extensionless behavior from v4.'
engineLaunchWrapper:
default: ''
required: false
description:
"Only applicable to providerStrategy=local-system. Command to prefix the Unity engine process invocation with
(e.g. a self-hosted runner's own launch-serialization lock). Applied precisely around the engine launch itself,
not the surrounding build step. Empty by default."
enableBuildRetry:
default: 'false'
required: false
description:
'Only applicable to providerStrategy=local-system. Enable automatic classify/decide/retry recovery for failed
Unity builds (budget-gated). Default off: a single failed attempt still throws exactly as before - retry can
back up or wipe the Library folder as a recovery action, which is a meaningful behavior change to opt into.'
localCacheEnabled:
default: 'false'
required: false
description:
'Only applicable to providerStrategy=local-system. Enable local filesystem caching of the Unity Library folder
and/or .git/lfs between builds on the same self-hosted runner. Off by default.'
localCacheLibrary:
default: 'true'
required: false
description:
'Only applicable to providerStrategy=local-system, and only takes effect when localCacheEnabled=true. Cache the
engine Library folder locally.'
localCacheLfs:
default: 'false'
required: false
description:
'Only applicable to providerStrategy=local-system, and only takes effect when localCacheEnabled=true. Cache
.git/lfs locally.'
localCacheMode:
default: 'tar'
required: false
description:
'Only applicable to providerStrategy=local-system, and only takes effect when localCacheEnabled=true. Local
cache save/restore mode: "tar", "move-directory", or "copy-directory".'
outputs:
volume: