Trying to build with GitHub Actions on self-hosted fails

I’m trying to get my builds automated with GitHub Actions. That’s the workflow I have so far:

steps:
  - name: Checkout code
    uses: actions/checkout@v6
    with:
      fetch-depth: 0
      clean: false
      lfs: true

name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  uat:
    name: Unreal Automation Tool
    runs-on: [self-hosted, windows, x64]

    steps:
      - name: Checkout code
        uses: actions/checkout@v6
        with:
          fetch-depth: 0
          clean: false
          lfs: true

      - name: HarbingerGame Windows+Linux Development
        shell: powershell
        run: '& "C:/Program Files/Epic Games/UE_5.7/Engine/Build/BatchFiles/RunUAT.bat" -ScriptsForProject=${{ github.workspace }}/HarbingerGame.uproject BuildCookRun -project=${{ github.workspace }}/HarbingerGame.uproject -noP4 -clientconfig=Development -serverconfig=Development -nocompile -nocompileeditor -installed -unrealexe="C:\Program Files\Epic Games\UE_5.7\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" -utf8output -platform=Win64+Linux -target=HarbingerGame -clientarchitecture=x64 -build -cook -map=/Game/HarbingerGame/Maps/Prototyping/Prototyping -CookCultures=en -unversionedcookedcontent -zenstore -pak -iostore -stage -compressed -manifests -cookincremental -archive -archivedirectory=<snip>/Archive/Development'

      - name: Upload Archive Windows Development
        uses: actions/upload-artifact@v7
        with:
          name: HarbingerGame-Windows
          path: <snip>/Archive/Development/Windows/
          retention-days: 7

      - name: Upload Archive Linux Development
        uses: actions/upload-artifact@v7
        with:
          name: HarbingerGame-Linux
          path: <snip>/Archive/Development/Linux/
          retention-days: 7

Building works, but when it comes to cooking, it fails on the checked out repo from the runner. The runner is self-hosted and installed on my local machine and runs as my local user. The cooking fails on that runner checked our repository no matter if executed by the github actions runner or locally via powershell:

LogMeshReduction: Display: Using QuadricMeshReduction for automatic static mesh reduction
LogMeshReduction: Display: Using SkeletalMeshReduction for automatic skeletal mesh reduction
LogMeshReduction: Display: Using ProxyLODMeshReduction for automatic mesh merging
LogMeshReduction: Display: No distributed automatic mesh merging module available
LogShaderCompilers: Display: Compiling shader autogen file: <snip>/HarbingerGame/Intermediate/ShaderAutogen/PCD3D_SM5/AutogenShaderHeaders.ush
LogShaderCompilers: Display: Autogen file is unchanged, skipping write.
LogShaderCompilers: Display: Compiling shader autogen file: <snip>/HarbingerGame/Intermediate/ShaderAutogen/VULKAN_SM6/AutogenShaderHeaders.ush
LogShaderCompilers: Display: Autogen file is unchanged, skipping write.
LogVirtualization: Display: VirtualizationSystem name found in ini file: None
LogVirtualization: Display: FNullVirtualizationSystem mounted, virtualization will be disabled
LogWorldPartition: Display: FWorldPartitionClassDescRegistry::Initialize started...
LogWorldPartition: Display: FWorldPartitionClassDescRegistry::Initialize took 2.582 ms
LogMetaSound: Display: MetaSound Page Target Initialized to 'Default'
LogAudio: Display: Registering Engine Module Parameter Interfaces...
LogShaderCompilers: Display: Shaders left to compile 0
Took 6,47s to run UnrealEditor-Cmd.exe, ExitCode=1
Cook failed.
(see C:\Users\em\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.7\Log.txt for full exception trace)
AutomationTool executed for 0h 0m 11s
AutomationTool exiting with ExitCode=25 (Error_UnknownCookFailure)
BUILD FAILED

The same command works without any problems, when exuted on the project repository itself from that I push to github..

