mirror of
https://github.com/game-ci/unity-builder.git
synced 2025-07-07 20:35:33 -04:00
Merge branch 'main' into feature/licensing-server-macos
This commit is contained in:
commit
0c0a8d6dda
12
.github/pull_request_template.md
vendored
12
.github/pull_request_template.md
vendored
@ -2,13 +2,21 @@
|
|||||||
|
|
||||||
- ...
|
- ...
|
||||||
|
|
||||||
|
#### Related Issues
|
||||||
|
|
||||||
|
- ...
|
||||||
|
|
||||||
|
#### Related PRs
|
||||||
|
|
||||||
|
- ...
|
||||||
|
|
||||||
#### Checklist
|
#### Checklist
|
||||||
|
|
||||||
<!-- please check all items and add your own -->
|
<!-- please check all items and add your own -->
|
||||||
|
|
||||||
- [x] Read the contribution [guide](https://github.com/game-ci/unity-builder/blob/main/CONTRIBUTING.md) and accept the
|
- [x] Read the contribution [guide](https://github.com/game-ci/unity-builder/blob/main/CONTRIBUTING.md) and accept the
|
||||||
[code](https://github.com/game-ci/unity-builder/blob/main/CODE_OF_CONDUCT.md) of conduct
|
[code](https://github.com/game-ci/unity-builder/blob/main/CODE_OF_CONDUCT.md) of conduct
|
||||||
- [ ] Docs (If new inputs or outputs have been added or changes to behavior that should be documented. Please make
|
- [ ] Docs (If new inputs or outputs have been added or changes to behavior that should be documented. Please make a PR
|
||||||
a PR in the [documentation repo](https://github.com/game-ci/documentation))
|
in the [documentation repo](https://github.com/game-ci/documentation))
|
||||||
- [ ] Readme (updated or not needed)
|
- [ ] Readme (updated or not needed)
|
||||||
- [ ] Tests (added, updated or not needed)
|
- [ ] Tests (added, updated or not needed)
|
||||||
|
2
.github/workflows/activation.yml
vendored
2
.github/workflows/activation.yml
vendored
@ -13,7 +13,7 @@ jobs:
|
|||||||
id: requestActivationFile
|
id: requestActivationFile
|
||||||
uses: game-ci/unity-request-activation-file@v2.0-alpha-1
|
uses: game-ci/unity-request-activation-file@v2.0-alpha-1
|
||||||
- name: Upload activation file
|
- name: Upload activation file
|
||||||
uses: actions/upload-artifact@v2
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: ${{ steps.requestActivationFile.outputs.filePath }}
|
name: ${{ steps.requestActivationFile.outputs.filePath }}
|
||||||
path: ${{ steps.requestActivationFile.outputs.filePath }}
|
path: ${{ steps.requestActivationFile.outputs.filePath }}
|
||||||
|
12
.github/workflows/build-tests-mac.yml
vendored
12
.github/workflows/build-tests-mac.yml
vendored
@ -11,7 +11,7 @@ concurrency:
|
|||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
buildForAllPlatformsWindows:
|
buildForAllPlatformsMacOS:
|
||||||
name: ${{ matrix.targetPlatform }} on ${{ matrix.unityVersion }}
|
name: ${{ matrix.targetPlatform }} on ${{ matrix.unityVersion }}
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
strategy:
|
strategy:
|
||||||
@ -20,11 +20,9 @@ jobs:
|
|||||||
projectPath:
|
projectPath:
|
||||||
- test-project
|
- test-project
|
||||||
unityVersion:
|
unityVersion:
|
||||||
- 2021.3.29f1
|
- 2021.3.31f1
|
||||||
- 2022.1.24f1
|
- 2022.3.11f1
|
||||||
- 2022.2.21f1
|
- 2023.1.17f1
|
||||||
- 2022.3.7f1
|
|
||||||
- 2023.1.8f1
|
|
||||||
targetPlatform:
|
targetPlatform:
|
||||||
- StandaloneOSX # Build a MacOS executable
|
- StandaloneOSX # Build a MacOS executable
|
||||||
|
|
||||||
@ -32,7 +30,7 @@ jobs:
|
|||||||
###########################
|
###########################
|
||||||
# Checkout #
|
# Checkout #
|
||||||
###########################
|
###########################
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
lfs: true
|
lfs: true
|
||||||
|
|
||||||
|
16
.github/workflows/build-tests-ubuntu.yml
vendored
16
.github/workflows/build-tests-ubuntu.yml
vendored
@ -52,11 +52,9 @@ jobs:
|
|||||||
projectPath:
|
projectPath:
|
||||||
- test-project
|
- test-project
|
||||||
unityVersion:
|
unityVersion:
|
||||||
- 2021.3.29f1
|
- 2021.3.31f1
|
||||||
- 2022.1.24f1
|
- 2022.3.11f1
|
||||||
- 2022.2.21f1
|
- 2023.1.17f1
|
||||||
- 2022.3.7f1
|
|
||||||
- 2023.1.8f1
|
|
||||||
targetPlatform:
|
targetPlatform:
|
||||||
- StandaloneOSX # Build a macOS standalone (Intel 64-bit) with mono backend.
|
- StandaloneOSX # Build a macOS standalone (Intel 64-bit) with mono backend.
|
||||||
- StandaloneWindows64 # Build a Windows 64-bit standalone with mono backend.
|
- StandaloneWindows64 # Build a Windows 64-bit standalone with mono backend.
|
||||||
@ -64,17 +62,11 @@ jobs:
|
|||||||
- iOS # Build an iOS player.
|
- iOS # Build an iOS player.
|
||||||
- Android # Build an Android .apk.
|
- Android # Build an Android .apk.
|
||||||
- WebGL # WebGL.
|
- WebGL # WebGL.
|
||||||
# - StandaloneWindows # Build a Windows standalone.
|
|
||||||
# - WSAPlayer # Build an Windows Store Apps player.
|
|
||||||
# - PS4 # Build a PS4 Standalone.
|
|
||||||
# - XboxOne # Build a Xbox One Standalone.
|
|
||||||
# - tvOS # Build to Apple's tvOS platform.
|
|
||||||
# - Switch # Build a Nintendo Switch player
|
|
||||||
steps:
|
steps:
|
||||||
###########################
|
###########################
|
||||||
# Checkout #
|
# Checkout #
|
||||||
###########################
|
###########################
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
lfs: true
|
lfs: true
|
||||||
|
|
||||||
|
13
.github/workflows/build-tests-windows.yml
vendored
13
.github/workflows/build-tests-windows.yml
vendored
@ -13,19 +13,18 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
buildForAllPlatformsWindows:
|
buildForAllPlatformsWindows:
|
||||||
name: ${{ matrix.targetPlatform }} on ${{ matrix.unityVersion }}
|
name: ${{ matrix.targetPlatform }} on ${{ matrix.unityVersion }}
|
||||||
runs-on: windows-2019
|
runs-on: windows-2022
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
projectPath:
|
projectPath:
|
||||||
- test-project
|
- test-project
|
||||||
unityVersion:
|
unityVersion:
|
||||||
- 2021.3.29f1
|
- 2021.3.31f1
|
||||||
- 2022.1.24f1
|
- 2022.3.11f1
|
||||||
- 2022.2.21f1
|
- 2023.1.17f1
|
||||||
- 2022.3.7f1
|
|
||||||
- 2023.1.8f1
|
|
||||||
targetPlatform:
|
targetPlatform:
|
||||||
|
- Android # Build an Android apk.
|
||||||
- StandaloneWindows64 # Build a Windows 64-bit standalone.
|
- StandaloneWindows64 # Build a Windows 64-bit standalone.
|
||||||
- StandaloneWindows # Build a Windows 32-bit standalone.
|
- StandaloneWindows # Build a Windows 32-bit standalone.
|
||||||
- WSAPlayer # Build a UWP App
|
- WSAPlayer # Build a UWP App
|
||||||
@ -35,7 +34,7 @@ jobs:
|
|||||||
###########################
|
###########################
|
||||||
# Checkout #
|
# Checkout #
|
||||||
###########################
|
###########################
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
lfs: true
|
lfs: true
|
||||||
|
|
||||||
|
4
.github/workflows/cleanup.yml
vendored
4
.github/workflows/cleanup.yml
vendored
@ -15,11 +15,11 @@ jobs:
|
|||||||
cleanupCloudRunner:
|
cleanupCloudRunner:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
if: github.event.event_type != 'pull_request_target'
|
if: github.event.event_type != 'pull_request_target'
|
||||||
with:
|
with:
|
||||||
lfs: true
|
lfs: true
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '18'
|
||||||
- run: yarn
|
- run: yarn
|
||||||
|
@ -56,7 +56,7 @@ jobs:
|
|||||||
#- k8s
|
#- k8s
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout (default)
|
- name: Checkout (default)
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
lfs: false
|
lfs: false
|
||||||
- name: Configure AWS Credentials
|
- name: Configure AWS Credentials
|
||||||
@ -116,7 +116,7 @@ jobs:
|
|||||||
#- 'cloud-runner-locking-get-locked'
|
#- 'cloud-runner-locking-get-locked'
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout (default)
|
- name: Checkout (default)
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
lfs: false
|
lfs: false
|
||||||
- name: Configure AWS Credentials
|
- name: Configure AWS Credentials
|
||||||
@ -167,7 +167,7 @@ jobs:
|
|||||||
- Android # Build an Android .apk.
|
- Android # Build an Android .apk.
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout (default)
|
- name: Checkout (default)
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
lfs: false
|
lfs: false
|
||||||
- run: yarn
|
- run: yarn
|
||||||
|
4
.github/workflows/integrity-check.yml
vendored
4
.github/workflows/integrity-check.yml
vendored
@ -16,8 +16,8 @@ jobs:
|
|||||||
name: Tests
|
name: Tests
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: '18'
|
node-version: '18'
|
||||||
- run: yarn
|
- run: yarn
|
||||||
|
7
.vscode/launch.json
vendored
7
.vscode/launch.json
vendored
@ -1,5 +1,12 @@
|
|||||||
{
|
{
|
||||||
"configurations": [
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "PowerShell Launch Current File",
|
||||||
|
"type": "PowerShell",
|
||||||
|
"request": "launch",
|
||||||
|
"script": "${file}",
|
||||||
|
"cwd": "${cwd}"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "node",
|
"type": "node",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
|
18
action.yml
18
action.yml
@ -106,6 +106,24 @@ inputs:
|
|||||||
default: ''
|
default: ''
|
||||||
description:
|
description:
|
||||||
'User and optionally group (user or user:group or uid:gid) to give ownership of the resulting build artifacts'
|
'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'
|
||||||
allowDirtyBuild:
|
allowDirtyBuild:
|
||||||
required: false
|
required: false
|
||||||
default: ''
|
default: ''
|
||||||
|
BIN
dist/index.js
generated
vendored
BIN
dist/index.js
generated
vendored
Binary file not shown.
BIN
dist/index.js.map
generated
vendored
BIN
dist/index.js.map
generated
vendored
Binary file not shown.
10
dist/platforms/ubuntu/steps/build.sh
vendored
10
dist/platforms/ubuntu/steps/build.sh
vendored
@ -69,7 +69,15 @@ fi
|
|||||||
if [[ "$BUILD_TARGET" == "Android" && -n "$ANDROID_SDK_MANAGER_PARAMETERS" ]]; then
|
if [[ "$BUILD_TARGET" == "Android" && -n "$ANDROID_SDK_MANAGER_PARAMETERS" ]]; then
|
||||||
echo "Updating Android SDK with parameters: $ANDROID_SDK_MANAGER_PARAMETERS"
|
echo "Updating Android SDK with parameters: $ANDROID_SDK_MANAGER_PARAMETERS"
|
||||||
export JAVA_HOME="$(awk -F'=' '/JAVA_HOME=/{print $2}' /usr/bin/unity-editor.d/*)"
|
export JAVA_HOME="$(awk -F'=' '/JAVA_HOME=/{print $2}' /usr/bin/unity-editor.d/*)"
|
||||||
"$(awk -F'=' '/ANDROID_HOME=/{print $2}' /usr/bin/unity-editor.d/*)/tools/bin/sdkmanager" "$ANDROID_SDK_MANAGER_PARAMETERS"
|
ANDROID_HOME_DIRECTORY="$(awk -F'=' '/ANDROID_HOME=/{print $2}' /usr/bin/unity-editor.d/*)"
|
||||||
|
SDKMANAGER=$(find $ANDROID_HOME_DIRECTORY/cmdline-tools -name sdkmanager)
|
||||||
|
if [ -z "${SDKMANAGER}" ]
|
||||||
|
then
|
||||||
|
echo "No sdkmanager found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
$SDKMANAGER "$ANDROID_SDK_MANAGER_PARAMETERS"
|
||||||
echo "Updated Android SDK."
|
echo "Updated Android SDK."
|
||||||
else
|
else
|
||||||
echo "Not updating Android SDK."
|
echo "Not updating Android SDK."
|
||||||
|
11
dist/platforms/windows/activate.ps1
vendored
11
dist/platforms/windows/activate.ps1
vendored
@ -1,7 +1,14 @@
|
|||||||
# Activates Unity
|
# Activates Unity
|
||||||
& "C:\Program Files\Unity\Hub\Editor\$Env:UNITY_VERSION\Editor\Unity.exe" -batchmode -quit -nographics `
|
|
||||||
|
Write-Output ""
|
||||||
|
Write-Output "###########################"
|
||||||
|
Write-Output "# Activating #"
|
||||||
|
Write-Output "###########################"
|
||||||
|
Write-Output ""
|
||||||
|
|
||||||
|
& "$Env:UNITY_PATH/Editor/Unity.exe" -batchmode -quit -nographics `
|
||||||
-username $Env:UNITY_EMAIL `
|
-username $Env:UNITY_EMAIL `
|
||||||
-password $Env:UNITY_PASSWORD `
|
-password $Env:UNITY_PASSWORD `
|
||||||
-serial $Env:UNITY_SERIAL `
|
-serial $Env:UNITY_SERIAL `
|
||||||
-projectPath "c:/BlankProject" `
|
-projectPath "c:/BlankProject" `
|
||||||
-logfile | Out-Host
|
-logfile - | Out-Host
|
||||||
|
91
dist/platforms/windows/build.ps1
vendored
91
dist/platforms/windows/build.ps1
vendored
@ -66,6 +66,26 @@ else
|
|||||||
Get-ChildItem -Path $Env:UNITY_PROJECT_PATH\Assets\Editor -Recurse
|
Get-ChildItem -Path $Env:UNITY_PROJECT_PATH\Assets\Editor -Recurse
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( "$Env:BUILD_TARGET" -eq "Android" -and -not ([string]::IsNullOrEmpty("$Env:ANDROID_KEYSTORE_BASE64")) )
|
||||||
|
{
|
||||||
|
Write-Output "Creating Android keystore."
|
||||||
|
|
||||||
|
# Write to consistent location as Windows Unity seems to have issues with pwd and can't find the keystore
|
||||||
|
$keystorePath = "C:/android.keystore"
|
||||||
|
[System.IO.File]::WriteAllBytes($keystorePath, [System.Convert]::FromBase64String($Env:ANDROID_KEYSTORE_BASE64))
|
||||||
|
|
||||||
|
# Ensure the project settings are pointed at the correct path
|
||||||
|
$unitySettingsPath = "$Env:UNITY_PROJECT_PATH\ProjectSettings\ProjectSettings.asset"
|
||||||
|
$fileContent = Get-Content -Path "$unitySettingsPath"
|
||||||
|
$fileContent = $fileContent -replace "AndroidKeystoreName:\s+.*", "AndroidKeystoreName: $keystorePath"
|
||||||
|
$fileContent | Set-Content -Path "$unitySettingsPath"
|
||||||
|
|
||||||
|
Write-Output "Created Android keystore."
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Write-Output "Not creating Android keystore."
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Pre-build debug information
|
# Pre-build debug information
|
||||||
#
|
#
|
||||||
@ -112,43 +132,52 @@ Write-Output ""
|
|||||||
# If $Env:CUSTOM_PARAMETERS contains spaces and is passed directly on the command line to Unity, powershell will wrap it
|
# If $Env:CUSTOM_PARAMETERS contains spaces and is passed directly on the command line to Unity, powershell will wrap it
|
||||||
# in double quotes. To avoid this, parse $Env:CUSTOM_PARAMETERS into an array, while respecting any quotations within the string.
|
# in double quotes. To avoid this, parse $Env:CUSTOM_PARAMETERS into an array, while respecting any quotations within the string.
|
||||||
$_, $customParametersArray = Invoke-Expression('Write-Output -- "" ' + $Env:CUSTOM_PARAMETERS)
|
$_, $customParametersArray = Invoke-Expression('Write-Output -- "" ' + $Env:CUSTOM_PARAMETERS)
|
||||||
|
$unityArgs = @(
|
||||||
|
"-quit",
|
||||||
|
"-batchmode",
|
||||||
|
"-nographics",
|
||||||
|
"-silent-crashes",
|
||||||
|
"-projectPath", $Env:UNITY_PROJECT_PATH,
|
||||||
|
"-executeMethod", $Env:BUILD_METHOD,
|
||||||
|
"-buildTarget", $Env:BUILD_TARGET,
|
||||||
|
"-customBuildTarget", $Env:BUILD_TARGET,
|
||||||
|
"-customBuildPath", $Env:CUSTOM_BUILD_PATH,
|
||||||
|
"-buildVersion", $Env:VERSION,
|
||||||
|
"-androidVersionCode", $Env:ANDROID_VERSION_CODE,
|
||||||
|
"-androidKeystorePass", $Env:ANDROID_KEYSTORE_PASS,
|
||||||
|
"-androidKeyaliasName", $Env:ANDROID_KEYALIAS_NAME,
|
||||||
|
"-androidKeyaliasPass", $Env:ANDROID_KEYALIAS_PASS,
|
||||||
|
"-androidTargetSdkVersion", $Env:ANDROID_TARGET_SDK_VERSION,
|
||||||
|
"-androidExportType", $Env:ANDROID_EXPORT_TYPE,
|
||||||
|
"-androidSymbolType", $Env:ANDROID_SYMBOL_TYPE,
|
||||||
|
"-logfile", "-"
|
||||||
|
) + $customParametersArray
|
||||||
|
|
||||||
& "C:\Program Files\Unity\Hub\Editor\$Env:UNITY_VERSION\Editor\Unity.exe" -quit -batchmode -nographics `
|
# Remove null items as that will fail the Start-Process call
|
||||||
-projectPath $Env:UNITY_PROJECT_PATH `
|
$unityArgs = $unityArgs | Where-Object { $_ -ne $null }
|
||||||
-executeMethod $Env:BUILD_METHOD `
|
|
||||||
-buildTarget $Env:BUILD_TARGET `
|
|
||||||
-customBuildTarget $Env:BUILD_TARGET `
|
|
||||||
-customBuildPath $Env:CUSTOM_BUILD_PATH `
|
|
||||||
-buildVersion $Env:VERSION `
|
|
||||||
-androidVersionCode $Env:ANDROID_VERSION_CODE `
|
|
||||||
-androidKeystoreName $Env:ANDROID_KEYSTORE_NAME `
|
|
||||||
-androidKeystorePass $Env:ANDROID_KEYSTORE_PASS `
|
|
||||||
-androidKeyaliasName $Env:ANDROID_KEYALIAS_NAME `
|
|
||||||
-androidKeyaliasPass $Env:ANDROID_KEYALIAS_PASS `
|
|
||||||
-androidTargetSdkVersion $Env:ANDROID_TARGET_SDK_VERSION `
|
|
||||||
-androidExportType $Env:ANDROID_EXPORT_TYPE `
|
|
||||||
-androidSymbolType $Env:ANDROID_SYMBOL_TYPE `
|
|
||||||
$customParametersArray `
|
|
||||||
-logfile | Out-Host
|
|
||||||
|
|
||||||
# Catch exit code
|
$process = Start-Process -FilePath "$Env:UNITY_PATH\Editor\Unity.exe" `
|
||||||
$Env:BUILD_EXIT_CODE=$LastExitCode
|
-ArgumentList $unityArgs `
|
||||||
|
-PassThru `
|
||||||
|
-NoNewWindow
|
||||||
|
|
||||||
|
while (!$process.HasExited) {
|
||||||
|
if ($process.HasExited) {
|
||||||
|
Start-Sleep -Seconds 5
|
||||||
|
Get-Process
|
||||||
|
|
||||||
|
Start-Sleep -Seconds 10
|
||||||
|
Get-Process
|
||||||
|
|
||||||
# Display results
|
# Display results
|
||||||
if ($Env:BUILD_EXIT_CODE -eq 0)
|
if ($process.ExitCode -eq 0)
|
||||||
{
|
{
|
||||||
Write-Output "Build Succeeded!"
|
Write-Output "Build Succeeded!!"
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
Write-Output "$('Build failed, with exit code ')$($Env:BUILD_EXIT_CODE)$('"')"
|
Write-Output "$('Build failed, with exit code ')$($process.ExitCode)$('"')"
|
||||||
}
|
}
|
||||||
|
|
||||||
# TODO: Determine if we need to set permissions on any files
|
|
||||||
|
|
||||||
#
|
|
||||||
# Results
|
|
||||||
#
|
|
||||||
|
|
||||||
Write-Output ""
|
Write-Output ""
|
||||||
Write-Output "###########################"
|
Write-Output "###########################"
|
||||||
Write-Output "# Build output #"
|
Write-Output "# Build output #"
|
||||||
@ -157,3 +186,9 @@ Write-Output ""
|
|||||||
|
|
||||||
Get-ChildItem $Env:BUILD_PATH_FULL
|
Get-ChildItem $Env:BUILD_PATH_FULL
|
||||||
Write-Output ""
|
Write-Output ""
|
||||||
|
|
||||||
|
exit $process.ExitCode
|
||||||
|
}
|
||||||
|
|
||||||
|
Start-Sleep -Seconds 5
|
||||||
|
}
|
||||||
|
11
dist/platforms/windows/entrypoint.ps1
vendored
11
dist/platforms/windows/entrypoint.ps1
vendored
@ -1,10 +1,16 @@
|
|||||||
|
Get-Process
|
||||||
|
Start-Sleep -Seconds 3
|
||||||
|
|
||||||
# Import any necessary registry keys, ie: location of windows 10 sdk
|
# Import any necessary registry keys, ie: location of windows 10 sdk
|
||||||
# No guarantee that there will be any necessary registry keys, ie: tvOS
|
# No guarantee that there will be any necessary registry keys, ie: tvOS
|
||||||
Get-ChildItem -Path c:\regkeys -File | Foreach {reg import $_.fullname}
|
Get-ChildItem -Path c:\regkeys -File | ForEach-Object {reg import $_.fullname}
|
||||||
|
|
||||||
# Register the Visual Studio installation so Unity can find it
|
# Register the Visual Studio installation so Unity can find it
|
||||||
regsvr32 C:\ProgramData\Microsoft\VisualStudio\Setup\x64\Microsoft.VisualStudio.Setup.Configuration.Native.dll
|
regsvr32 C:\ProgramData\Microsoft\VisualStudio\Setup\x64\Microsoft.VisualStudio.Setup.Configuration.Native.dll
|
||||||
|
|
||||||
|
# Kill the regsvr process
|
||||||
|
Get-Process -Name regsvr32 | ForEach-Object { Stop-Process -Id $_.Id -Force }
|
||||||
|
|
||||||
# Setup Git Credentials
|
# Setup Git Credentials
|
||||||
& "c:\steps\set_gitcredential.ps1"
|
& "c:\steps\set_gitcredential.ps1"
|
||||||
|
|
||||||
@ -16,3 +22,6 @@ regsvr32 C:\ProgramData\Microsoft\VisualStudio\Setup\x64\Microsoft.VisualStudio.
|
|||||||
|
|
||||||
# Free the seat for the activated license
|
# Free the seat for the activated license
|
||||||
& "c:\steps\return_license.ps1"
|
& "c:\steps\return_license.ps1"
|
||||||
|
|
||||||
|
Start-Sleep -Seconds 3
|
||||||
|
Get-Process
|
||||||
|
11
dist/platforms/windows/return_license.ps1
vendored
11
dist/platforms/windows/return_license.ps1
vendored
@ -1,7 +1,14 @@
|
|||||||
# Return the active Unity license
|
# Return the active Unity license
|
||||||
& "C:\Program Files\Unity\Hub\Editor\$Env:UNITY_VERSION\Editor\Unity.exe" -batchmode -quit -nographics `
|
|
||||||
|
Write-Output ""
|
||||||
|
Write-Output "###########################"
|
||||||
|
Write-Output "# Return License #"
|
||||||
|
Write-Output "###########################"
|
||||||
|
Write-Output ""
|
||||||
|
|
||||||
|
& "$Env:UNITY_PATH\Editor\Unity.exe" -batchmode -quit -nographics `
|
||||||
-username $Env:UNITY_EMAIL `
|
-username $Env:UNITY_EMAIL `
|
||||||
-password $Env:UNITY_PASSWORD `
|
-password $Env:UNITY_PASSWORD `
|
||||||
-returnlicense `
|
-returnlicense `
|
||||||
-projectPath "c:/BlankProject" `
|
-projectPath "c:/BlankProject" `
|
||||||
-logfile | Out-Host
|
-logfile - | Out-Host
|
||||||
|
@ -25,7 +25,11 @@ async function runMain() {
|
|||||||
if (process.platform === 'darwin') {
|
if (process.platform === 'darwin') {
|
||||||
MacBuilder.run(actionFolder);
|
MacBuilder.run(actionFolder);
|
||||||
} else {
|
} else {
|
||||||
await Docker.run(baseImage.toString(), { workspace, actionFolder, ...buildParameters });
|
await Docker.run(baseImage.toString(), {
|
||||||
|
workspace,
|
||||||
|
actionFolder,
|
||||||
|
...buildParameters,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
await CloudRunner.run(buildParameters, baseImage.toString());
|
await CloudRunner.run(buildParameters, baseImage.toString());
|
||||||
@ -38,4 +42,5 @@ async function runMain() {
|
|||||||
core.setFailed((error as Error).message);
|
core.setFailed((error as Error).message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
runMain();
|
runMain();
|
||||||
|
@ -40,6 +40,9 @@ class BuildParameters {
|
|||||||
public androidSdkManagerParameters!: string;
|
public androidSdkManagerParameters!: string;
|
||||||
public androidExportType!: string;
|
public androidExportType!: string;
|
||||||
public androidSymbolType!: string;
|
public androidSymbolType!: string;
|
||||||
|
public dockerCpuLimit!: string;
|
||||||
|
public dockerMemoryLimit!: string;
|
||||||
|
public dockerIsolationMode!: string;
|
||||||
|
|
||||||
public customParameters!: string;
|
public customParameters!: string;
|
||||||
public sshAgent!: string;
|
public sshAgent!: string;
|
||||||
@ -116,10 +119,12 @@ class BuildParameters {
|
|||||||
if (!Input.unitySerial && GitHub.githubInputEnabled) {
|
if (!Input.unitySerial && GitHub.githubInputEnabled) {
|
||||||
// No serial was present, so it is a personal license that we need to convert
|
// No serial was present, so it is a personal license that we need to convert
|
||||||
if (!Input.unityLicense) {
|
if (!Input.unityLicense) {
|
||||||
throw new Error(`Missing Unity License File and no Serial was found. If this
|
throw new Error(
|
||||||
|
`Missing Unity License File and no Serial was found. If this
|
||||||
is a personal license, make sure to follow the activation
|
is a personal license, make sure to follow the activation
|
||||||
steps and set the UNITY_LICENSE GitHub secret or enter a Unity
|
steps and set the UNITY_LICENSE GitHub secret or enter a Unity
|
||||||
serial number inside the UNITY_SERIAL GitHub secret.`);
|
serial number inside the UNITY_SERIAL GitHub secret.`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
unitySerial = this.getSerialFromLicenseFile(Input.unityLicense);
|
unitySerial = this.getSerialFromLicenseFile(Input.unityLicense);
|
||||||
} else {
|
} else {
|
||||||
@ -156,6 +161,9 @@ class BuildParameters {
|
|||||||
sshPublicKeysDirectoryPath: Input.sshPublicKeysDirectoryPath,
|
sshPublicKeysDirectoryPath: Input.sshPublicKeysDirectoryPath,
|
||||||
gitPrivateToken: Input.gitPrivateToken || (await GithubCliReader.GetGitHubAuthToken()),
|
gitPrivateToken: Input.gitPrivateToken || (await GithubCliReader.GetGitHubAuthToken()),
|
||||||
chownFilesTo: Input.chownFilesTo,
|
chownFilesTo: Input.chownFilesTo,
|
||||||
|
dockerCpuLimit: Input.dockerCpuLimit,
|
||||||
|
dockerMemoryLimit: Input.dockerMemoryLimit,
|
||||||
|
dockerIsolationMode: Input.dockerIsolationMode,
|
||||||
providerStrategy: CloudRunnerOptions.providerStrategy,
|
providerStrategy: CloudRunnerOptions.providerStrategy,
|
||||||
buildPlatform: CloudRunnerOptions.buildPlatform,
|
buildPlatform: CloudRunnerOptions.buildPlatform,
|
||||||
kubeConfig: CloudRunnerOptions.kubeConfig,
|
kubeConfig: CloudRunnerOptions.kubeConfig,
|
||||||
|
@ -48,6 +48,8 @@ class Docker {
|
|||||||
sshPublicKeysDirectoryPath,
|
sshPublicKeysDirectoryPath,
|
||||||
gitPrivateToken,
|
gitPrivateToken,
|
||||||
dockerWorkspacePath,
|
dockerWorkspacePath,
|
||||||
|
dockerCpuLimit,
|
||||||
|
dockerMemoryLimit,
|
||||||
} = parameters;
|
} = parameters;
|
||||||
|
|
||||||
const githubHome = path.join(runnerTempPath, '_github_home');
|
const githubHome = path.join(runnerTempPath, '_github_home');
|
||||||
@ -72,6 +74,8 @@ class Docker {
|
|||||||
--volume "${actionFolder}/platforms/ubuntu/steps:/steps:z" \
|
--volume "${actionFolder}/platforms/ubuntu/steps:/steps:z" \
|
||||||
--volume "${actionFolder}/platforms/ubuntu/entrypoint.sh:/entrypoint.sh:z" \
|
--volume "${actionFolder}/platforms/ubuntu/entrypoint.sh:/entrypoint.sh:z" \
|
||||||
--volume "${actionFolder}/unity-config:/usr/share/unity3d/config/:z" \
|
--volume "${actionFolder}/unity-config:/usr/share/unity3d/config/:z" \
|
||||||
|
--cpus=${dockerCpuLimit} \
|
||||||
|
--memory=${dockerMemoryLimit} \
|
||||||
${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \
|
${sshAgent ? `--volume ${sshAgent}:/ssh-agent` : ''} \
|
||||||
${
|
${
|
||||||
sshAgent && !sshPublicKeysDirectoryPath
|
sshAgent && !sshPublicKeysDirectoryPath
|
||||||
@ -86,7 +90,16 @@ class Docker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static getWindowsCommand(image: string, parameters: DockerParameters): string {
|
static getWindowsCommand(image: string, parameters: DockerParameters): string {
|
||||||
const { workspace, actionFolder, unitySerial, gitPrivateToken, dockerWorkspacePath } = parameters;
|
const {
|
||||||
|
workspace,
|
||||||
|
actionFolder,
|
||||||
|
unitySerial,
|
||||||
|
gitPrivateToken,
|
||||||
|
dockerWorkspacePath,
|
||||||
|
dockerCpuLimit,
|
||||||
|
dockerMemoryLimit,
|
||||||
|
dockerIsolationMode,
|
||||||
|
} = parameters;
|
||||||
|
|
||||||
return `docker run \
|
return `docker run \
|
||||||
--workdir c:${dockerWorkspacePath} \
|
--workdir c:${dockerWorkspacePath} \
|
||||||
@ -97,12 +110,16 @@ class Docker {
|
|||||||
${gitPrivateToken ? `--env GIT_PRIVATE_TOKEN="${gitPrivateToken}"` : ''} \
|
${gitPrivateToken ? `--env GIT_PRIVATE_TOKEN="${gitPrivateToken}"` : ''} \
|
||||||
--volume "${workspace}":"c:${dockerWorkspacePath}" \
|
--volume "${workspace}":"c:${dockerWorkspacePath}" \
|
||||||
--volume "c:/regkeys":"c:/regkeys" \
|
--volume "c:/regkeys":"c:/regkeys" \
|
||||||
|
--volume "C:/Program Files/Microsoft Visual Studio":"C:/Program Files/Microsoft Visual Studio" \
|
||||||
--volume "C:/Program Files (x86)/Microsoft Visual Studio":"C:/Program Files (x86)/Microsoft Visual Studio" \
|
--volume "C:/Program Files (x86)/Microsoft Visual Studio":"C:/Program Files (x86)/Microsoft Visual Studio" \
|
||||||
--volume "C:/Program Files (x86)/Windows Kits":"C:/Program Files (x86)/Windows Kits" \
|
--volume "C:/Program Files (x86)/Windows Kits":"C:/Program Files (x86)/Windows Kits" \
|
||||||
--volume "C:/ProgramData/Microsoft/VisualStudio":"C:/ProgramData/Microsoft/VisualStudio" \
|
--volume "C:/ProgramData/Microsoft/VisualStudio":"C:/ProgramData/Microsoft/VisualStudio" \
|
||||||
--volume "${actionFolder}/default-build-script":"c:/UnityBuilderAction" \
|
--volume "${actionFolder}/default-build-script":"c:/UnityBuilderAction" \
|
||||||
--volume "${actionFolder}/platforms/windows":"c:/steps" \
|
--volume "${actionFolder}/platforms/windows":"c:/steps" \
|
||||||
--volume "${actionFolder}/BlankProject":"c:/BlankProject" \
|
--volume "${actionFolder}/BlankProject":"c:/BlankProject" \
|
||||||
|
--cpus=${dockerCpuLimit} \
|
||||||
|
--memory=${dockerMemoryLimit} \
|
||||||
|
--isolation=${dockerIsolationMode} \
|
||||||
${image} \
|
${image} \
|
||||||
powershell c:/steps/entrypoint.ps1`;
|
powershell c:/steps/entrypoint.ps1`;
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,11 @@ describe('ImageTag', () => {
|
|||||||
|
|
||||||
test.each(['2000.0.0f0', '2011.1.11f1'])('accepts %p version format', (version) => {
|
test.each(['2000.0.0f0', '2011.1.11f1'])('accepts %p version format', (version) => {
|
||||||
expect(
|
expect(
|
||||||
() => new ImageTag({ editorVersion: version, targetPlatform: testImageParameters.targetPlatform }),
|
() =>
|
||||||
|
new ImageTag({
|
||||||
|
editorVersion: version,
|
||||||
|
targetPlatform: testImageParameters.targetPlatform,
|
||||||
|
}),
|
||||||
).not.toThrow();
|
).not.toThrow();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -46,13 +50,16 @@ describe('ImageTag', () => {
|
|||||||
|
|
||||||
describe('toString', () => {
|
describe('toString', () => {
|
||||||
it('returns the correct version', () => {
|
it('returns the correct version', () => {
|
||||||
const image = new ImageTag({ editorVersion: '2099.1.1111', targetPlatform: testImageParameters.targetPlatform });
|
const image = new ImageTag({
|
||||||
|
editorVersion: '2099.1.1111',
|
||||||
|
targetPlatform: testImageParameters.targetPlatform,
|
||||||
|
});
|
||||||
switch (process.platform) {
|
switch (process.platform) {
|
||||||
case 'win32':
|
case 'win32':
|
||||||
expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2099.1.1111-2`);
|
expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2099.1.1111-3`);
|
||||||
break;
|
break;
|
||||||
case 'linux':
|
case 'linux':
|
||||||
expect(image.toString()).toStrictEqual(`${defaults.image}:ubuntu-2099.1.1111-2`);
|
expect(image.toString()).toStrictEqual(`${defaults.image}:ubuntu-2099.1.1111-3`);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -67,27 +74,33 @@ describe('ImageTag', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('returns the specific build platform', () => {
|
it('returns the specific build platform', () => {
|
||||||
const image = new ImageTag({ editorVersion: '2019.2.11f1', targetPlatform: 'WebGL' });
|
const image = new ImageTag({
|
||||||
|
editorVersion: '2019.2.11f1',
|
||||||
|
targetPlatform: 'WebGL',
|
||||||
|
});
|
||||||
|
|
||||||
switch (process.platform) {
|
switch (process.platform) {
|
||||||
case 'win32':
|
case 'win32':
|
||||||
expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2019.2.11f1-webgl-2`);
|
expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2019.2.11f1-webgl-3`);
|
||||||
break;
|
break;
|
||||||
case 'linux':
|
case 'linux':
|
||||||
expect(image.toString()).toStrictEqual(`${defaults.image}:ubuntu-2019.2.11f1-webgl-2`);
|
expect(image.toString()).toStrictEqual(`${defaults.image}:ubuntu-2019.2.11f1-webgl-3`);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns no specific build platform for generic targetPlatforms', () => {
|
it('returns no specific build platform for generic targetPlatforms', () => {
|
||||||
const image = new ImageTag({ editorVersion: '2019.2.11f1', targetPlatform: 'NoTarget' });
|
const image = new ImageTag({
|
||||||
|
editorVersion: '2019.2.11f1',
|
||||||
|
targetPlatform: 'NoTarget',
|
||||||
|
});
|
||||||
|
|
||||||
switch (process.platform) {
|
switch (process.platform) {
|
||||||
case 'win32':
|
case 'win32':
|
||||||
expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2019.2.11f1-2`);
|
expect(image.toString()).toStrictEqual(`${defaults.image}:windows-2019.2.11f1-3`);
|
||||||
break;
|
break;
|
||||||
case 'linux':
|
case 'linux':
|
||||||
expect(image.toString()).toStrictEqual(`${defaults.image}:ubuntu-2019.2.11f1-2`);
|
expect(image.toString()).toStrictEqual(`${defaults.image}:ubuntu-2019.2.11f1-3`);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -33,7 +33,7 @@ class ImageTag {
|
|||||||
this.imagePlatformPrefix = ImageTag.getImagePlatformPrefixes(
|
this.imagePlatformPrefix = ImageTag.getImagePlatformPrefixes(
|
||||||
isCloudRunnerLocal ? process.platform : cloudRunnerBuilderPlatform,
|
isCloudRunnerLocal ? process.platform : cloudRunnerBuilderPlatform,
|
||||||
);
|
);
|
||||||
this.imageRollingVersion = 2; // Will automatically roll to the latest non-breaking version.
|
this.imageRollingVersion = 3; // Will automatically roll to the latest non-breaking version.
|
||||||
}
|
}
|
||||||
|
|
||||||
static get versionPattern(): RegExp {
|
static get versionPattern(): RegExp {
|
||||||
@ -86,8 +86,10 @@ class ImageTag {
|
|||||||
if (major >= 2020 || (major === 2019 && minor >= 3)) {
|
if (major >= 2020 || (major === 2019 && minor >= 3)) {
|
||||||
return windowsIl2cpp;
|
return windowsIl2cpp;
|
||||||
} else {
|
} else {
|
||||||
throw new Error(`Windows-based builds are only supported on 2019.3.X+ versions of Unity.
|
throw new Error(
|
||||||
If you are trying to build for windows-mono, please use a Linux based OS.`);
|
`Windows-based builds are only supported on 2019.3.X+ versions of Unity.
|
||||||
|
If you are trying to build for windows-mono, please use a Linux based OS.`,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import { Cli } from './cli/cli';
|
|||||||
import CloudRunnerQueryOverride from './cloud-runner/options/cloud-runner-query-override';
|
import CloudRunnerQueryOverride from './cloud-runner/options/cloud-runner-query-override';
|
||||||
import Platform from './platform';
|
import Platform from './platform';
|
||||||
import GitHub from './github';
|
import GitHub from './github';
|
||||||
|
import os from 'node:os';
|
||||||
|
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
|
|
||||||
@ -226,6 +227,35 @@ class Input {
|
|||||||
return Input.getInput('dockerWorkspacePath') || '/github/workspace';
|
return Input.getInput('dockerWorkspacePath') || '/github/workspace';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static get dockerCpuLimit(): string {
|
||||||
|
return Input.getInput('dockerCpuLimit') || os.cpus().length.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
static get dockerMemoryLimit(): string {
|
||||||
|
const bytesInMegabyte = 1024 * 1024;
|
||||||
|
|
||||||
|
let memoryMultiplier;
|
||||||
|
switch (os.platform()) {
|
||||||
|
case 'linux':
|
||||||
|
memoryMultiplier = 0.95;
|
||||||
|
break;
|
||||||
|
case 'win32':
|
||||||
|
memoryMultiplier = 0.8;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
memoryMultiplier = 0.75;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
Input.getInput('dockerMemoryLimit') || `${Math.floor((os.totalmem() / bytesInMegabyte) * memoryMultiplier)}m`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static get dockerIsolationMode(): string {
|
||||||
|
return Input.getInput('dockerIsolationMode') || 'default';
|
||||||
|
}
|
||||||
|
|
||||||
public static ToEnvVarFormat(input: string) {
|
public static ToEnvVarFormat(input: string) {
|
||||||
if (input.toUpperCase() === input) {
|
if (input.toUpperCase() === input) {
|
||||||
return input;
|
return input;
|
||||||
|
Loading…
Reference in New Issue
Block a user