In Horde, what’s the intended way to provide engine binaries?

Hello,

I’m trying to set up a packaged build pipeline for my project using Horde, and I’m trying to follow the example UE5/lyra set up. In the default UE5.stream.json, they have two pipelines, incremental (in an “incremental” workspace, meant for UGS), and packaged build (in a “full”, non-incremental workspace, meant to build the project for shipping). I’ve modified this and added a third “engine” pipeline, which is intended to build the engine in the incremental workspace and provide it for the other two pipelines.

The issue I’m running into is that the packaged build workspace doesn’t include the engine build, since that happens in the incremental workspace. To solve this, I’ve tried:

1. Using Horde Artifacts (CreateArtifact / RetrieveArtifact) - I extended BuildEditorAndTools.xml to produce an engine-binaries artifact, and in BuildAndTestProject.xml added a corresponding RetrieveArtifact node. The problem is the build process locks some of the engine files, so when I restore it fails because it can’t overwrite certain files:

Error writing to disk: Unable to extract Microsoft.Extensions.DependencyInjection.dll: The process cannot access the file '...\Engine\Binaries\DotNET\AutomationTool\Microsoft.Extensions.DependencyInjection.dll' because it is being used by another process.

Processes with open handles to file:
...\ThirdParty\DotNet\8.0.300\win-x64\dotnet.exe

2.Putting the compiled engine binaries into perforce - This didn’t work either, again because of denied file access:
Microsoft.NET.Publish.targets(351,5): error MSB3021: Unable to copy file "obj\Development\AutomationTool.dll" to "...\AutomationTool.dll". Access to the path is denied.

Currently I’m getting around it by copying the engine files from the incremental workspace into the full workspace, but it’s kind of annoying to have to do that for every agent and it seems like there should be better way. Does anyone know the recommended flow to ensure the engine is available to every agent?

Any guidance is appreciated.

Thanks!

Binaries will automatically be sent to the artifact store via a <Compile> Task. Subsequent Node ‘s specify Requires so Horde can load the agent with the correct artifacts. You shouldn’t manually need to manipulate artifacts.

Don’t put any precompiled binaries into Perforce. That will cause issue when Horde goes to compile. Automation tool will get compiled by Horde.

It sounds like most of the issue is probably your P4 setup. You’ll want to be sure at the root of the p4 stream you provide to Horde, has Engine at the root. There are a handful for other P4 requirements - most of this applies whether you’re doing it yourself or using Universal Foundry: Perforce Server Configuration | Documentation | Universal Foundry