LogMeshReduction: Display: Using QuadricMeshReduction for automatic static mesh reduction
LogMeshReduction: Display: Using SkeletalMeshReduction for automatic skeletal mesh reduction
LogMeshReduction: Display: Using ProxyLODMeshReduction for automatic mesh merging
LogMeshReduction: Display: No distributed automatic mesh merging module available
LogShaderCompilers: Display: Compiling shader autogen file: /HarbingerGame/Intermediate/ShaderAutogen/PCD3D_SM5/AutogenShaderHeaders.ush
LogShaderCompilers: Display: Autogen file is unchanged, skipping write.
LogShaderCompilers: Display: Compiling shader autogen file: /HarbingerGame/Intermediate/ShaderAutogen/VULKAN_SM6/AutogenShaderHeaders.ush
LogShaderCompilers: Display: Autogen file is unchanged, skipping write.
LogVirtualization: Display: VirtualizationSystem name found in ini file: None
LogVirtualization: Display: FNullVirtualizationSystem mounted, virtualization will be disabled
LogWorldPartition: Display: FWorldPartitionClassDescRegistry::Initialize started…
LogWorldPartition: Display: FWorldPartitionClassDescRegistry::Initialize took 2.525 ms
LogMetaSound: Display: MetaSound Page Target Initialized to ‘Default’
LogAudio: Display: Registering Engine Module Parameter Interfaces…
LogAudioCaptureCore: Display: No Audio Capture implementations found. Audio input will be silent.
LogAudioCaptureCore: Display: No Audio Capture implementations found. Audio input will be silent.
LogGameFeatures: Display: Total built in plugin load time 0.0011s
LogCsvProfiler: Display: Metadata set : largeworldcoordinates=“1”
LogCook: Display: CookProcessCount=1. CookMultiprocess is disabled and the cooker is running as a single process.
LogCook: Display: CookSettings for Memory:
MemoryMaxUsedVirtual 0MiB
MemoryMaxUsedPhysical 0MiB
MemoryMinFreeVirtual 2048MiB
MemoryMinFreePhysical 2048MiB
MemoryTriggerGCAtPressureLevel None
SoftGCMemoryUseTrigger disabled
SoftGCTimeBudgetTrigger enabled (0.05 budget, 30s min period)
LogCook: Display: SkipOnlyEditorOnly is enabled, unsolicited packages will not be cooked unless they are referenced from the cooked version of the instigator package.
LogEditorDomain: Display: Cycle detected in parents of class /Script/RigVMDeveloper.RigVMUnitNode. Allow flags for editordomain and incremental cooking will be invalid.
LogZenServiceInstance: Display: Launching zen utility ‘C:/Program Files/Epic Games/UE_5.7/Engine/Binaries/Win64/zen.exe service status’.
LogZenServiceInstance: Display: Launching zen utility ‘C:/Program Files/Epic Games/UE_5.7/Engine/Binaries/Win64/zen.exe service status’.
LogZenStore: Display: Establishing oplog ‘HarbingerGame.47ed4c01/EditorDomain’
LogZenStore: Display: Zen project ‘HarbingerGame.47ed4c01’ already exists
LogZenStore: Display: Zen oplog ‘HarbingerGame.47ed4c01/EditorDomain’ already exists

I honestly don’t know what could be wrong with the checkout done by github actions..

That’s the mentioned stack trace, which does help me neither:

CommandletException: Editor terminated with exit code 1 while running Cook for _work\HarbingerGame\HarbingerGame\HarbingerGame.uproject; see log C:\Users\em\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+Program+Files+Epic+Games+UE_5.7\Cook-2026.03.02-12.06.53.txt
at AutomationTool.CommandUtils.FinishRunCommandlet(FileReference ProjectFile, String Commandlet, DateTime StartTime, IProcessResult RunResult, String LocalLogFile, String& DestLogFile, UInt32 ErrorLevel) in C:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\AutomationUtils\CommandletUtils.cs:line 476
at AutomationTool.CommandUtils.RunCommandlet(FileReference ProjectFile, String UnrealExe, String Commandlet, String Parameters, String& DestLogFile, UInt32 ErrorLevel) in C:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\AutomationUtils\CommandletUtils.cs:line 281
at AutomationTool.CommandUtils.RunCommandlet(FileReference ProjectFile, String UnrealExe, String Commandlet, String Parameters, UInt32 ErrorLevel) in C:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\AutomationUtils\CommandletUtils.cs:line 247
at AutomationTool.CommandUtils.CookCommandlet(FileReference ProjectFile, String UnrealExe, String Maps, String Dirs, String InternationalizationPreset, String CulturesToCook, String TargetPlatform, String Parameters) in C:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\AutomationUtils\CommandletUtils.cs:line 93
at AutomationScripts.Project.Cook(ProjectParams Params) in C:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Scripts\CookCommand.Automation.cs:line 323Wrapped by AutomationException: Cook failed.
at AutomationScripts.Project.Cook(ProjectParams Params) in C:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Scripts\CookCommand.Automation.cs:line 333
at BuildCookRun.DoBuildCookRun(ProjectParams Params) in C:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Scripts\BuildCookRun.Automation.cs:line 259
at BuildCookRun.ExecuteBuild() in C:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Scripts\BuildCookRun.Automation.cs:line 43
at AutomationTool.BuildCommand.Execute() in C:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\AutomationUtils\BuildCommand.cs:line 418
at AutomationTool.BuildCommand.ExecuteAsync() in C:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\AutomationUtils\BuildCommand.cs:line 427
at AutomationTool.Automation.ExecuteAsync(List1 CommandsToExecute, Dictionary2 Commands) in C:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\AutomationUtils\Automation.cs:line 284
at AutomationTool.Automation.ExecuteAsync(List1 CommandsToExecute, Dictionary2 Commands) in C:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\AutomationUtils\Automation.cs:line 308
at AutomationTool.Automation.ProcessAsync(ParsedCommandLine AutomationToolCommandLine, StartupTraceListener StartupListener, HashSet`1 ScriptModuleAssemblies) in C:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\AutomationUtils\Automation.cs:line 168

After further debugging, this problem is not related to github actions runners. This happens on every clone of e.g. a fresh third person template project. Command works on created project. Push to github, clone into fresh directory, lfs install and fetch and the command fails.

arghs. I have to remove -nocompile -nocompileeditor -installed -unrealexe="C:\Program Files\Epic Games\UE_5.7\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" from the command, so it additionally builds the editor target for windows, because who knows cooking needs a built editor target to work…