diff --git a/test/Scripts.Integration.Test/Editor/Builder.cs b/samples/unity-of-bugs/Assets/Editor/Builder.cs similarity index 100% rename from test/Scripts.Integration.Test/Editor/Builder.cs rename to samples/unity-of-bugs/Assets/Editor/Builder.cs diff --git a/samples/unity-of-bugs/Assets/Editor/Builder.cs.meta b/samples/unity-of-bugs/Assets/Editor/Builder.cs.meta new file mode 100644 index 000000000..9b237defe --- /dev/null +++ b/samples/unity-of-bugs/Assets/Editor/Builder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b4f2e3a1c9d47b6a5e8f0c2d4b6a8e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/scripts/build-unity-of-bugs.ps1 b/scripts/build-unity-of-bugs.ps1 new file mode 100644 index 000000000..12558c3f7 --- /dev/null +++ b/scripts/build-unity-of-bugs.ps1 @@ -0,0 +1,39 @@ +param( + [string] $UnityPath = "", + [string] $Platform = "", + [string] $BuildPath = "" +) + +$ErrorActionPreference = "Stop" + +. $PSScriptRoot/unity-utils.ps1 +. $PSScriptRoot/../test/Scripts.Integration.Test/globals.ps1 + +if (-not $UnityPath) +{ + $UnityPath = FindNewestUnity +} + +$unityPath = FormatUnityPath $UnityPath +$buildMethod = BuildMethodFor $Platform +$projectPath = "$PSScriptRoot/../samples/unity-of-bugs" + +if (-not $BuildPath) +{ + $appName = GetTestAppName $buildMethod + $BuildPath = "$projectPath/Build/$appName" +} + +Write-Host "Building unity-of-bugs sample for $Platform" +Write-Host " Build method: $buildMethod" +Write-Host " Output path: $BuildPath" + +$unityArgs = @( + "-batchmode", + "-quit", + "-projectPath", $projectPath, + "-executeMethod", $buildMethod, + "-buildPath", $BuildPath +) + +RunUnity $unityPath $unityArgs diff --git a/scripts/repack.ps1 b/scripts/repack.ps1 index 2dfebb7d7..8eb646d11 100644 --- a/scripts/repack.ps1 +++ b/scripts/repack.ps1 @@ -10,16 +10,8 @@ if (Test-Path "package-release.zip") { assemblyalias --target-directory "package-dev/Runtime" --internalize --prefix "Sentry." --assemblies-to-alias "Microsoft*;System*" assemblyalias --target-directory "package-dev/Editor" --internalize --prefix "Sentry." --assemblies-to-alias "Microsoft*;Mono.Cecil*" -if ($IsWindows) { - $unity_versions = Get-ChildItem "C:\Program Files\Unity\Hub\Editor\" -Directory | Select-Object -ExpandProperty Name - $unity_version = $unity_versions | Sort-Object -Descending | Select-Object -First 1 - $unity_path = "C:\Program Files\Unity\Hub\Editor\${unity_version}\Editor\Unity.exe" -} -else { - $unity_versions = Get-ChildItem "/Applications/Unity/Hub/Editor/" -Directory | Select-Object -ExpandProperty Name - $unity_version = $unity_versions | Sort-Object -Descending | Select-Object -First 1 - $unity_path = "/Applications/Unity/Hub/Editor/$unity_version/Unity.app/Contents/MacOS/Unity" -} +. $PSScriptRoot/unity-utils.ps1 +$unity_path = FindNewestUnity # Start up Unity to create the appropriate .meta files Start-Process -FilePath $unity_path -ArgumentList "-quit -batchmode -nographics -logFile - -projectPath `"samples/unity-of-bugs/`"" -Wait diff --git a/scripts/unity-utils.ps1 b/scripts/unity-utils.ps1 index 710922229..cde99cdf7 100644 --- a/scripts/unity-utils.ps1 +++ b/scripts/unity-utils.ps1 @@ -1,6 +1,55 @@ $RunUnityLicenseRetryTimeoutSeconds = 3600 $RunUnityLicenseRetryIntervalSeconds = 60 +function FindNewestUnity() +{ + if ($IsWindows) + { + $hubPath = "C:\Program Files\Unity\Hub\Editor\" + } + elseif ($IsMacOS) + { + $hubPath = "/Applications/Unity/Hub/Editor/" + } + elseif ($IsLinux) + { + $hubPath = "$env:HOME/Unity/Hub/Editor/" + } + else + { + throw "Unsupported platform for Unity auto-detection" + } + + if (-not (Test-Path $hubPath)) + { + throw "Unity Hub Editor folder not found at: $hubPath" + } + + $unityVersions = Get-ChildItem $hubPath -Directory | Select-Object -ExpandProperty Name + if ($unityVersions.Count -eq 0) + { + throw "No Unity versions found in: $hubPath" + } + + $unityVersion = $unityVersions | Sort-Object -Descending | Select-Object -First 1 + + if ($IsWindows) + { + $unityPath = "${hubPath}${unityVersion}\Editor\Unity.exe" + } + elseif ($IsMacOS) + { + $unityPath = "${hubPath}${unityVersion}/Unity.app/Contents/MacOS/Unity" + } + else + { + $unityPath = "${hubPath}${unityVersion}/Editor/Unity" + } + + Write-Host "Auto-detected Unity $unityVersion at: $unityPath" + return $unityPath +} + function RunUnity([string] $unityPath, [string[]] $arguments, [switch] $ReturnLogOutput) { If ($unityPath.StartsWith("docker ")) diff --git a/test/Scripts.Integration.Test/create-project.ps1 b/test/Scripts.Integration.Test/create-project.ps1 index f18cfea52..bcc74fb97 100644 --- a/test/Scripts.Integration.Test/create-project.ps1 +++ b/test/Scripts.Integration.Test/create-project.ps1 @@ -1,4 +1,4 @@ -param( +param( [string] $UnityPath ) @@ -28,6 +28,9 @@ RunUnityCustom $UnityPath @("-batchmode", "-createProject", "$(GetNewProjectPath Write-Log "Copying Editor scripts to integration project:" New-Item -Path "$(GetNewProjectAssetsPath)" -Name "Editor" -ItemType "directory" +# Copy Builder.cs from unity-of-bugs sample (single source of truth) +Copy-Item "$UnityOfBugsPath/Assets/Editor/Builder.cs" -Destination "$(GetNewProjectAssetsPath)/Editor/" +# Copy remaining Editor scripts from integration test folder Copy-Item -Recurse "$IntegrationScriptsPath/Editor/*" -Destination "$(GetNewProjectAssetsPath)/Editor/" ` -Exclude "BuildTimeOptions.cs" New-Item -Path "$(GetNewProjectAssetsPath)" -Name "Scenes" -ItemType "directory"