Initial Build of External ScriptDir Project Fails After InstalledBuild Checkout

After checking out an InstalledBuild, the first launch of RunUAT.bat with ScriptDir parameter fails during AutomationTool compilation. All subsequent launches complete successfully without issues.

The attached log was taken from our project, but the error behavior is identical.

While the issue might seem negligible at first, it’s quite frustrating to encounter these “random” build failures on our agents after updating their InstalledBuilds.

It’s possible that there’s a missing preparation step required to make the InstalledBuild fully ready for use—but if so, it’s unclear which command (if any) should be run to ensure that.

Steps to Reproduce

  1. Download an InstalledBuild of the Unreal Editor into an empty folder.
    1. Tested with version 5.5.4 via the Epic Launcher.
  2. Do not launch the editor.
  3. Run RunUAT.bat with the -ScriptDir parameter.
    1. Example: "C:\Games\Epic Games\UE_5.5\Engine\Build\BatchFiles\RunUAT.bat" BuildGraph -ScriptDir="D:\Work\MyProject.Automation"
  4. An error occurs during this first execution.
  5. Re-running the same command completes successfully without issues

I couldn’t locate the linked log file, so I’m pasting it here instead:

`Running AutomationTool…
Using bundled DotNet SDK version: 8.0.300
Starting AutomationTool…
Parsing command line: BuildGraph -ScriptDir=E:/work/MyProject/Build/MyProject.Automation
Initializing script modules…
Building 1 projects (see Log ‘Engine/Programs/AutomationTool/Saved/Logs/Log.txt’ for more details)
Restore…
Build…

E:\ue-builds\Windows\Engine\Source\Programs\Shared\EpicGames.Horde\Logs\ServerLogger.cs(13,7): error CS0246: The type or namespace name ‘Horde’ could not be found (are you missing a using directive or an assembly reference?) (E:\ue-builds\Windows\Engine\Source\Programs\Shared\EpicGames.Horde\EpicGames.Horde.csproj)
E:\ue-builds\Windows\Engine\Source\Programs\Shared\EpicGames.Horde\Logs\ServerLogger.cs(234,104): error CS0246: The type or namespace name ‘RpcCreateLogEventRequest’ could not be found (are you missing a using directive or an assembly reference?) (E:\ue-builds\Windows\Engine\Source\Programs\Shared\EpicGames.Horde\EpicGames.Horde.csproj)
E:\ue-builds\Windows\Engine\Source\Programs\Shared\EpicGames.Horde\Logs\ServerLogger.cs(332,43): error CS0246: The type or namespace name ‘RpcCreateLogEventRequest’ could not be found (are you missing a using directive or an assembly reference?) (E:\ue-builds\Windows\Engine\Source\Programs\Shared\EpicGames.Horde\EpicGames.Horde.csproj)

Failed to build: E:\ue-builds\Windows\Engine\Source\Programs\Shared\EpicGames.Horde\EpicGames.Horde.csproj
Failed to build: E:\ue-builds\Windows\Engine\Source\Programs\UnrealBuildTool\UnrealBuildTool.csproj
Failed to build: E:\ue-builds\Windows\Engine\Source\Programs\AutomationTool\AutomationUtils\AutomationUtils.Automation.csproj
Failed to build: E:\ue-builds\Windows\Engine\Source\Programs\AutomationTool\Localization\Localization.Automation.csproj
Failed to build: E:\ue-builds\Windows\Engine\Source\Programs\AutomationTool\OneSkyLocalization\OneSkyLocalization.Automation.csproj
Failed to build: E:\ue-builds\Windows\Engine\Source\Programs\AutomationTool\XLocLocalization\XLocLocalization.Automation.csproj
Failed to build: E:\ue-builds\Windows\Engine\Source\Programs\AutomationTool\Scripts\AutomationScripts.Automation.csproj
Failed to build: E:\ue-builds\Windows\Engine\Source\Programs\AutomationTool\Android\Android.Automation.csproj
Failed to build: E:\ue-builds\Windows\Engine\Source\Programs\AutomationTool\Gauntlet\Gauntlet.Automation.csproj
Failed to build: E:\work\MyProject\Build\MyProject.Automation\MyProject.Automation.csproj
Build projects time: 16.51 s
AutomationTool executed for 0h 0m 20s
AutomationTool exiting with ExitCode=1 (Error_Unknown)
BUILD FAILED`

Hey there,

When you refer to “checking out an Installed Build”, what exactly do you mean here? And can you please provide the command line invocation that you’re issuing? I can see you’re invoking RunUAT.bat with -ScriptDir, but I’ll need some additional details as the automation script recompilation can be a little tricky.

The aforementioned code that is missing is all Protobuf related, so it’s likely that one of two things are true:

  • Installed build doesn’t include the intermediates of the protobuf generated code (and hence why I’m asking you for more details on ‘checked out installed build’)
  • There is an issue in how RunUAT is attempting to recompile the binaries of a launcher build.

I have been able to use a launcher build and invoke a separate project buildgraph target from it’s ScriptDir - so I’m assuming that this installed build variant isn’t what you’re referring to.

Edit:

  • I had to move around some of my local files a bit to get things appropriately breaking :slight_smile:
  • I’ve got a repro locally. Stay tuned.

Kind regards,

Julian

Hey there,

After further digging on my end, it looks like this issue has been fixed for 5.6. The change is a bit difficult to backport, so my recommendation would be to lean into 5.6 for a proper fix to this. If you’re unable to do this, you could introduce a mandatory rebuild for this edge case of the EpicGames.Horde project.

The root cause here is:

  • In the old code, we have Restore and Build broken apart into separate invocations (5.5)
    • Protobuf generated source will be created in the restore phase
    • The ProjectInstance.ImportPaths do not contain the necessary *.nuget.g.props

So priming either a build or a restore of the specific EpicGames.Horde project (even in your installed build + packaging it - dotnet restore “C:\Program Files\Epic Games\UE_5.5\Engine\Source\Programs\Shared\EpicGames.Horde\EpicGames.Horde.csproj”) would certainly work around this issue as the *nuget.g.props would get picked up in the ProjectInstance construction. You could also modify your InstalledEngineBuild.xml and make sure to copy over the related files.

Kind regards,

Julian

Hi there,

I apologize for the delayed response.

I have been able to test your suggestion last week, and it worked flawlessly. Thank you!

We have added this line to our checkout process before first RunUAT call:

dotnet restore "C:\Program Files\Epic Games\UE_5.5\Engine\Source\Programs\Shared\EpicGames.Horde\EpicGames.Horde.csproj"