From f7f3f70c5760449a1d9f264093b94eb7be17d718 Mon Sep 17 00:00:00 2001 From: Ryo Oka Date: Tue, 30 Sep 2025 18:55:14 +0900 Subject: [PATCH] Support activeBuildProfile parameter (#738) * feat: add `-activeBuildProfile` * feat: descriptive error in case `-activeBuildProfile` is passed without actual value --- .../Editor/UnityBuilderAction/Builder.cs | 25 ++++++++++++++----- .../Input/ArgumentsParser.cs | 14 +++++++++++ dist/platforms/mac/steps/build.sh | 3 ++- dist/platforms/ubuntu/steps/build.sh | 3 ++- dist/platforms/windows/build.ps1 | 8 +++++- .../Sample WebGL Build Profile.asset | 3 ++- 6 files changed, 46 insertions(+), 10 deletions(-) diff --git a/dist/default-build-script/Assets/Editor/UnityBuilderAction/Builder.cs b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Builder.cs index ac8e7e8e..3b778402 100644 --- a/dist/default-build-script/Assets/Editor/UnityBuilderAction/Builder.cs +++ b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Builder.cs @@ -56,14 +56,23 @@ namespace UnityBuilderAction // of either `UnityEditor.BuildPlayerOptions` or `UnityEditor.BuildPlayerWithProfileOptions` dynamic buildPlayerOptions; - if (options["customBuildProfile"] != "") { + if (options.TryGetValue("activeBuildProfile", out var buildProfilePath)) { + if (string.IsNullOrEmpty(buildProfilePath)) { + throw new Exception("`-activeBuildProfile` is set but with an empty value; this shouldn't happen"); + } #if UNITY_6000_0_OR_NEWER // Load build profile from Assets folder - BuildProfile buildProfile = AssetDatabase.LoadAssetAtPath(options["customBuildProfile"]); + var buildProfile = AssetDatabase.LoadAssetAtPath(buildProfilePath) + ?? throw new Exception("Build profile file not found at path: " + buildProfilePath); - // Set it as active - BuildProfile.SetActiveBuildProfile(buildProfile); +#if !BUILD_PROFILE_LOADED + throw new Exception("Build profile's define symbol not present before script execution; shouldn't happen"); +#endif // BUILD_PROFILE_LOADED + + // no need to set active profile, as already set by `-activeBuildProfile` CLI argument + // BuildProfile.SetActiveBuildProfile(buildProfile); + Debug.Log($"build profile: {buildProfile.name}"); // Define BuildPlayerWithProfileOptions buildPlayerOptions = new BuildPlayerWithProfileOptions { @@ -71,12 +80,16 @@ namespace UnityBuilderAction locationPathName = options["customBuildPath"], options = buildOptions, }; -#else +#else // UNITY_6000_0_OR_NEWER throw new Exception("Build profiles are not supported by this version of Unity (" + Application.unityVersion +")"); -#endif +#endif // UNITY_6000_0_OR_NEWER } else { +#if BUILD_PROFILE_LOADED + throw new Exception("Build profile's define symbol present; shouldn't happen"); +#endif // BUILD_PROFILE_LOADED + // Gather values from project var scenes = EditorBuildSettings.scenes.Where(scene => scene.enabled).Select(s => s.path).ToArray(); diff --git a/dist/default-build-script/Assets/Editor/UnityBuilderAction/Input/ArgumentsParser.cs b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Input/ArgumentsParser.cs index 058d31b7..2b47ba90 100644 --- a/dist/default-build-script/Assets/Editor/UnityBuilderAction/Input/ArgumentsParser.cs +++ b/dist/default-build-script/Assets/Editor/UnityBuilderAction/Input/ArgumentsParser.cs @@ -21,6 +21,19 @@ namespace UnityBuilderAction.Input EditorApplication.Exit(110); } +#if UNITY_6000_0_OR_NEWER + var buildProfileSupport = true; +#else + var buildProfileSupport = false; +#endif // UNITY_6000_0_OR_NEWER + + string buildProfile; + if (buildProfileSupport && validatedOptions.TryGetValue("activeBuildProfile", out buildProfile)) { + if (validatedOptions.ContainsKey("buildTarget")) { + Console.WriteLine("Extra argument -buildTarget"); + EditorApplication.Exit(122); + } + } else { string buildTarget; if (!validatedOptions.TryGetValue("buildTarget", out buildTarget)) { Console.WriteLine("Missing argument -buildTarget"); @@ -31,6 +44,7 @@ namespace UnityBuilderAction.Input Console.WriteLine(buildTarget + " is not a defined " + typeof(BuildTarget).Name); EditorApplication.Exit(121); } + } string customBuildPath; if (!validatedOptions.TryGetValue("customBuildPath", out customBuildPath)) { diff --git a/dist/platforms/mac/steps/build.sh b/dist/platforms/mac/steps/build.sh index 8149c49a..8df43e90 100755 --- a/dist/platforms/mac/steps/build.sh +++ b/dist/platforms/mac/steps/build.sh @@ -153,10 +153,11 @@ echo "" -password "$UNITY_PASSWORD" \ -customBuildName "$BUILD_NAME" \ -projectPath "$UNITY_PROJECT_PATH" \ - -buildTarget "$BUILD_TARGET" \ + $( [ -z "$BUILD_PROFILE" ] && echo "-buildTarget $BUILD_TARGET") \ -customBuildTarget "$BUILD_TARGET" \ -customBuildPath "$CUSTOM_BUILD_PATH" \ -customBuildProfile "$BUILD_PROFILE" \ + ${BUILD_PROFILE:+-activeBuildProfile} ${BUILD_PROFILE:+"$BUILD_PROFILE"} \ -executeMethod "$BUILD_METHOD" \ -buildVersion "$VERSION" \ -androidVersionCode "$ANDROID_VERSION_CODE" \ diff --git a/dist/platforms/ubuntu/steps/build.sh b/dist/platforms/ubuntu/steps/build.sh index 9e391651..e48b73e6 100755 --- a/dist/platforms/ubuntu/steps/build.sh +++ b/dist/platforms/ubuntu/steps/build.sh @@ -125,10 +125,11 @@ unity-editor \ $( [ "${MANUAL_EXIT}" == "true" ] || echo "-quit" ) \ -customBuildName "$BUILD_NAME" \ -projectPath "$UNITY_PROJECT_PATH" \ - -buildTarget "$BUILD_TARGET" \ + $( [ -z "$BUILD_PROFILE" ] && echo "-buildTarget $BUILD_TARGET" ) \ -customBuildTarget "$BUILD_TARGET" \ -customBuildPath "$CUSTOM_BUILD_PATH" \ -customBuildProfile "$BUILD_PROFILE" \ + ${BUILD_PROFILE:+-activeBuildProfile} ${BUILD_PROFILE:+"$BUILD_PROFILE"} \ -executeMethod "$BUILD_METHOD" \ -buildVersion "$VERSION" \ -androidVersionCode "$ANDROID_VERSION_CODE" \ diff --git a/dist/platforms/windows/build.ps1 b/dist/platforms/windows/build.ps1 index ac78d62b..0751246d 100644 --- a/dist/platforms/windows/build.ps1 +++ b/dist/platforms/windows/build.ps1 @@ -166,7 +166,6 @@ $unityArgs = @( "-customBuildName", "`"$Env:BUILD_NAME`"", "-projectPath", "`"$Env:UNITY_PROJECT_PATH`"", "-executeMethod", "`"$Env:BUILD_METHOD`"", - "-buildTarget", "`"$Env:BUILD_TARGET`"", "-customBuildTarget", "`"$Env:BUILD_TARGET`"", "-customBuildPath", "`"$Env:CUSTOM_BUILD_PATH`"", "-customBuildProfile", "`"$Env:BUILD_PROFILE`"", @@ -181,6 +180,13 @@ $unityArgs = @( "-logfile", "-" ) + $customParametersArray +if (-not $Env:BUILD_PROFILE) { + $unityArgs += @("-buildTarget", $Env:BUILD_TARGET) +} +if ($Env:BUILD_PROFILE) { + $unityArgs += @("-activeBuildProfile", $Env:BUILD_PROFILE) +} + # Remove null items as that will fail the Start-Process call $unityArgs = $unityArgs | Where-Object { $_ -ne $null } diff --git a/test-project/Assets/Settings/Build Profiles/Sample WebGL Build Profile.asset b/test-project/Assets/Settings/Build Profiles/Sample WebGL Build Profile.asset index 50ee7f2b..297ba210 100644 --- a/test-project/Assets/Settings/Build Profiles/Sample WebGL Build Profile.asset +++ b/test-project/Assets/Settings/Build Profiles/Sample WebGL Build Profile.asset @@ -20,7 +20,8 @@ MonoBehaviour: rid: 200022742090383361 m_OverrideGlobalSceneList: 0 m_Scenes: [] - m_ScriptingDefines: [] + m_ScriptingDefines: + - BUILD_PROFILE_LOADED m_PlayerSettingsYaml: m_Settings: [] references: