mirror of
https://github.com/game-ci/unity-builder.git
synced 2026-09-29 12:07:05 -07:00
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.
256 lines
10 KiB
YAML
256 lines
10 KiB
YAML
name: 'Unity - Builder'
|
|
author: Webber Takken <[email protected]>
|
|
description: 'Build Unity projects for different platforms.'
|
|
inputs:
|
|
targetPlatform:
|
|
required: true
|
|
default: ''
|
|
description: 'Platform that the build should target.'
|
|
unityVersion:
|
|
required: false
|
|
default: 'auto'
|
|
description:
|
|
'Version of unity to use for building the project. Use "auto" to get from your ProjectSettings/ProjectVersion.txt.
|
|
A value other than "auto" is currently ignored - the underlying game-ci CLI always detects the version from the
|
|
checked-out project and has no override flag yet.'
|
|
cliVersion:
|
|
required: false
|
|
default: 'latest'
|
|
description:
|
|
'Release tag of the game-ci/cli binary to install and run (e.g. "v0.1.0"). Defaults to the latest release; pin
|
|
this for reproducible builds.'
|
|
customImage:
|
|
required: false
|
|
default: ''
|
|
description: 'Specific docker image that should be used for building the project'
|
|
projectPath:
|
|
required: false
|
|
default: ''
|
|
description: 'Path to the project to be built, relative to the repository root.'
|
|
buildProfile:
|
|
required: false
|
|
default: ''
|
|
description: 'Path to the build profile to activate, relative to the project root.'
|
|
buildName:
|
|
required: false
|
|
default: ''
|
|
description: 'Name of the build. Should not include a file extension.'
|
|
buildsPath:
|
|
required: false
|
|
default: ''
|
|
description: 'Path where the builds should be stored.'
|
|
buildMethod:
|
|
required: false
|
|
default: ''
|
|
description: 'Path to a Namespace.Class.StaticMethod to run to perform the build.'
|
|
manualExit:
|
|
required: false
|
|
default: ''
|
|
description: 'Suppresses `-quit`. Exit your build method using `EditorApplication.Exit(0)` instead.'
|
|
enableGpu:
|
|
required: false
|
|
default: ''
|
|
description: 'Launches unity without specifying `-nographics`.'
|
|
customParameters:
|
|
required: false
|
|
default: ''
|
|
description: 'Custom parameters to configure the build.'
|
|
useHostNetwork:
|
|
required: false
|
|
default: false
|
|
description: 'Initialises Docker using the host network. (Linux only)'
|
|
versioning:
|
|
required: false
|
|
default: 'Semantic'
|
|
description: 'The versioning scheme to use when building the project'
|
|
version:
|
|
required: false
|
|
default: ''
|
|
description: 'The version, when used with the "Custom" versioning scheme'
|
|
androidVersionCode:
|
|
required: false
|
|
default: ''
|
|
description: 'The android versionCode'
|
|
androidExportType:
|
|
required: false
|
|
default: 'androidPackage'
|
|
description:
|
|
'The android export type. Should be androidPackage for apk, androidAppBundle for aab, or androidStudioProject for
|
|
an android studio project.'
|
|
androidKeystoreName:
|
|
required: false
|
|
default: ''
|
|
description: 'The android keystoreName'
|
|
androidKeystoreBase64:
|
|
required: false
|
|
default: ''
|
|
description: 'The base64 contents of the android keystore file'
|
|
androidKeystorePass:
|
|
required: false
|
|
default: ''
|
|
description: 'The android keystorePass'
|
|
androidKeyaliasName:
|
|
required: false
|
|
default: ''
|
|
description: 'The android keyaliasName'
|
|
androidKeyaliasPass:
|
|
required: false
|
|
default: ''
|
|
description: 'The android keyaliasPass'
|
|
androidTargetSdkVersion:
|
|
required: false
|
|
default: ''
|
|
description: 'The android target API level.'
|
|
androidSymbolType:
|
|
required: false
|
|
default: 'none'
|
|
description: 'The android symbol type to export. Should be "none", "public" or "debugging".'
|
|
sshAgent:
|
|
required: false
|
|
default: ''
|
|
description: 'SSH Agent path to forward to the container'
|
|
sshPublicKeysDirectoryPath:
|
|
required: false
|
|
default: ''
|
|
description: 'Path to a directory containing SSH public keys to forward to the container.'
|
|
gitPrivateToken:
|
|
required: false
|
|
default: ''
|
|
description: 'Github private token to pull from github'
|
|
providerStrategy:
|
|
default: 'local'
|
|
required: false
|
|
description:
|
|
'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'
|
|
description:
|
|
'Whether to run as a user that matches the host system or the default root container user. Only applicable to
|
|
Linux hosts and containers. This is useful for fixing permission errors on Self-Hosted runners.'
|
|
chownFilesTo:
|
|
required: false
|
|
default: ''
|
|
description: 'User and optionally group (user or user:group or uid:gid) to give ownership of the resulting build artifacts'
|
|
dockerCpuLimit:
|
|
required: false
|
|
default: ''
|
|
description: 'Number of CPU cores to assign the docker container. Defaults to all available cores on all platforms.'
|
|
dockerMemoryLimit:
|
|
required: false
|
|
default: ''
|
|
description:
|
|
'Amount of memory to assign the docker container. Defaults to 95% of total system memory rounded down to the
|
|
nearest megabyte on Linux and 80% on Windows. On unrecognized platforms, defaults to 75% of total system memory.
|
|
To manually specify a value, use the format <number><unit>, where unit is either m or g. ie: 512m = 512 megabytes'
|
|
dockerIsolationMode:
|
|
required: false
|
|
default: 'default'
|
|
description:
|
|
'Isolation mode to use for the docker container. Can be one of process, hyperv, or default. Default will pick the
|
|
default mode as described by Microsoft where server versions use process and desktop versions use hyperv. Only
|
|
applicable on Windows'
|
|
containerRegistryRepository:
|
|
required: false
|
|
default: 'unityci/editor'
|
|
description: 'Container registry and repository to pull image from. Only applicable if customImage is not set.'
|
|
containerRegistryImageVersion:
|
|
required: false
|
|
default: '3'
|
|
description: 'Container registry image version. Only applicable if customImage is not set.'
|
|
allowDirtyBuild:
|
|
required: false
|
|
default: ''
|
|
description: 'Allows the branch of the build to be dirty, and still generate the build.'
|
|
cacheUnityInstallationOnMac:
|
|
default: 'false'
|
|
required: false
|
|
description: 'Whether to cache the Unity hub and editor installation on MacOS'
|
|
unityHubVersionOnMac:
|
|
default: ''
|
|
required: false
|
|
description:
|
|
'The version of Unity Hub to install on MacOS (e.g. 3.4.0). Defaults to latest available on brew if empty string
|
|
or nothing is specified.'
|
|
unityLicensingServer:
|
|
default: ''
|
|
required: false
|
|
description: 'The Unity licensing server address to use for activating Unity.'
|
|
dockerWorkspacePath:
|
|
default: '/github/workspace'
|
|
required: false
|
|
description:
|
|
'The path to mount the workspace inside the docker container. For windows, leave out the drive letter. For example
|
|
c:/github/workspace should be defined as /github/workspace'
|
|
skipActivation:
|
|
default: 'false'
|
|
required: false
|
|
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:
|
|
description: 'The Persistent Volume (PV) where the build artifacts have been stored by Kubernetes'
|
|
buildVersion:
|
|
description: 'The generated version used for the Unity build'
|
|
androidVersionCode:
|
|
description: 'The generated versionCode used for the Android Unity build'
|
|
engineExitCode:
|
|
description:
|
|
'Returns the exit code from the build scripts. This code is 0 if the build was successful. If there was an error
|
|
during activation, the code is from the activation step. If activation is successful, the code is from the project
|
|
build step.'
|
|
branding:
|
|
icon: 'box'
|
|
color: 'gray-dark'
|
|
runs:
|
|
using: 'node24'
|
|
main: 'dist/index.js'
|