2021-03-09 21:05:18 -04:00
<?xml version='1.0' ?>
<BuildGraph xmlns= "http://www.epicgames.com/BuildGraph" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://www.epicgames.com/BuildGraph ../Schema.xsd" >
<EnvVar Name= "UE_HORDE_JOBID" />
2024-05-24 01:53:30 -04:00
<EnvVar Name= "UE_HORDE_STEPID" />
<EnvVar Name= "UE_HORDE_TEMPLATEID" />
<EnvVar Name= "UE_HORDE_LAST_WARNING_CL" />
2021-03-09 21:05:18 -04:00
2023-06-06 17:40:06 -04:00
<EnvVar Name= "UE-CloudPublishHost" />
2024-02-29 12:25:13 -05:00
<EnvVar Name= "UE-CloudPublishHttpVersion" />
<EnvVar Name= "UE-CloudPublishDescriptorHost" />
<EnvVar Name= "UE-CloudPublishDescriptorHttpVersion" />
2023-06-06 17:40:06 -04:00
<EnvVar Name= "UE-CloudPublishNamespace" />
2024-03-30 00:48:43 -04:00
<EnvVar Name= "UE-ZenPublishHost" />
2023-11-07 15:29:09 -05:00
2024-05-31 09:12:38 -04:00
<Property Name= "IsHordeEnv" Value= "false" />
<Property Name= "IsHordeEnv" Value= "true" If= "'$(UE_HORDE_JOBID)' != ''" />
<Option Name= "Horde" DefaultValue= "$(IsBuildMachine) And $(IsHordeEnv)" Description= "Whether the build is running under Horde" />
2023-06-06 17:40:06 -04:00
2021-03-09 21:05:18 -04:00
<!-- Project Options -->
2024-02-20 14:02:32 -05:00
<Option Name= "ProjectFile" DefaultValue= "" Restrict= ".*" Description= "Path to the project file. Can be used instead of specifying ProjectName and ProjectPath separately." />
<Property Name= "DefaultProjectName" Value= "None" />
<Property Name= "DefaultProjectPath" Value= "None" />
<Regex Input= "$(ProjectFile)" Pattern= "(.*)[/\\]([^/\\]+)\.uproject" Capture= "DefaultProjectPath;DefaultProjectName" If= "'$(ProjectFile)' != ''" />
<Option Name= "ProjectName" DefaultValue= "$(DefaultProjectName)" Restrict= ".+" Description= "Name of Project" />
<Option Name= "ProjectPath" DefaultValue= "$(DefaultProjectPath)" Restrict= ".+" Description= "Path to the folder that contains your project" />
2021-03-11 23:26:40 -04:00
2021-12-10 17:46:49 -05:00
<Option Name= "IsContentOnlyProject" DefaultValue= "false" Restrict= "true|false" Description= "Is the project a content only project?" />
2021-03-09 21:05:18 -04:00
<Option Name= "TargetName" DefaultValue= "" Restrict= "" Description= "If your project supports both Game and Client you can set this, otherwise one will be selected" />
2021-07-21 21:54:44 -04:00
<Option Name= "EditorTargetName" DefaultValue= "" Restrict= "" Description= "Specify the editor target name if different than (ProjectName)Editor" />
2022-07-11 09:50:47 -04:00
<Option Name= "CookedEditorTargetName" DefaultValue= "" Restrict= "" Description= "Specify the cooked editor target name if different than (ProjectName)CookedEditor" />
2021-07-21 21:54:44 -04:00
2023-01-13 13:36:19 -05:00
<Option Name= "PreNodeName" DefaultValue= "$(ProjectName)" Description= "String to prepend to node name" />
<Option Name= "PreLabelName" DefaultValue= "" Description= "String to prepend to label name" />
<Property Name= "PreNodeName" Value= "$(PreNodeName) " If= "'$(PreNodeName)' != ''" />
<Property Name= "PreLabelName" Value= "$(PreLabelName) " If= "'$(PreLabelName)' != ''" />
2021-08-18 13:58:57 -04:00
<Option Name= "GenericCompileArguments" DefaultValue= "" Restrict= "" Description= "Configurable compile args applied to all compile targets." />
2021-03-12 00:44:40 -04:00
<Option Name= "ExtraToolCompileArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when building the tools" />
2021-03-11 23:26:40 -04:00
<Option Name= "ExtraEditorCompileArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when building the editor" />
<Option Name= "ExtraTargetCompileArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when building targets" />
<Option Name= "MapIniSection" DefaultValue= "" Restrict= "" Description= "MapIniSection argument to pass when cooking" />
<Option Name= "ExtraCookArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when cooking" />
<Option Name= "ExtraStageAndPackageArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when staging and packaging" />
2022-08-23 17:02:18 -04:00
<Option Name= "ExtraPackageOnlyArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when staging only" />
2021-12-03 13:38:15 -05:00
<Option Name= "TargetPlatformFilteredExtraStageAndPackageArguments" DefaultValue= "" Restrict= "" Description= "Extra arguments to use when staging and packaging. Filtered to specific platforms via TargetPlatformFilteredExtraStageAndPackageArgumentsFilter." />
<Option Name= "TargetPlatformFilteredExtraStageAndPackageArgumentsFilter" DefaultValue= "" Restrict= "" Description= "Platform filter applied to TargetPlatformFilteredExtraStageAndPackageArguments." />
2021-11-18 14:37:34 -05:00
<Option Name= "WithRemoteExecWorkers" DefaultValue= "false" Restrict= "" Description= "If your project uses standalone remote execution workers" />
2023-11-02 02:02:53 -04:00
<Option Name= "WithInterchangeWorker" DefaultValue= "false" Restrict= "" Description= "To compile Interchange Worker in Compile Tools node" />
2021-03-11 23:26:40 -04:00
<Option Name= "UseIncrementalAgents" DefaultValue= "false" Restrict= "true|false" Description= "Use incremental agents for building" />
2021-04-12 09:36:42 -04:00
<Option Name= "AgentOverride" DefaultValue= "" Description= "If set, other logic is ignored and this agent type is used for all non-test work." />
<Option Name= "TestAgentOverride" DefaultValue= "" Description= "If set, other logic is ignored and this agent type is used for all test work." />
2022-10-07 19:45:18 -04:00
<Option Name= "TargetPlatformTestAgentOverride" DefaultValue= "DevkitAutomation" Description= "Override agent type use to run target platform tests" />
2021-12-03 02:42:56 -05:00
<Option Name= "ClientCompileAgentOverride" DefaultValue= "" Description= "Specifies the agent type to use for C++ compilation jobs for target platform binaries." />
2023-04-19 16:55:45 -04:00
<Option Name= "UnrealInsightsBuildConfiguration" DefaultValue= "Shipping" Restrict= "Development|Debug|Shipping" Description= "In which configuration to build Unreal Insights, if included. Shipping, Debug, or Development." />
2022-09-22 15:00:30 -04:00
<Option Name= "IncludeUnrealInsightsInToolCompile" DefaultValue= "false" Description= "Include Unreal Insights into Compile Tools prerequisites" />
2023-01-31 18:02:13 -05:00
<Option Name= "IncludeEpicWebHelperInToolCompile" DefaultValue= "false" Description= "Include EpicWebHelper into Compile Tools prerequisites" />
2023-11-07 15:29:09 -05:00
<Option Name= "WithDeviceReservation" DefaultValue= "$(Horde)" Description= "Whether to re-use devices and installed builds for a sequence of tests, where supported" />
2021-03-28 22:51:06 -04:00
2021-03-09 21:05:18 -04:00
<!--
2022-07-11 09:50:47 -04:00
Allow project graphs that Include this file to specify their own defaults.
2021-03-09 21:05:18 -04:00
-->
2022-07-11 09:50:47 -04:00
<Option Name= "DefaultEditorPlatforms" DefaultValue= "" Description= "Default Editor platforms" />
<Option Name= "DefaultCookedEditorPlatforms" DefaultValue= "" Description= "Default Cooked Editor platforms" />
<Option Name= "DefaultTargetPlatforms" DefaultValue= "" Description= "Default Target platforms" />
<Option Name= "DefaultTargetConfigurations" DefaultValue= "Development" Description= "Default Target configurations" />
<Option Name= "DefaultCookedEditorConfigurations" DefaultValue= "Development" Description= "Default Cooked Editor configurations" />
<Option Name= "DefaultEditorTestList" DefaultValue= "" Description= "Default Editor test list" />
<Option Name= "DefaultTargetTestList" DefaultValue= "" Description= "Default Target test list" />
<Option Name= "DefaultCookedEditorTestList" DefaultValue= "" Description= "Default Cooked Editor test list" />
<Option Name= "NetworkTempRootOverride" DefaultValue= "" Description= "Network temp root override" />
<Option Name= "NetworkPublishRootOverride" DefaultValue= "" Description= "Network publish root override" />
<Option Name= "NetworkReportRootOverride" DefaultValue= "" Description= "Network report root override" />
<Option Name= "SymbolServerPath" DefaultValue= "" Description= "Symbol server path" />
2021-03-09 21:05:18 -04:00
2023-06-06 17:40:06 -04:00
<Option Name= "PublishCloudSnapshot" DefaultValue= "false" Restrict= "true|false" Description= "Publish build to cloud host" />
2024-05-24 01:53:30 -04:00
<Option Name= "PublishZenSnapshot" DefaultValue= "false" Restrict= "true|false" Description= "Publish build to zen host" />
2023-06-06 17:40:06 -04:00
2021-07-28 16:20:59 -04:00
<Option Name= "EnableSymbolStore" DefaultValue= "$(IsBuildMachine)" Restrict= "true|false" Description= "Enables the upload of debugging symbols" />
2024-06-05 15:46:11 -04:00
<Property Name= "SymbolServerPath" Value= "" If= "$(EnableSymbolStore) == 'false'" />
2024-06-06 16:41:22 -04:00
<Option Name= "CheckBuildSizePlatforms" DefaultValue= "" Description= "List of Platforms to CheckBuildSize on, format is Name:000000 separated by ;" />
2021-07-28 16:20:59 -04:00
2023-10-30 10:07:27 -04:00
<!-- This will define options for all platforms and create lists called EditorPlatforms, RequiredEditorPlatforms, and TargetPlatforms. E.g. TargetPlatforms=Win64+Mac+Android -->
2021-03-09 21:05:18 -04:00
<Include Script= "Inc/PlatformOptions.xml" />
2021-05-13 20:20:15 -04:00
<!-- For compatibility with build graphs relying on PlatformsToSkipTests option from PlatformOptions that was replaced with Editor/Target specific options -->
<Do If= "'$(PlatformsToSkipTests)' != ''" >
<Property Name= "EditorPlatformsToSkipTests" Value= "$(PlatformsToSkipTests)" />
<Property Name= "TargetPlatformsToSkipTests" Value= "$(PlatformsToSkipTests)" />
2022-07-11 09:50:47 -04:00
<Property Name= "CookedEditorPlatformsToSkipTests" Value= "$(PlatformsToSkipTests)" />
2021-05-13 20:20:15 -04:00
<Property Name= "EditorPlatformsToSkipBootTests" Value= "$(PlatformsToSkipTests)" />
<Property Name= "TargetPlatformsToSkipBootTests" Value= "$(PlatformsToSkipTests)" />
2022-07-11 09:50:47 -04:00
<Property Name= "CookedEditorPlatformsToSkipBootTests" Value= "$(PlatformsToSkipTests)" />
2021-05-13 20:20:15 -04:00
</Do>
2021-03-09 21:05:18 -04:00
<!-- Does this project require a dedicated server for testing? (not currently implemented!) -->
<Option Name= "DedicatedServer" DefaultValue= "false" Description= "Project uses a dedicated server" />
<!-- Customizations -->
2021-04-28 12:44:15 -04:00
<Option Name= "Versioned" Restrict= "true|false" DefaultValue= "false" Description= "Whether to embed changelist number into binaries" />
2021-03-09 21:05:18 -04:00
<Option Name= "SkipBuild" DefaultValue= "false" Description= "Whether to skip building" />
<Option Name= "SkipCook" DefaultValue= "false" Description= "Whether to skip cooking and packaging" />
<Option Name= "SkipPackage" DefaultValue= "false" Description= "Whether to skip packaging" />
<Option Name= "SkipPublish" DefaultValue= "false" Description= "Whether to skip cooking, packaging, publishing" />
<Option Name= "SkipTest" DefaultValue= "false" Description= "Whether to skip testing" />
<!-- Defines whether we always run a simple 'does it boot' test before running other tests. This can save a lot of time/repeated errors -->
<Option Name= "EditorBootTest" DefaultValue= "!$(SkipTest)" Description= "Run a simple boot test on the editor before other tests" />
<Option Name= "TargetBootTest" DefaultValue= "!$(SkipTest)" Description= "Run a simple boot test on target platforms before other tests" />
2022-07-11 09:50:47 -04:00
<Option Name= "CookedEditorBootTest" DefaultValue= "!$(SkipTest)" Description= "Run a simple boot test on cooked editor platforms before other tests" />
2021-03-09 21:05:18 -04:00
2021-11-03 10:26:04 -04:00
<Option Name= "FillEditorDDC" DefaultValue= "false" Description= "Whether to fill the editor DDC before running any editor tests" />
2021-05-13 20:20:15 -04:00
<Option Name= "EditorTestList" DefaultValue= "$(DefaultEditorTestList)" Description= "Tests to run on the editor. Test1+Test2 etc" />
2021-03-09 21:05:18 -04:00
<Option Name= "TargetTestList" DefaultValue= "$(DefaultTargetTestList)" Description= "Tests to run on the target platform(s). Test1+Test2 etc" />
2022-07-11 09:50:47 -04:00
<Option Name= "CookedEditorTestList" DefaultValue= "$(DefaultCookedEditorTestList)" Description= "Tests to run on the cooked editor. Test1+Test2 etc" />
2021-05-13 20:20:15 -04:00
<Option Name= "EditorPlatformsToSkipBootTests" DefaultValue= "$(EditorPlatformsToSkipTests)" Description= "Editor platforms that should skip boot tests." />
<Option Name= "TargetPlatformsToSkipBootTests" DefaultValue= "$(TargetPlatformsToSkipTests)" Description= "Target platforms that should skip boot tests." />
2022-07-11 09:50:47 -04:00
<Option Name= "CookedEditorPlatformsToSkipBootTests" DefaultValue= "$(CookedEditorPlatformsToSkipTests)" Description= "Cooked editor platforms that should skip boot tests." />
2021-03-09 21:05:18 -04:00
2024-08-09 10:34:26 -04:00
<!-- Macro that allows adding additional per - platform, per - configuration test nodes -->
<!-- Expand the macro inside the AdditionalTestNodesExtendFile -->
<Option Name= "AdditionalTestNodesExtendFile" DefaultValue= "" Description= "For extend the AdditionalTestNodes Macro" />
<Macro Name= "AdditionalTestNodes" />
<Do If= "'$(AdditionalTestNodesExtendFile)' != ''" >
<Error Message= "$(AdditionalTestNodesExtendFile) does not seem to exist" If= "!Exists('$(AdditionalTestNodesExtendFile)')" />
<Include Script= "$(AdditionalTestNodesExtendFile)" />
</Do>
2024-01-15 08:03:54 -05:00
<Option Name= "TestsRequireEditor" DefaultValue= "false" Description= "Whether to force tests to require editor compilation" />
2024-03-19 10:57:56 -04:00
<!-- Macros that allows custom pre - steps -->
<Macro Name= "PreCookStep" />
2024-08-15 04:45:56 -04:00
<!-- Macros that allow custom post tests steps -->
<Option Name= "PostEditorTestsExtendFile" DefaultValue= "" Description= "Path to the file containing all post editor tests macro extends" />
<Macro Name= "PostEditorTestsStep" />
<Do If= "'$(PostEditorTestsExtendFile)' != ''" >
<Error Message= "Post Editor Tests Extend File $(PostEditorTestsExtendFile) does not exist" If= "!Exists('$(PostEditorTestsExtendFile)')" />
<Include Script= "$(PostEditorTestsExtendFile)" />
</Do>
2024-03-19 10:57:56 -04:00
2021-03-09 21:05:18 -04:00
<!-- Settings files that can be overriden -->
<Option Name= "PathSettingsFile" DefaultValue= "Inc/PathSettings.xml" Description= "Path settings to use" />
<Option Name= "GauntletSettingsFile" DefaultValue= "Inc/GauntletSettings.xml" Description= "Gauntlet settings to use" />
2024-03-19 10:57:56 -04:00
<Option Name= "PreStepsExtendFile" DefaultValue= "" Description= "Path to the file containing all pre-step macro extends" />
2021-08-18 13:58:57 -04:00
2023-03-13 09:32:52 -04:00
<!-- Annotations notif settings -->
<Option Name= "AnnotationsTarget" DefaultValue= "" Description= "Set annotations target" />
<Option Name= "AnnotationsPlatforms" DefaultValue= "" Description= "List of platforms that require annotations" />
<Option Name= "AnnotationsTests" DefaultValue= "" Description= "List of tests that require annotations" />
2024-01-19 10:19:49 -05:00
<!-- Default common properties -->
2021-03-09 21:05:18 -04:00
<Include Script= "Inc/CommonProperties.xml" />
<!-- Common settings but can be overidden -->
<Include Script= "$(PathSettingsFile)" />
<Include Script= "$(GauntletSettingsFile)" />
2024-03-19 10:57:56 -04:00
<Do If= "'$(PreStepsExtendFile)' != ''" >
<Error Message= "Pre Steps Extend file $(PreStepsExtendFile) does not exist" If= "!Exists('$(PreStepsExtendFile)')" />
<Include Script= "$(PreStepsExtendFile)" />
</Do>
2021-03-09 21:05:18 -04:00
<!-- At this point we have all options so calculate a few things -->
<!-- Validate that the project exists -->
2021-03-11 23:26:40 -04:00
<Error Message= "ProjectName and ProjectPath must be specified" If= "'$(ProjectName)' == 'None' or '$(ProjectPath)' == 'None'" />
2021-03-09 21:05:18 -04:00
<Property Name= "TargetProject" Value= "$(ProjectPath)/$(ProjectName).uproject" />
<Error Message= "Project file $(TargetProject) does not exist" If= "!Exists('$(TargetProject)')" />
2021-12-10 17:46:49 -05:00
<!-- If the user didn't supply a TargetName then use the ProjectName -->
<Property Name= "TargetName" Value= "$(ProjectName)" If= "'$(TargetName)' == ''" />
2021-07-21 21:54:44 -04:00
<Property Name= "EditorTargetName" Value= "$(ProjectName)Editor" If= "'$(EditorTargetName)' == ''" />
2022-07-11 09:50:47 -04:00
<Property Name= "CookedEditorTargetName" Value= "$(ProjectName)CookedEditor" If= "'$(CookedEditorTargetName)' == ''" />
2021-03-09 21:05:18 -04:00
<!-- If skip test is true, add all target platforms to the "do not test" list -->
<Do If= "$(SkipTest)" >
2021-05-13 20:20:15 -04:00
<Property Name= "EditorPlatformsToSkipTests" Value= "$(EditorPlatforms)" />
<Property Name= "TargetPlatformsToSkipTests" Value= "$(TargetPlatforms)" />
2022-07-11 09:50:47 -04:00
<Property Name= "CookedEditorPlatformsToSkipTests" Value= "$(CookedEditorPlatforms)" />
2021-05-13 20:20:15 -04:00
<Property Name= "EditorPlatformsToSkipBootTests" Value= "$(EditorPlatformsToSkipTests)" />
<Property Name= "TargetPlatformsToSkipBootTests" Value= "$(TargetPlatformsToSkipTests)" />
2022-07-11 09:50:47 -04:00
<Property Name= "CookedEditorPlatformsToSkipBootTests" Value= "$(CookedEditorPlatformsToSkipTests)" />
2021-03-09 21:05:18 -04:00
</Do>
<!-- If skip packaging is true, add all target platforms to the "do not test" list -->
<Do If= "$(SkipPackage)" >
<Property Name= "PlatformsToSkipPackaging" Value= "$(EditorPlatforms)+$(TargetPlatforms)" />
</Do>
2021-03-12 00:44:40 -04:00
<Do If= "$(UseIncrementalAgents)" >
2023-10-19 14:50:18 -04:00
<Property Name= "ExtraToolCompileArguments" Value= "$(ExtraToolCompileArguments) -allmodules -nodebuginfo -Strict -WarningsAsErrors" />
<Property Name= "ExtraEditorCompileArguments" Value= "$(ExtraEditorCompileArguments) -allmodules -nodebuginfo -Strict -WarningsAsErrors" />
2023-09-28 14:13:41 -04:00
<Property Name= "ExtraTargetCompileArguments" Value= "$(ExtraTargetCompileArguments) -nodebuginfo -WarningsAsErrors" />
2021-03-12 00:44:40 -04:00
</Do>
2024-08-13 18:22:25 -04:00
<!-- On Epic build machines, we want to:
1. Write dependency information into the cooked output so that it is suitable for use as a base upon which to cook incrementally.
2. Cook incrementally if the initial state at the start of the job is not empty/blank.
-->
<Do If= "$(IsEpicBuildMachine)" >
<Property Name= "ExtraCookArguments" Value= "$(ExtraCookArguments) -cookincremental" />
</Do>
2021-03-09 21:05:18 -04:00
<!-- Detect the type of the client based on the target name -->
<Property Name= "TargetType" Value= "Game" />
<Property Name= "TargetType" Value= "Client" If= "Contains('$(TargetName)', 'Client')" />
2023-03-13 11:35:43 -04:00
<!-- Sanitize node title for test name that include ':' ie: 'Runtest=Group:Animation' => 'Runtest=Group_Animation' -->
<Macro Name= "SanitizeTestNameTitle" >
<!-- Expect a Property named "TestNameTitle" to be defined beforehand -->
<Do If= "Contains('$(TestNameTitle)', ':')" >
<Property Name= "Left" Value= "" />
<Property Name= "Right" Value= "" />
<Regex Pattern= "(.*):(.*)" Capture= "Left;Right" Input= "$(TestNameTitle)" />
<Property Name= "TestNameTitle" Value= "$(Left)_$(Right)" />
</Do>
</Macro>
2021-03-09 21:05:18 -04:00
<!-- These properties will be filled in with nodes that are generated based on options -->
<Property Name= "GeneratedToolNodes" Value= "" />
<Property Name= "GeneratedEditorTestNodes" Value= "" />
<Property Name= "GeneratedTargetNodes" Value= "" />
<Property Name= "GeneratedTargetTestNodes" Value= "" />
2022-07-11 09:50:47 -04:00
<Property Name= "GeneratedCookedEditorNodes" Value= "" />
<Property Name= "GeneratedCookedEditorTestNodes" Value= "" />
2021-03-09 21:05:18 -04:00
<!-- Do all editor steps under a single agent as the things that can be done in parallel probably aren't worth the overhead -->
<ForEach Name= "EditorPlatform" Values= "$(RequiredEditorPlatforms)" Separator= "+" >
<!-- Set Agent Types -->
<Property Name= "HostAgentType" Value= "$(EditorPlatform)" />
2021-03-11 23:26:40 -04:00
<!-- Use incremental agents for building? -->
<Property Name= "HostAgentType" Value= "Incremental$(HostAgentType)" If= "$(UseIncrementalAgents)" />
2021-03-09 21:05:18 -04:00
<Property Name= "TestAgentType" Value= "Test$(EditorPlatform)" />
2021-04-12 09:36:42 -04:00
<!-- Use overrides for agent types? -->
<Property Name= "HostAgentType" Value= "$(AgentOverride)" If= "'$(AgentOverride)' != ''" />
<Property Name= "TestAgentType" Value= "$(TestAgentOverride)" If= "'$(TestAgentOverride)' != ''" />
2021-03-09 21:05:18 -04:00
<!-- Test nodes for this editor platform -->
<Property Name= "PlatformEditorTestNodes" Value= "" />
<Agent Name= "Build $(ProjectName)Editor $(EditorPlatform)" Type= "$(HostAgentType)" >
2021-04-28 12:44:15 -04:00
<!-- Update the Version.h and Build.version files if we're making a formal build on a build machine -->
2023-01-13 13:36:19 -05:00
<Node Name= "$(PreNodeName)Update Version Files $(EditorPlatform)" >
2021-04-28 12:44:15 -04:00
<SetVersion Change= "$(Change)" Branch= "$(EscapedBranch)" If= "$(Versioned) and $(IsBuildMachine)" />
</Node>
2021-03-09 21:05:18 -04:00
<!-- First generate nodes to build the required tools (e.g. UHT, ShaderCompiler, Editor -->
2023-01-13 13:36:19 -05:00
<Node Name= "$(PreNodeName)Compile Tools $(EditorPlatform)" Requires= "$(PreNodeName)Update Version Files $(EditorPlatform)" >
2021-08-18 13:58:57 -04:00
<Compile Target= "ShaderCompileWorker" Platform= "$(EditorPlatform)" Configuration= "Development" Arguments= "$(GenericCompileArguments)" />
2023-08-23 23:30:15 -04:00
<Compile Target= "ZenLaunch" Platform= "$(EditorPlatform)" Configuration= "Development" Arguments= "$(GenericCompileArguments)" />
2021-08-18 13:58:57 -04:00
<Compile Target= "UnrealPak" Platform= "$(EditorPlatform)" Configuration= "Development" Arguments= "$(GenericCompileArguments)" />
<Compile Target= "CrashReportClient" Platform= "$(EditorPlatform)" Configuration= "Shipping" Arguments= "$(GenericCompileArguments)" />
<Compile Target= "CrashReportClientEditor" Platform= "$(EditorPlatform)" Configuration= "Shipping" Arguments= "$(GenericCompileArguments)" />
2021-11-18 14:37:34 -05:00
<Do If= "$(WithRemoteExecWorkers)" >
<Compile Target= "BaseTextureBuildWorker" Platform= "$(EditorPlatform)" Configuration= "Development" Arguments= "-project="$(RootDir)/$(TargetProject)" $(GenericCompileArguments)" />
<Do If= "'$(EditorPlatform)' == 'Win64'" >
2023-10-30 10:07:27 -04:00
<ForEach Name= "TargetPlatform" Values= "$(AllConsolePlatforms)" Separator= "+" >
2021-11-18 14:37:34 -05:00
<Compile Target= "$(TargetPlatform)TextureBuildWorker" Platform= "$(EditorPlatform)" Configuration= "Development" Arguments= "-project="$(RootDir)/$(TargetProject)" $(GenericCompileArguments)" If= "ContainsItem('$(TargetPlatforms)', '$(TargetPlatform)', '+')" />
</ForEach>
</Do>
</Do>
2023-11-02 02:02:53 -04:00
<Do If= "$(WithInterchangeWorker)" >
<Compile Target= "InterchangeWorker" Platform= "$(EditorPlatform)" Configuration= "Development" Arguments= "$(GenericCompileArguments)" />
</Do>
2023-04-19 16:55:45 -04:00
<Compile Target= "UnrealInsights" Platform= "$(EditorPlatform)" Configuration= "$(UnrealInsightsBuildConfiguration)" Arguments= "$(GenericCompileArguments)" If= "$(IncludeUnrealInsightsInToolCompile)" />
2023-01-31 18:02:13 -05:00
<Compile Target= "EpicWebHelper" Platform= "$(EditorPlatform)" Configuration= "Shipping" Arguments= "$(GenericCompileArguments)" If= "$(IncludeEpicWebHelperInToolCompile)" />
2021-03-09 21:05:18 -04:00
</Node>
2023-05-30 15:34:34 -04:00
<Property Name= "CompileEditor" Value= "$(PreNodeName)Compile Editor $(EditorPlatform)" />
<Node Name= "$(CompileEditor)" Requires= "$(PreNodeName)Compile Tools $(EditorPlatform)" >
<Switch >
<Case If= "$(IsContentOnlyProject)" >
<Command Name= "BuildCookRun" Arguments= "-project="$(RootDir)/$(TargetProject)" -platform=$(EditorPlatform) -configuration=Development -build -notools -ubtargs="$(GenericCompileArguments) $(ExtraEditorCompileArguments)"" />
<Tag Files= "$(RootDir)/$(ProjectPath)/Binaries/..." Filter= "$(EditorTargetName).target" With= "#$(CompileEditor)" />
<TagReceipt Files= "#$(CompileEditor)" BuildProducts= "true" With= "#$(CompileEditor)" />
</Case>
<Default >
<Compile Target= "$(EditorTargetName)" Platform= "$(EditorPlatform)" Configuration= "Development" Arguments= "$(GenericCompileArguments) $(ExtraEditorCompileArguments)" />
</Default>
</Switch>
2021-03-09 21:05:18 -04:00
</Node>
2022-07-11 09:50:47 -04:00
<!-- Cooked editor target -->
2023-01-13 13:36:19 -05:00
<Node Name= "$(PreNodeName)Compile CookedEditor $(EditorPlatform)" Requires= "$(PreNodeName)Compile Tools $(EditorPlatform)" >
2022-07-11 09:50:47 -04:00
<ForEach Name= "Config" Values= "$(CookedEditorConfigurations)" Separator= "+" >
<Compile Target= "$(CookedEditorTargetName)" Platform= "$(EditorPlatform)" Configuration= "$(Config)" Arguments= "$(GenericCompileArguments) $(ExtraEditorCompileArguments)" />
</ForEach>
</Node>
2021-03-09 21:05:18 -04:00
<!-- Add these nodes to our dependency list -->
2023-05-30 15:34:34 -04:00
<Property Name= "GeneratedToolNodes" Value= "$(CompileEditor);$(PreNodeName)Compile Tools $(EditorPlatform)" If= "!$(SkipBuild)" />
2022-07-11 09:50:47 -04:00
<!-- Editor Labels -->
2023-01-13 13:36:19 -05:00
<Label Category= "Editors" Name= "$(PreLabelName)Editor $(EditorPlatform)" Requires= "$(GeneratedToolNodes)" />
2021-03-09 21:05:18 -04:00
</Agent>
<Agent Name= "Test $(ProjectName)Editor $(EditorPlatform)" Type= "$(TestAgentType)" >
<!-- Prerequisites for the editor test to run -->
<Property Name= "TestPrerequisites" Value= "$(GeneratedToolNodes)" />
<!-- Declare a boot test for the editor -->
2023-01-13 13:36:19 -05:00
<Property Name= "PlatformBootTestNodeName" Value= "$(PreNodeName)Editor $(EditorPlatform) Test=BootTest" />
2021-03-09 21:05:18 -04:00
<Do If= "'$(AutomationReportOutputDirectory)' != ''" >
<Property Name= "OutputFragmentPath" Value= "$(EditorPlatform)Editor/UE.EditorBootTest" />
<Property Name= "OutputReportPath" Value= "$(AutomationReportOutputDirectory)/$(OutputFragmentPath)" />
<Property Name= "GauntletReportArgs" Value= "-logdir="$(OutputReportPath)" -artifactname=Gauntlet -ReportExportPath="$(OutputReportPath)"" />
<Property Name= "GauntletReportArgs" Value= "$(GauntletReportArgs) -ReportURL="$(AutomationReportUrl)/$(OutputFragmentPath)/"" If= "'$(AutomationReportUrl)' != ''" />
</Do>
2023-03-13 09:32:52 -04:00
<!-- Annotations -->
<Property Name= "NodeAnnotations" Value= "" />
<Property Name= "NodeAnnotations" Value= "Workflow=$(AnnotationsTarget)" If= "ContainsItem('$(AnnotationsPlatforms)', '$(EditorPlatform)Editor', ';') and ContainsItem('$(AnnotationsTests)', 'BootTest', ';')" />
2023-05-30 15:34:34 -04:00
<Node Name= "$(PlatformBootTestNodeName)" Requires= "$(TestPrerequisites)" Annotations= "$(NodeAnnotations)" >
2021-03-09 21:05:18 -04:00
<Command Name= "RunUnreal" Arguments= "-project=$(TargetProject) -build=Editor -test="UE.EditorBootTest" $(GauntletEditorTestArgs) $(GauntletReportArgs)" />
</Node>
2023-01-13 13:36:19 -05:00
<Property Name= "ProjectEditorDDC" Value= "$(PreNodeName)Editor DDC $(EditorPlatform)" />
2021-11-03 10:26:04 -04:00
<Node Name= "$(ProjectEditorDDC)" Requires= "$(GeneratedToolNodes)" >
<Property Name= "DDCTargetPlatform" Value= "$(EditorPlatform)" />
<Property Name= "DDCTargetPlatform" Value= "Windows" If= "'$(DDCTargetPlatform)' == 'Win64'" />
<Commandlet Name= "DerivedDataCache" Project= "$(RootDir)/$(TargetProject)" Arguments= "-fill -targetplatform=$(DDCTargetPlatform)Editor" />
</Node>
2021-03-09 21:05:18 -04:00
<!-- Link the boot test in to the prerequisites and generated nodes if its enabled -->
<Do If= "$(EditorBootTest)" >
<Property Name= "TestPrerequisites" Value= "$(TestPrerequisites);$(PlatformBootTestNodeName)" />
</Do>
<!-- Now generate a test node for each editor test in the list -->
<ForEach Name= "TestName" Values= "$(EditorTestList)" Separator= "+" >
2023-03-13 11:35:43 -04:00
<Property Name= "TestNameTitle" Value= "$(TestName)" />
<Expand Name= "SanitizeTestNameTitle" />
2021-05-13 20:20:15 -04:00
<Do If= "'$(AutomationReportOutputDirectory)' != ''" >
2023-03-13 11:35:43 -04:00
<Property Name= "OutputFragmentPath" Value= "$(EditorPlatform)/Editor$(TestNameTitle)" />
2021-05-13 20:20:15 -04:00
<Property Name= "OutputReportPath" Value= "$(AutomationReportOutputDirectory)/$(OutputFragmentPath)" />
<Property Name= "GauntletReportArgs" Value= "-logdir="$(OutputReportPath)" -artifactname=Gauntlet -ReportExportPath="$(OutputReportPath)"" />
<Property Name= "GauntletReportArgs" Value= "$(GauntletReportArgs) -ReportURL="$(AutomationReportUrl)/$(OutputFragmentPath)/"" If= "'$(AutomationReportUrl)' != ''" />
</Do>
2023-03-13 11:35:43 -04:00
<Property Name= "TestNodeName" Value= "$(PreNodeName)Editor $(EditorPlatform) Test=$(TestNameTitle)" />
2023-03-13 09:32:52 -04:00
<Property Name= "NodeAnnotations" Value= "" />
<Property Name= "NodeAnnotations" Value= "Workflow=$(AnnotationsTarget)" If= "ContainsItem('$(AnnotationsPlatforms)', '$(EditorPlatform)Editor', ';') and ContainsItem('$(AnnotationsTests)', '$(TestName)', ';')" />
<Node Name= "$(TestNodeName)" Requires= "$(TestPrerequisites)" Annotations= "$(NodeAnnotations)" >
2021-03-09 21:05:18 -04:00
<Command Name= "RunUnreal" Arguments= "-project=$(TargetProject) -build=Editor -test="$(TestName)" $(GauntletReportArgs) $(GauntletEditorTestArgs)" />
</Node>
<!-- Add each test node to our generated list -->
2021-07-29 17:57:28 -04:00
<Property Name= "PlatformEditorTestNodes" Value= "$(PlatformEditorTestNodes);$(TestNodeName)" />
2021-03-09 21:05:18 -04:00
</ForEach>
2024-08-15 04:45:56 -04:00
<!-- Expand Post Editor Tests step -->
<Expand Name= "PostEditorTestsStep" />
2021-03-09 21:05:18 -04:00
<!-- Create Labels -->
2023-01-13 13:36:19 -05:00
<Label Category= "Editors" Name= "$(PreLabelName)Editor DDC $(EditorPlatform)" Requires= "$(ProjectEditorDDC)" />
2021-03-09 21:05:18 -04:00
<!-- If this editor was requested (as opposed to being required due to target platforms) then link in the test nodes and set up labels -->
2021-05-13 20:20:15 -04:00
<Do If= "ContainsItem('$(EditorPlatforms)', '$(EditorPlatform)', '+') and !ContainsItem('$(EditorPlatformsToSkipTests)', '$(EditorPlatform)', '+')" >
2023-01-13 13:36:19 -05:00
<Label Category= "Tests" Name= "$(PreLabelName)BootTest Editor $(EditorPlatform)" Requires= "$(PlatformBootTestNodeName)" />
<Label Category= "Tests" Name= "$(PreLabelName)Test Editor $(EditorPlatform)" Requires= "$(PlatformEditorTestNodes)" />
2021-07-29 17:57:28 -04:00
<Property Name= "GeneratedEditorTestNodes" Value= "$(GeneratedEditorTestNodes);$(PlatformBootTestNodeName)" If= "$(EditorBootTest)" />
2021-11-03 10:26:04 -04:00
<Property Name= "GeneratedEditorTestNodes" Value= "$(GeneratedEditorTestNodes);$(ProjectEditorDDC)" If= "$(FillEditorDDC)" />
2021-07-27 13:39:45 -04:00
<Property Name= "GeneratedEditorTestNodes" Value= "$(GeneratedEditorTestNodes);$(PlatformEditorTestNodes)" />
2021-03-09 21:05:18 -04:00
</Do>
</Agent>
</ForEach>
2022-07-11 09:50:47 -04:00
<!-- Cooked editor Targets -->
<ForEach Name= "EditorPlatform" Values= "$(CookedEditorPlatforms)" Separator= "+" >
<Property Name= "HostAgentType" Value= "$(EditorPlatform)" />
<Property Name= "TestAgentType" Value= "Test$(EditorPlatform)" />
<Property Name= "TestAgentType" Value= "$(TestAgentOverride)" If= "'$(TestAgentOverride)' != ''" />
2022-09-07 09:51:36 -04:00
<Property Name= "EditorPlatformPath" Value= "$(EditorPlatform)" />
<Property Name= "EditorPlatformPath" Value= "Windows" If= "'$(EditorPlatform)' == 'Win64'" />
2023-01-13 13:36:19 -05:00
<Property Name= "PlatformPublishNodeName" Value= "$(PreNodeName)Publish CookedEditor $(EditorPlatform)" />
2022-07-11 09:50:47 -04:00
2023-01-13 13:36:19 -05:00
<Property Name= "CookedEditorCookRequirements" Value= "$(PreNodeName)Compile Tools $(EditorPlatform);$(PreNodeName)Compile Editor $(EditorPlatform);$(PreNodeName)Compile CookedEditor $(EditorPlatform)" />
2022-07-11 09:50:47 -04:00
<Property Name= "CookedEditorCookerArgs" Value= "-project=$(TargetProject) -platform=$(EditorPlatform) -compressed $(ExtraCookArguments)" />
<Agent Name= "CookedEditor Cook and Publish $(EditorPlatform)" Type= "$(HostAgentType)" >
<!-- Cook Editor -->
2023-01-13 13:36:19 -05:00
<Node Name= "$(PreNodeName)Cook CookedEditor $(EditorPlatform)" Requires= "$(CookedEditorCookRequirements)" >
2022-07-11 09:50:47 -04:00
<Command Name= "MakeCookedEditor" Arguments= "-cook $(CookedEditorCookerArgs)" />
</Node>
<!-- Stage CookedEditor -->
<Property Name= "CookedEditorStageArgs" Value= "-skipcook -stage -pak -platform=$(EditorPlatform) -clientconfig=$(CookedEditorConfigurations) -StagingDirectory="$(ProjectOutputDirectory)"" />
<Property Name= "CookedEditorStageRequirements" Value= "$(CookedEditorCookRequirements)" />
2023-01-13 14:21:12 -05:00
<Property Name= "CookedEditorStageRequirements" Value= "$(CookedEditorStageRequirements);$(PreNodeName)Cook CookedEditor $(EditorPlatform)" If= "!$(SkipCook)" />
2022-07-11 09:50:47 -04:00
2023-01-13 14:21:12 -05:00
<Node Name= "$(PreNodeName)Stage CookedEditor $(EditorPlatform)" Requires= "$(CookedEditorStageRequirements)" >
2022-07-11 09:50:47 -04:00
<Command Name= "MakeCookedEditor" Arguments= "-project=$(TargetProject) $(CookedEditorStageArgs)" />
</Node>
<!-- Publish CookedEditor -->
2023-01-13 14:21:12 -05:00
<Node Name= "$(PreNodeName)Publish CookedEditor $(EditorPlatform)" Requires= "$(PreNodeName)Stage CookedEditor $(EditorPlatform)" >
2022-09-07 09:51:36 -04:00
<Log Message= "Copying to $(NetworkOutputDirectory)/$(EditorPlatformPath)CookedEditor" />
2022-07-11 09:50:47 -04:00
<Do If= "!$(SkipPublish)" >
2022-09-07 09:51:36 -04:00
<Copy Files= "..." From= "$(ProjectOutputDirectory)/$(EditorPlatformPath)CookedEditor" To= "$(NetworkOutputDirectory)/$(EditorPlatformPath)CookedEditor" />
2022-07-11 09:50:47 -04:00
</Do>
</Node>
<!-- Aggregate Nodes requirements -->
2023-01-13 13:36:19 -05:00
<Property Name= "GeneratedCookedEditorNodes" Value= "$(PreNodeName)Compile CookedEditor $(EditorPlatform)" If= "!$(SkipBuild)" />
<Property Name= "GeneratedCookedEditorNodes" Value= "$(GeneratedCookedEditorNodes);$(PreNodeName)Cook CookedEditor $(EditorPlatform)" If= "!$(SkipCook)" />
2022-07-11 09:50:47 -04:00
<Property Name= "GeneratedCookedEditorNodes" Value= "$(GeneratedCookedEditorNodes);$(PlatformPublishNodeName)" If= "!$(SkipPublish) And $(PublishBuilds)" />
</Agent>
<!-- Tests -->
<Agent Name= "Test $(ProjectName)CookedEditor $(EditorPlatform)" Type= "$(TestAgentType)" >
2022-09-30 19:25:03 -04:00
<Property Name= "CustomModuleRoleArg" Value= "-CustomModuleRoles=$(CookedEditorTargetName):CookedEditor" />
2022-07-11 09:50:47 -04:00
<!-- Prerequisites for the editor test to run -->
<Property Name= "TestPrerequisites" Value= "$(GeneratedCookedEditorNodes)" />
<Property Name= "TestPrerequisites" Value= "$(TestPrerequisites);$(PlatformPublishNodeName)" If= "!$(PublishBuilds)" />
<!-- Declare a boot test for the editor -->
2023-01-13 13:36:19 -05:00
<Property Name= "PlatformBootTestNodeName" Value= "$(PreNodeName)CookedEditor $(EditorPlatform) Test=BootTest" />
2022-07-11 09:50:47 -04:00
<Do If= "'$(AutomationReportOutputDirectory)' != ''" >
<Property Name= "OutputFragmentPath" Value= "$(EditorPlatform)Editor/UE.CookedEditorBootTest" />
<Property Name= "OutputReportPath" Value= "$(AutomationReportOutputDirectory)/$(OutputFragmentPath)" />
<Property Name= "GauntletReportArgs" Value= "-logdir="$(OutputReportPath)" -artifactname=Gauntlet -ReportExportPath="$(OutputReportPath)"" />
<Property Name= "GauntletReportArgs" Value= "$(GauntletReportArgs) -ReportURL="$(AutomationReportUrl)/$(OutputFragmentPath)/"" If= "'$(AutomationReportUrl)' != ''" />
</Do>
2023-03-13 09:32:52 -04:00
<Property Name= "NodeAnnotations" Value= "" />
<Property Name= "NodeAnnotations" Value= "Workflow=$(AnnotationsTarget)" If= "ContainsItem('$(AnnotationsPlatforms)', '$(EditorPlatform)Editor', ';') and ContainsItem('$(AnnotationsTests)', 'BootTest', ';')" />
<Node Name= "$(PlatformBootTestNodeName)" Requires= "$(TestPrerequisites)" Annotations= "$(NodeAnnotations)" >
2022-09-30 19:25:03 -04:00
<Command Name= "RunUnreal" Arguments= "-project=$(TargetProject) -build="$(NetworkOutputDirectory)/$(EditorPlatformPath)CookedEditor" -test="UE.EditorBootTest" $(GauntletCookedEditorTestArgs) $(CustomModuleRoleArg) $(GauntletReportArgs)" />
2022-07-11 09:50:47 -04:00
</Node>
<!-- Link the boot test in to the prerequisites and generated nodes if its enabled -->
<Do If= "$(CookedEditorBootTest)" >
<Property Name= "TestPrerequisites" Value= "$(TestPrerequisites);$(PlatformBootTestNodeName)" />
</Do>
<!-- Now generate a test node for each editor test in the list -->
<Property Name= "PlatformCookedEditorTestNodes" Value= "" />
<ForEach Name= "TestName" Values= "$(CookedEditorTestList)" Separator= "+" >
2023-03-13 11:35:43 -04:00
<Property Name= "TestNameTitle" Value= "$(TestName)" />
<Expand Name= "SanitizeTestNameTitle" />
2022-07-11 09:50:47 -04:00
<Do If= "'$(AutomationReportOutputDirectory)' != ''" >
2023-03-13 11:35:43 -04:00
<Property Name= "OutputFragmentPath" Value= "$(EditorPlatform)/Editor$(TestNameTitle)" />
2022-07-11 09:50:47 -04:00
<Property Name= "OutputReportPath" Value= "$(AutomationReportOutputDirectory)/$(OutputFragmentPath)" />
<Property Name= "GauntletReportArgs" Value= "-logdir="$(OutputReportPath)" -artifactname=Gauntlet -ReportExportPath="$(OutputReportPath)"" />
<Property Name= "GauntletReportArgs" Value= "$(GauntletReportArgs) -ReportURL="$(AutomationReportUrl)/$(OutputFragmentPath)/"" If= "'$(AutomationReportUrl)' != ''" />
</Do>
2023-03-13 11:35:43 -04:00
<Property Name= "TestNodeName" Value= "$(PreNodeName)CookedEditor $(EditorPlatform) Test=$(TestNameTitle)" />
2023-03-13 09:32:52 -04:00
<Property Name= "NodeAnnotations" Value= "" />
<Property Name= "NodeAnnotations" Value= "Workflow=$(AnnotationsTarget)" If= "ContainsItem('$(AnnotationsPlatforms)', '$(EditorPlatform)Editor', ';') and ContainsItem('$(AnnotationsTests)', '$(TestName)', ';')" />
<Node Name= "$(TestNodeName)" Requires= "$(TestPrerequisites)" Annotations= "$(NodeAnnotations)" >
2022-09-30 19:25:03 -04:00
<Command Name= "RunUnreal" Arguments= "-project=$(TargetProject) -build="$(NetworkOutputDirectory)/$(EditorPlatformPath)CookedEditor" -test="$(TestName)" $(GauntletReportArgs) $(CustomModuleRoleArg) $(GauntletCookedEditorTestArgs)" />
2022-07-11 09:50:47 -04:00
</Node>
<!-- Add each test node to our generated list -->
<Property Name= "PlatformCookedEditorTestNodes" Value= "$(PlatformCookedEditorTestNodes);$(TestNodeName)" />
</ForEach>
<!-- Create Labels -->
<!-- If this cooked editor was requested (as opposed to being required due to target platforms) then link in the test nodes and set up labels -->
<Do If= "ContainsItem('$(CookedEditorPlatforms)', '$(EditorPlatform)', '+') and !ContainsItem('$(CookedEditorPlatformsToSkipTests)', '$(EditorPlatform)', '+')" >
2023-01-13 13:36:19 -05:00
<Label Category= "Tests" Name= "$(PreLabelName)BootTest CookedEditor $(EditorPlatform)" Requires= "$(PlatformBootTestNodeName)" />
<Label Category= "Tests" Name= "$(PreLabelName)Test CookedEditor $(EditorPlatform)" Requires= "$(PlatformCookedEditorTestNodes)" />
2022-07-11 09:50:47 -04:00
<Property Name= "GeneratedCookedEditorTestNodes" Value= "$(GeneratedCookedEditorTestNodes);$(PlatformBootTestNodeName)" If= "$(CookedEditorBootTest)" />
<Property Name= "GeneratedCookedEditorTestNodes" Value= "$(GeneratedCookedEditorTestNodes);$(PlatformCookedEditorTestNodes)" />
</Do>
</Agent>
<!-- Add to Editor Labels -->
2023-01-13 13:36:19 -05:00
<Label Category= "Editors" Name= "$(PreLabelName)CookedEditor $(EditorPlatform)" Requires= "$(GeneratedCookedEditorNodes)" />
2022-07-11 09:50:47 -04:00
</ForEach>
2021-07-27 15:36:56 -04:00
<!-- Now, for each platform we build, cook, stage, package, publish, and test -->
2021-03-09 21:05:18 -04:00
<ForEach Name= "TargetPlatform" Values= "$(TargetPlatforms)" Separator= "+" >
2023-11-08 11:55:30 -05:00
<Property Name= "IsDesktopPlatform" Value= "ContainsItem('$(AllDesktopPlatforms)', '$(TargetPlatform)', '+')" />
<Property Name= "IsMobilePlatform" Value= "'$(TargetPlatform)' == 'Android' or '$(TargetPlatform)' == 'IOS'" />
<!-- Local or virtualized platform -->
<Property Name= "IsVirtualizedPlatform" Value= "ContainsItem('$(AllVirtualizedPlatforms)', '$(TargetPlatform)', '+')" />
<Property Name= "IsLocalPlatform" Value= "($(IsDesktopPlatform) Or $(IsVirtualizedPlatform))" />
2021-03-09 21:05:18 -04:00
<!-- Declare type of host required to build & cook this platform -->
<Property Name= "HostAgentType" Value= "Win64" />
2021-03-11 23:26:40 -04:00
<Property Name= "HostAgentType" Value= "Mac" If= "'$(TargetPlatform)' == 'Mac' or '$(TargetPlatform)' == 'IOS' or '$(TargetPlatform)' == 'tvOS'" />
2022-10-11 11:25:30 -04:00
<Property Name= "HostAgentType" Value= "Linux" If= "'$(TargetPlatform)' == 'Linux'" />
2022-10-07 19:45:18 -04:00
<!-- On consoles we can use agents with devkit setup, but locally hosted tests need a Test agent -->
<Property Name= "TestAgentType" Value= "$(TargetPlatformTestAgentOverride)" />
2023-11-08 11:55:30 -05:00
<Property Name= "TestAgentType" Value= "Test$(HostAgentType)" If= "$(IsDesktopPlatform)" />
2022-08-23 17:02:18 -04:00
2021-03-11 23:26:40 -04:00
<!-- Use incremental agents for building? -->
2021-12-03 02:42:56 -05:00
<Property Name= "CompileAgentType" Value= "$(HostAgentType)" />
<Property Name= "CompileAgentType" Value= "Incremental$(HostAgentType)" If= "$(UseIncrementalAgents)" />
2021-03-11 23:26:40 -04:00
2021-04-12 09:36:42 -04:00
<!-- Use agent types from override? -->
2021-12-03 02:42:56 -05:00
<Property Name= "CompileAgentType" Value= "$(AgentOverride)" If= "'$(AgentOverride)' != ''" />
<!-- Use the same agent type for packaging as compilation -->
<Property Name= "PackageAgentType" Value= "$(CompileAgentType)" />
<Property Name= "CompileAgentType" Value= "$(ClientCompileAgentOverride)" If= "'$(ClientCompileAgentOverride)' != ''" />
2021-04-12 09:36:42 -04:00
<Property Name= "TestAgentType" Value= "$(TestAgentOverride)" If= "'$(TestAgentOverride)' != ''" />
2021-03-09 21:05:18 -04:00
<!-- Building and cooking will require these nodes from the appropriate host. They should have been built above... -->
2023-01-13 13:36:19 -05:00
<Property Name= "PlatformToolsNodeName" Value= "$(PreNodeName)Compile Tools $(HostAgentType)" />
<Property Name= "PlatformEditorNodeName" Value= "$(PreNodeName)Compile Editor $(HostAgentType)" />
2021-03-09 21:05:18 -04:00
<!-- Define these names up front as we use some of them several times -->
2023-01-13 13:36:19 -05:00
<Property Name= "PlatformAgentName" Value= "$(ProjectName) $(TargetPlatform)" />
<Property Name= "PlatformCompileNodeName" Value= "$(PreNodeName)Compile $(TargetPlatform)" />
2021-12-03 01:31:49 -05:00
<Property Name= "UploadSymbolsNodeName" Value= "" />
2023-01-13 13:36:19 -05:00
<Property Name= "UploadSymbolsNodeName" Value= "$(PreNodeName)Upload Symbols $(TargetPlatform)" If= "'$(SymbolServerPath)' != ''" />
<Property Name= "PlatformCookNodeName" Value= "$(PreNodeName)Cook $(TargetPlatform)" />
<Property Name= "PlatformStageNodeName" Value= "$(PreNodeName)Stage $(TargetPlatform)" />
<Property Name= "PlatformPackageNodeName" Value= "$(PreNodeName)Package $(TargetPlatform)" />
2024-03-29 12:30:20 -04:00
<Property Name= "PlatformPackageArtifactName" Value= "$(PlatformPackageNodeName)" />
2023-01-13 13:36:19 -05:00
<Property Name= "PlatformHashNodeName" Value= "$(PreNodeName)Hash $(TargetPlatform)" />
<Property Name= "PlatformPublishStagedNodeName" Value= "$(PreNodeName)Publish Staged $(TargetPlatform)" />
<Property Name= "PlatformPublishPackagedNodeName" Value= "$(PreNodeName)Publish Packaged $(TargetPlatform)" />
2024-06-04 12:59:06 -04:00
<Property Name= "PlatformCheckBuildSizeNodeName" Value= "$(PreNodeName)Check Build Size $(TargetPlatform)" />
2024-04-09 15:32:40 -04:00
<Property Name= "PlatformStagedArtifactNodeName" Value= "$(PlatformPublishStagedNodeName) (Horde)" />
2024-06-25 11:41:52 -04:00
<Property Name= "HordeArtifactPlatformPackagedNodeName" Value= "$(PlatformPublishPackagedNodeName) (Horde)" />
<Property Name= "RequirePlatformStaged" Value= "$(PlatformStageNodeName)" />
<Property Name= "RequirePlatformStaged" Value= "$(RequirePlatformStaged);$(PlatformStagedArtifactNodeName)" If= "$(Horde)" />
2024-04-09 15:32:40 -04:00
<Property Name= "RequirePlatformStaged" Value= "$(RequirePlatformStaged);$(PlatformPublishStagedNodeName)" If= "!$(SkipPublish) And $(PublishBuilds)" />
2024-02-22 13:14:40 -05:00
<Property Name= "RequirePlatformPackaged" Value= "$(PlatformPackageNodeName)" />
2024-06-25 11:41:52 -04:00
<Property Name= "RequirePlatformPackaged" Value= "$(RequirePlatformPackaged);$(HordeArtifactPlatformPackagedNodeName)" If= "$(Horde)" />
<Property Name= "RequirePlatformPackaged" Value= "$(RequirePlatformPackaged);$(PlatformPublishPackagedNodeName)" If= "!$(SkipPublish) And $(PublishBuilds)" />
2021-03-09 21:05:18 -04:00
<!-- Set CookPlatform since it isn't always the same as the target -->
<Property Name= "CookPlatform" Value= "$(TargetPlatform)" />
<Property Name= "CookPlatform" Value= "Windows" If= "'$(TargetPlatform)' == 'Win64'" />
2021-03-28 22:51:06 -04:00
<Property Name= "CookPlatform" Value= "$(CookPlatform)_ETC2" If= "'$(TargetPlatform)' == 'Android'" />
2021-03-09 21:05:18 -04:00
<Property Name= "CookPlatform" Value= "$(CookPlatform)Client" If= "'$(TargetType)' == 'Client'" />
2021-03-28 22:51:06 -04:00
<Property Name= "BCRCookFlavor" Value= "" If= "" />
<Property Name= "BCRCookFlavor" Value= "ETC2" If= "'$(TargetPlatform)' == 'Android'" />
2021-07-27 15:36:56 -04:00
2021-03-28 22:51:06 -04:00
<Property Name= "StagedPlatformFolder" Value= "$(CookPlatform)" />
<!-- <Property Name="StagedPlatformFolder" Value="$(StagedPlatformFolder)Client" If="'$(TargetType)' == 'Client'" /> -->
2021-07-27 15:36:56 -04:00
<!-- Hashing of staged data can only be done on Win64 hosts -->
2024-03-29 12:30:20 -04:00
<Property Name= "DoUnsyncHashing" Value= "$(HostAgentType) == 'Win64' and $(IsEpicInternal)" />
2021-12-03 01:31:49 -05:00
<!-- Default BuildCookRun args needed when staging/packaging/archiving this configuration -->
2022-08-23 17:02:18 -04:00
<Property Name= "BCRArgs" Value= "-project=$(TargetProject) -platform=$(TargetPlatform) -cookflavor="$(BCRCookFlavor)"" />
2021-12-03 01:31:49 -05:00
<Property Name= "BCRArgs" Value= "$(BCRArgs) -client" If= "'$(TargetType)' == 'Client'" />
<Property Name= "BCRArgs" Value= "$(BCRArgs) -server" If= "'$(DedicatedServer)'" />
2021-12-03 13:28:57 -05:00
<!-- Support additional stage and package arguments that are only active on some platforms -->
<Property Name= "StageAndPackageArguments" Value= "$(ExtraStageAndPackageArguments)" />
<Property Name= "StageAndPackageArguments" Value= "$(StageAndPackageArguments) $(TargetPlatformFilteredExtraStageAndPackageArguments)" If= "'$(TargetPlatformFilteredExtraStageAndPackageArgumentsFilter)' != '' and ContainsItem('$(TargetPlatformFilteredExtraStageAndPackageArgumentsFilter)', '$(TargetPlatform)', '+')" />
2022-08-23 17:02:18 -04:00
<Property Name= "PackageOnlyArguments" Value= "$(ExtraPackageOnlyArguments)" />
<Property Name= "PackageOnlyArguments" Value= "$(PackageOnlyArguments) -archive -archivedirectory="$(ProjectOutputDirectory)/$(StagedPlatformFolder)"" If= "$(IsMobilePlatform)" />
2024-01-15 08:03:54 -05:00
2024-06-06 16:41:22 -04:00
<Property Name= "BuildSizeLimit" Value= "" />
<Regex Pattern= "(?<!\w)$(TargetPlatform):([0-9]+)" Capture= "BuildSizeLimit" Input= "$(CheckBuildSizePlatforms)" />
2024-06-05 15:46:11 -04:00
2021-03-09 21:05:18 -04:00
<!-- Build the client and if necessary a server -->
2021-12-03 02:42:56 -05:00
<Agent Name= "Compile $(PlatformAgentName)" Type= "$(CompileAgentType)" >
2021-07-27 15:36:56 -04:00
<!-- Compile -->
2023-05-30 15:34:34 -04:00
<Node Name= "$(PlatformCompileNodeName)" Requires= "$(PlatformToolsNodeName)" >
2022-09-09 18:19:11 -04:00
<Switch >
<Case If= "$(IsContentOnlyProject)" >
2023-05-05 14:34:42 -04:00
<Command Name= "BuildGame" Arguments= "$(BCRArgs) -configuration=$(TargetConfigurations) -notools -ubtargs="-BuildVersion=$(BuildVersion) $(GenericCompileArguments) $(ExtraTargetCompileArguments)"" />
2023-05-30 15:34:34 -04:00
<Tag Files= "$(RootDir)/$(ProjectPath)/Binaries/..." Filter= "$(TargetName).target" With= "#$(PlatformCompileNodeName)" />
<TagReceipt Files= "#$(PlatformCompileNodeName)" BuildProducts= "true" With= "#$(PlatformCompileNodeName)" />
2022-09-09 18:19:11 -04:00
</Case>
<Default >
<ForEach Name= "TargetConfiguration" Values= "$(TargetConfigurations)" Separator= "+" >
2023-05-05 14:34:42 -04:00
<Compile Target= "$(TargetName)" Platform= "$(TargetPlatform)" Configuration= "$(TargetConfiguration)" Arguments= "-BuildVersion="$(BuildVersion)" $(GenericCompileArguments) $(ExtraTargetCompileArguments)" />
2022-09-09 18:19:11 -04:00
<Do If= "'$(DedicatedServer)'" >
2023-05-05 14:34:42 -04:00
<Compile Target= "$(TargetName)Server" Platform= "Win64" Configuration= "$(TargetConfiguration)" Arguments= "-BuildVersion="$(BuildVersion)" $(GenericCompileArguments) $(ExtraTargetCompileArguments)" />
2022-09-09 18:19:11 -04:00
</Do>
</ForEach>
</Default>
</Switch>
2021-07-27 15:36:56 -04:00
</Node>
2021-03-09 21:05:18 -04:00
2021-12-03 01:31:49 -05:00
<!-- (Optional) Upload Symbols -->
<Do If= "'$(UploadSymbolsNodeName)' != ''" >
<Node Name= "$(UploadSymbolsNodeName)" Requires= "$(PlatformCompileNodeName)" >
<Log Message= "Uploading symbols to "$(SymbolServerPath)" ..." />
2023-05-05 14:34:42 -04:00
<SymStore Platform= "$(TargetPlatform)" Files= "#$(PlatformCompileNodeName)" StoreDir= "$(SymbolServerPath)/$(TargetPlatform)" Product= "$(TargetName)" BuildVersion= "$(BuildVersion)" />
2021-12-03 01:31:49 -05:00
</Node>
</Do>
</Agent>
<!-- Separate agent for cooking / staging, so the cook can happen in parallel with the client compile -->
2021-12-03 02:42:56 -05:00
<Agent Name= "Package $(PlatformAgentName)" Type= "$(PackageAgentType)" >
2021-12-03 01:31:49 -05:00
2021-07-27 15:36:56 -04:00
<!-- Cook -->
2021-12-03 02:42:56 -05:00
<Node Name= "$(PlatformCookNodeName)" Requires= "$(PlatformEditorNodeName)" Produces= "#$(PlatformCookNodeName) Complete" RunEarly= "true" >
2024-02-22 13:14:40 -05:00
<Do If= "!$(SkipCook)" >
2024-03-19 10:57:56 -04:00
<Expand Name= "PreCookStep" />
2024-02-22 13:14:40 -05:00
<Property Name= "CookArgs" Value= "" />
2024-06-06 16:41:22 -04:00
<Property Name= "CookArgs" Value= "-MapIniSection="$(MapIniSection)" $(CookPlatform)" If= "'$(MapIniSection)' != ''" />
2024-02-22 13:14:40 -05:00
<Cook Project= "$(TargetProject)" Platform= "$(CookPlatform)" TagOutput= "false" Arguments= "$(CookArgs) $(ExtraCookArguments)" />
</Do>
2021-07-27 15:36:56 -04:00
</Node>
<!-- Stage -->
2024-04-09 15:32:40 -04:00
<Node Name= "$(PlatformStageNodeName)" Requires= "$(PlatformCompileNodeName);#$(PlatformCookNodeName) Complete" >
2022-08-23 17:02:18 -04:00
<Switch >
<Case If= "$(IsMobilePlatform)" >
<ForEach Name= "PackageConfiguration" Values= "$(PackageConfigurations)" Separator= "+" >
<Command Name= "BuildCookRun" Arguments= "$(BCRArgs) -configuration=$(PackageConfiguration) $(StageAndPackageArguments) -skipbuild -skipcook -stage -pak" />
</ForEach>
</Case>
<Default >
<Command Name= "BuildCookRun" Arguments= "$(BCRArgs) -configuration=$(PackageConfigurations) $(StageAndPackageArguments) -skipbuild -skipcook -stage -pak" />
</Default>
</Switch>
2021-07-27 15:36:56 -04:00
</Node>
<!-- Hash -->
<Node Name= "$(PlatformHashNodeName)" Requires= "$(PlatformStageNodeName)" >
<Do If= "$(DoUnsyncHashing)" >
2021-07-28 16:20:59 -04:00
<Spawn Exe= "$(RootDir)/Engine/Restricted/NotForLicensees/Binaries/Win64/unsync.exe" Arguments= "hash "$(ProjectOutputDirectory)/$(StagedPlatformFolder)" -v --buffered-files" />
2021-07-27 15:36:56 -04:00
</Do>
</Node>
2023-06-06 17:40:06 -04:00
2024-05-24 01:53:30 -04:00
<!-- (Optional) Publish from local Zen to Cloud or remote Zen server -->
2023-06-06 17:40:06 -04:00
<Property Name= "PlatformPublishStageDependencyName" Value= "$(PlatformHashNodeName)" />
2024-05-24 01:53:30 -04:00
<Property Name= "ShouldSnapshotPublishCloud" Value= "false" />
<Property Name= "ShouldSnapshotPublishCloud" Value= "true" If= "$(PublishCloudSnapshot) and '$(UE-CloudPublishHost)' != '' and '$(UE-CloudPublishNamespace)' != ''" />
<Property Name= "ShouldSnapshotPublishZen" Value= "false" />
<Property Name= "ShouldSnapshotPublishZen" Value= "true" If= "$(IsBuildMachine) and !$(IsPreflight) and $(PublishZenSnapshot) and '$(UE-ZenPublishHost)' != ''" />
<Property Name= "ShouldSnapshotPublish" Value= "false" />
<Property Name= "ShouldSnapshotPublish" Value= "true" If= "$(IsBuildMachine) and !$(IsPreflight) and $(ShouldSnapshotPublishCloud) or $(ShouldSnapshotPublishZen)" />
<Do If= "$(PublishBuilds) and $(ShouldSnapshotPublish)" >
<Property Name= "PlatformSnapshotPublishNodeName" Value= "$(PreNodeName)Snapshot Publish $(TargetPlatform)" />
<Node Name= "$(PlatformSnapshotPublishNodeName)" Requires= "$(PlatformHashNodeName)" Produces= "#SnapshotDescriptor_$(StagedPlatformFolder)" >
<Property Name= "SnapshotLocalDir" Value= "$(RootDir)/Snapshots" />
<Property Name= "SnapshotIdentifier" Value= "$(EscapedBranch)/$(BuildNamePath)" />
<Property Name= "SnapshotIdentifier" Value= "$(UE_HORDE_TEMPLATEID).$(BuildVersion).$(UE_HORDE_JOBID:-6).$(UE_HORDE_STEPID)" If= "'$(UE_HORDE_JOBID)' != '' and '$(UE_HORDE_STEPID)' != '' and '$(UE_HORDE_TEMPLATEID)' != ''" />
<Property Name= "SnapshotFilenamePrefix" Value= "SnapshotDescriptor" />
<Property Name= "SnapshotFilenamePrefix" Value= "$(UE_HORDE_TEMPLATEID)" If= "'$(UE_HORDE_TEMPLATEID)' != ''" />
2024-05-24 10:56:56 -04:00
<Property Name= "SnapshotLongTermStorageDir" Value= "$(NetworkSnapshotDescFileRoot)/$(EscapedBranch)/$(ProjectName)/$(StagedPlatformFolder)/$(Change)" If= "'$(NetworkSnapshotDescFileRoot)' != ''" />
2024-05-24 01:53:30 -04:00
<Do If= "$(ShouldSnapshotPublishCloud)" >
2024-05-24 16:06:26 -04:00
<Property Name= "SnapshotBaseDescriptorFile" Value= "" />
2024-05-24 13:53:05 -04:00
<Property Name= "SnapshotBaseDescriptorFile" Value= "$(NetworkSnapshotDescFileRoot)/$(EscapedBranch)/$(ProjectName)/$(StagedPlatformFolder)/$(UE_HORDE_LAST_WARNING_CL)/$(SnapshotFilenamePrefix)-cloud.json" If= "'$(NetworkSnapshotDescFileRoot)' != '' and '$(UE_HORDE_LAST_WARNING_CL)' != ''" />
2024-05-24 11:08:42 -04:00
<ZenExportSnapshot Project= "$(TargetProject)" Platform= "$(CookPlatform)" DestinationStorageType= "Cloud" DestinationCloudHost= "$(UE-CloudPublishHost)" DestinationCloudHttpVersion= "$(UE-CloudPublishHttpVersion)" SnapshotDescriptorCloudHost= "$(UE-CloudPublishDescriptorHost)" SnapshotDescriptorCloudHttpVersion= "$(UE-CloudPublishDescriptorHttpVersion)" DestinationCloudNamespace= "$(UE-CloudPublishNamespace)" DestinationCloudBucket= "$(EscapedBranch).$(CookPlatform)" DestinationIdentifier= "$(SnapshotIdentifier)" SnapshotDescriptorFile= "$(SnapshotLocalDir)/$(StagedPlatformFolder)/$(SnapshotFilenamePrefix)-cloud.json" SnapshotBaseDescriptorFile= "$(SnapshotBaseDescriptorFile)" />
2024-05-24 01:53:30 -04:00
<Copy From= "$(SnapshotLocalDir)/$(StagedPlatformFolder)/$(SnapshotFilenamePrefix)-cloud.json" To= "$(NetworkOutputDirectory)/$(StagedPlatformFolder)/SnapshotDescriptor.json" />
<Do If= "'$(SnapshotLongTermStorageDir)' != ''" >
<Copy From= "$(SnapshotLocalDir)/$(StagedPlatformFolder)/$(SnapshotFilenamePrefix)-cloud.json" To= "$(SnapshotLongTermStorageDir)/$(SnapshotFilenamePrefix)-cloud.json" />
</Do>
</Do>
<Do If= "$(ShouldSnapshotPublishZen)" >
<ZenExportSnapshot Project= "$(TargetProject)" Platform= "$(CookPlatform)" DestinationStorageType= "Zen" DestinationZenHost= "$(UE-ZenPublishHost)" DestinationIdentifier= "$(SnapshotIdentifier)" SnapshotDescriptorFile= "$(SnapshotLocalDir)/$(StagedPlatformFolder)/$(SnapshotFilenamePrefix)-zen.json" />
<Copy From= "$(SnapshotLocalDir)/$(StagedPlatformFolder)/$(SnapshotFilenamePrefix)-zen.json" To= "$(NetworkOutputDirectory)/$(StagedPlatformFolder)/SnapshotDescriptorZen.json" />
<Do If= "'$(SnapshotLongTermStorageDir)' != ''" >
<Copy From= "$(SnapshotLocalDir)/$(StagedPlatformFolder)/$(SnapshotFilenamePrefix)-zen.json" To= "$(SnapshotLongTermStorageDir)/$(SnapshotFilenamePrefix)-zen.json" />
</Do>
</Do>
<Tag Files= "$(SnapshotLocalDir)/..." With= "#SnapshotDescriptor_$(StagedPlatformFolder)" />
</Node>
2024-05-24 02:07:23 -04:00
<Artifact Name= "ci-snapshot-$(StagedPlatformFolder)" Description= "Snapshot ($(StagedPlatformFolder))" Type= "ugs-snapshot" BasePath= "Snapshots" Keys= "ugs-project=$(TargetProject)" Metadata= "ArchiveType=SnapshotDescriptor_$(StagedPlatformFolder);dashboard-category=Snapshots" Tag= "#SnapshotDescriptor_$(StagedPlatformFolder)" />
2024-05-24 01:53:30 -04:00
<Property Name= "PlatformPublishStageDependencyName" Value= "$(PlatformSnapshotPublishNodeName)" />
2023-06-12 14:20:41 -04:00
</Do>
2021-07-27 15:36:56 -04:00
<!-- Publish (Staged) -->
2023-06-06 17:40:06 -04:00
<Node Name= "$(PlatformPublishStagedNodeName)" Requires= "$(PlatformPublishStageDependencyName)" >
2021-07-27 15:36:56 -04:00
<Copy Files= "..." From= "$(ProjectOutputDirectory)/$(StagedPlatformFolder)" To= "$(NetworkOutputDirectory)/$(StagedPlatformFolder)/Staged" />
2021-10-25 20:05:28 -04:00
<Copy Files= "..." From= "$(ShaderSymbolsDirectory)/*$(TargetPlatform)*" To= "$(NetworkOutputDirectory)/$(StagedPlatformFolder)/ShaderSymbols" />
2021-07-27 15:36:56 -04:00
</Node>
2024-04-09 15:32:40 -04:00
<!-- Publish (Staged) (Horde) -->
<Node Name= "$(PlatformStagedArtifactNodeName)" Requires= "$(PlatformStageNodeName)" Produces= "#$(PlatformStageNodeName) Files" >
<Tag Files= "$(ProjectOutputDirectory)/$(StagedPlatformFolder)/..." With= "#$(PlatformStageNodeName) Files" />
</Node>
2024-06-25 11:41:52 -04:00
<Artifact Name= "$(PlatformPackageArtifactName) (Staged)" Type= "staged-build" BasePath= "$(ProjectOutputDirectory)/$(StagedPlatformFolder)" Keys= "Project=$(ProjectName)" Metadata= "Stream=$(Branch);Platform=$(StagedPlatformFolder);BuildName=$(BuildNamePath);dashboard-category=Staged Builds" Tag= "#$(PlatformStageNodeName) Files" />
2024-04-09 15:32:40 -04:00
2021-07-27 15:36:56 -04:00
<!-- Package -->
2024-02-22 13:14:40 -05:00
<Node Name= "$(PlatformPackageNodeName)" Requires= "$(PlatformPublishStageDependencyName)" >
2022-08-23 17:02:18 -04:00
<ForEach Name= "PackageConfiguration" Values= "$(PackageConfigurations)" Separator= "+" >
<Command Name= "BuildCookRun" Arguments= "$(BCRArgs) -configuration=$(PackageConfiguration) $(StageAndPackageArguments) -skipbuild -skipcook -skipstage -skippak -package $(PackageOnlyArguments)" />
</ForEach>
2021-07-27 15:36:56 -04:00
</Node>
<!-- Publish (Packages) -->
<Node Name= "$(PlatformPublishPackagedNodeName)" Requires= "$(PlatformPackageNodeName)" >
2024-03-29 12:30:20 -04:00
<Error Message= "NetworkOutputDirectory is not set" If= "'$(NetworkOutputDirectory)' == ''" />
2022-08-23 17:02:18 -04:00
<ForEach Name= "PackageConfiguration" Values= "$(PackageConfigurations)" Separator= "+" >
<Command Name= "BuildCookRun" Arguments= "$(BCRArgs) -configuration=$(PackageConfiguration) $(StageAndPackageArguments) -skipbuild -skipcook -skipstage -skippak -skippackage -archive -archivedirectory="$(NetworkOutputDirectory)/$(StagedPlatformFolder)/Packages"" />
</ForEach>
2021-07-27 15:36:56 -04:00
</Node>
2024-06-25 11:41:52 -04:00
<!-- Publish (Packages) (Horde) -->
<Property Name= "PackagedArtifactTags" Value= "" />
2024-07-24 13:46:47 -04:00
<Property Name= "HordePackageSkipBCRArguments" Value= "-stage -package" />
<Property Name= "HordePackageSkipBCRArguments" Value= "-skipstage -skippackage" If= "'$(TargetPlatform)' == 'Mac'" />
2024-06-25 11:41:52 -04:00
<ForEach Name= "PackageConfiguration" Values= "$(PackageConfigurations)" Separator= "+" >
<Property Name= "PackagedArtifactTags" Value= "#$(PlatformPackageNodeName) $(PackageConfiguration) Files;$(PackagedArtifactTags)" />
</ForEach>
<Node Name= "$(HordeArtifactPlatformPackagedNodeName)" Requires= "$(PlatformPackageNodeName)" Produces= "$(PackagedArtifactTags)" >
<ForEach Name= "PackageConfiguration" Values= "$(PackageConfigurations)" Separator= "+" >
2024-07-24 13:46:47 -04:00
<Command Name= "BuildCookRun" Arguments= "$(BCRArgs) -configuration=$(PackageConfiguration) $(StageAndPackageArguments) -skipbuild -skipcook -skippak $(HordePackageSkipBCRArguments) -archive -archivedirectory="$(ProjectOutputDirectory)/Packages/$(StagedPlatformFolder)/$(PackageConfiguration)"" />
2024-07-17 08:23:00 -04:00
<Tag Files= "$(ProjectOutputDirectory)/Packages/$(StagedPlatformFolder)/$(PackageConfiguration)/..." With= "#$(PlatformPackageNodeName) $(PackageConfiguration) Files" />
2024-06-25 11:41:52 -04:00
</ForEach>
</Node>
<ForEach Name= "PackageConfiguration" Values= "$(PackageConfigurations)" Separator= "+" >
2024-07-17 08:23:00 -04:00
<Artifact Name= "$(PlatformPackageArtifactName) ($(PackageConfiguration))" Type= "packaged-build" BasePath= "$(ProjectOutputDirectory)/Packages/$(StagedPlatformFolder)/$(PackageConfiguration)" Keys= "Project=$(ProjectName)" Metadata= "Stream=$(Branch);Platform=$(StagedPlatformFolder);Configuration=$(PackageConfiguration);BuildName=$(BuildNamePath);dashboard-category=$(PackageConfiguration) Builds" Tag= "#$(PlatformPackageNodeName) $(PackageConfiguration) Files" />
2024-06-25 11:41:52 -04:00
</ForEach>
2024-06-04 12:59:06 -04:00
<!-- Check Build Size -->
<Node Name= "$(PlatformCheckBuildSizeNodeName)" Requires= "$(PlatformPublishPackagedNodeName)" >
<ForEach Name= "PackageConfiguration" Values= "$(PackageConfigurations)" Separator= "+" >
2024-06-06 16:41:22 -04:00
<Command Name= "CheckBuildSize" Arguments= "-project=$(TargetName) -platform=$(TargetPlatform) -packagesize=$(BuildSizeLimit) -build="$(NetworkOutputDirectory)" -configuration=$(PackageConfiguration)" />
2024-06-04 12:59:06 -04:00
</ForEach>
</Node>
2021-07-27 15:36:56 -04:00
</Agent>
2024-01-15 08:03:54 -05:00
2021-07-27 15:36:56 -04:00
<!-- Test Time! -->
2023-11-07 15:29:09 -05:00
<Property Name= "AllPlatformInstallNodes" Value= "" />
2021-07-27 15:36:56 -04:00
<Property Name= "AllPlatformBootTestNodes" Value= "" />
<Property Name= "AllPlatformTestNodes" Value= "" />
2021-06-07 13:42:07 -04:00
<Agent Name= "Test $(PlatformAgentName)" Type= "$(TestAgentType)" >
2021-03-12 15:39:07 -04:00
<!-- Run through all configs -->
2021-03-11 23:26:40 -04:00
<ForEach Name= "TestConfiguration" Values= "$(TestConfigurations)" Separator= "+" >
2023-11-07 15:29:09 -05:00
<Property Name= "NodeAnnotations" Value= "" />
2021-06-07 13:42:07 -04:00
<!-- Prerequisites for the test to run -->
2024-02-27 10:06:06 -05:00
<Property Name= "UsePackaged" Value= "(ContainsItem('$(PlatformsThatRequirePackaging)', '$(TargetPlatform)', '+') Or !ContainsItem('$(PlatformsToSkipPackaging)', '$(TargetPlatform)', '+'))" />
2024-02-22 13:14:40 -05:00
<Property Name= "TestPrerequisites" Value= "$(RequirePlatformStaged)" />
2024-02-27 10:06:06 -05:00
<Property Name= "TestPrerequisites" Value= "$(RequirePlatformPackaged)" If= "$(UsePackaged)" />
2024-01-15 08:03:54 -05:00
<Property Name= "TestPrerequisites" Value= "$(PlatformToolsNodeName)" If= "'$(GeneratedBuildVersion)' != ''" />
<Property Name= "TestPrerequisites" Value= "$(PlatformToolsNodeName);$(PlatformEditorNodeName)" If= "'$(GeneratedBuildVersion)' != '' and $(TestsRequireEditor)" />
2021-07-29 20:22:51 -04:00
2021-03-13 00:08:03 -04:00
<!-- Create the - build argument for Gauntlet based on whether builds are local or on the network -->
2021-06-07 13:42:07 -04:00
<Property Name= "GauntletBuildArg" Value= "-build="$(ProjectOutputDirectory)"" />
2021-07-29 20:22:51 -04:00
2024-01-15 08:03:54 -05:00
<Do If= "'$(NetworkOutputDirectory)' != '' Or '$(GeneratedBuildVersion)' != ''" >
2021-07-29 20:22:51 -04:00
<Property Name= "TestDirectory" Value= "$(NetworkOutputDirectory)" />
2024-01-15 08:03:54 -05:00
<Property Name= "TestDirectory" Value= "$(GeneratedBuildDir)" If= "'$(GeneratedBuildVersion)' != ''" />
2021-07-29 20:22:51 -04:00
<Property Name= "GauntletBuildArg" Value= "-build="$(TestDirectory)"" />
2024-02-27 10:06:06 -05:00
<Property Name= "GauntletBuildArg" Value= "$(GauntletBuildArg) -packaged" If= "$(UsePackaged)" />
2023-11-08 11:55:30 -05:00
<Property Name= "GauntletBuildArg" Value= "$(GauntletBuildArg) -destlocalinstalldir="$(LocalInstallDirectory)"" If= "!$(IsLocalPlatform) And $(WithDeviceReservation)" />
2021-07-29 20:22:51 -04:00
</Do>
2021-10-13 12:32:22 -04:00
<Property Name= "GauntletTestArgs" Value= "$(GauntletTargetTestArgs)" />
<Property Name= "GauntletTestArgs" Value= "$(GauntletTargetTestAltArgs)" If= "ContainsItem('$(AlternateDevicePoolPlatforms)', '$(TargetPlatform)', ';')" />
2024-01-15 08:03:54 -05:00
<Property Name= "GauntletTestArgs" Value= "$(GauntletTestArgs) -adbkeys="$(AdbKeysPath)"" If= "'$(AdbKeysPath)' != '' and '$(TargetPlatform)' == 'Android'" />
2023-11-07 15:29:09 -05:00
<!-- Install step -->
2023-11-08 11:55:30 -05:00
<Do If= "!$(IsLocalPlatform) And $(WithDeviceReservation)" >
2023-11-07 15:29:09 -05:00
<Property Name= "NodeAnnotations" Value= "" />
<Property Name= "NodeAnnotations" Value= "Workflow=$(AnnotationsTarget)" If= "ContainsItem('$(AnnotationsPlatforms)', '$(TargetPlatform)', ';') and ContainsItem('$(AnnotationsTests)', 'Install', ';')" />
<Property Name= "InstallNodeName" Value= "$(PreNodeName)$(TargetPlatform) $(TestConfiguration) Install Game" />
<Property Name= "InstallArgs" Value= "-ClientCount=1 $(GauntletPreInstallArgs)" />
<Do If= "'$(AutomationReportOutputDirectory)' != ''" >
<Property Name= "OutputFragmentPath" Value= "$(TargetPlatform)/$(TestConfiguration)/UE.InstallOnly" />
<Property Name= "OutputReportPath" Value= "$(AutomationReportOutputDirectory)/$(OutputFragmentPath)" />
<Property Name= "GauntletReportArgs" Value= "-logdir="$(OutputReportPath)" -artifactname=Gauntlet" />
</Do>
2024-02-22 13:14:40 -05:00
<Node Name= "$(InstallNodeName)" Requires= "$(TestPrerequisites)" Annotations= "DeviceReserve=Begin;$(NodeAnnotations)" >
2023-11-07 15:29:09 -05:00
<Command Name= "RunUnreal" Arguments= "-project=$(TargetProject) -test="UE.InstallOnly" -platform=$(TargetPlatform) -configuration=$(TestConfiguration) -target=$(TargetName) $(GauntletBuildArg) $(GauntletTestArgs) $(GauntletReportArgs) $(InstallArgs)" />
</Node>
<Property Name= "TestPrerequisites" Value= "$(TestPrerequisites);$(InstallNodeName)" />
<Do If= "!ContainsItem('$(TargetPlatformsToSkipBootTests)', '$(TargetPlatform)', '+') Or !ContainsItem('$(TargetPlatformsToSkipTests)', '$(TargetPlatform)', '+')" >
<Property Name= "AllPlatformInstallNodes" Value= "$(AllPlatformInstallNodes);$(InstallNodeName)" />
</Do>
<!-- Skip install for all other test node -->
<Property Name= "GauntletTestArgs" Value= "$(GauntletTestArgs) $(GauntletTestSkipInstallArgs)" />
</Do>
2023-03-13 09:32:52 -04:00
<!-- Declare a boot test for the target -->
<Property Name= "NodeAnnotations" Value= "" />
<Property Name= "NodeAnnotations" Value= "Workflow=$(AnnotationsTarget)" If= "ContainsItem('$(AnnotationsPlatforms)', '$(TargetPlatform)', ';') and ContainsItem('$(AnnotationsTests)', 'BootTest', ';')" />
2023-01-13 13:36:19 -05:00
<Property Name= "BootTestName" Value= "$(PreNodeName)$(TargetPlatform) $(TestConfiguration) BootTest" />
2024-02-22 13:14:40 -05:00
<Node Name= "$(BootTestName)" Requires= "$(TestPrerequisites)" Annotations= "$(NodeAnnotations)" >
2021-03-12 15:39:07 -04:00
<Do If= "'$(AutomationReportOutputDirectory)' != ''" >
<Property Name= "OutputFragmentPath" Value= "$(TargetPlatform)/$(TestConfiguration)/UE.BootTest" />
<Property Name= "OutputReportPath" Value= "$(AutomationReportOutputDirectory)/$(OutputFragmentPath)" />
2023-11-07 15:29:09 -05:00
<Property Name= "GauntletReportArgs" Value= "-logdir="$(OutputReportPath)" -artifactname=Gauntlet" />
2021-03-12 15:39:07 -04:00
</Do>
<!-- Run the boot test -->
2023-08-30 11:27:14 -04:00
<Command Name= "RunUnreal" Arguments= "-project=$(TargetProject) -test="UE.BootTest" -platform=$(TargetPlatform) -configuration=$(TestConfiguration) -target=$(TargetName) $(GauntletBuildArg) $(GauntletTestArgs) $(GauntletReportArgs)" />
2021-03-09 21:05:18 -04:00
</Node>
2021-03-11 23:26:40 -04:00
<!-- Link the boot test in to the prerequisites and generated nodes if its enabled -->
2021-06-07 13:42:07 -04:00
<Property Name= "TestPrerequisites" Value= "$(TestPrerequisites);$(PlatformEditorNodeName)" />
2021-05-13 20:20:15 -04:00
<Do If= "$(TargetBootTest) and !ContainsItem('$(TargetPlatformsToSkipBootTests)', '$(TargetPlatform)', '+')" >
2021-03-11 23:26:40 -04:00
<Property Name= "TestPrerequisites" Value= "$(TestPrerequisites);$(BootTestName)" />
<Property Name= "AllPlatformBootTestNodes" Value= "$(AllPlatformBootTestNodes);$(BootTestName)" />
</Do>
<!-- Go through the list of tests -->
<ForEach Name= "TestName" Values= "$(TargetTestList)" Separator= "+" >
2023-03-13 11:35:43 -04:00
<Property Name= "TestNameTitle" Value= "$(TestName)" />
<Expand Name= "SanitizeTestNameTitle" />
2021-03-11 23:26:40 -04:00
<!-- Run and report on the test -->
<Do If= "'$(AutomationReportOutputDirectory)' != ''" >
2023-03-13 11:35:43 -04:00
<Property Name= "OutputFragmentPath" Value= "$(TargetPlatform)/$(TestConfiguration)/$(TestNameTitle)" />
2021-03-11 23:26:40 -04:00
<Property Name= "OutputReportPath" Value= "$(AutomationReportOutputDirectory)/$(OutputFragmentPath)" />
<Property Name= "GauntletReportArgs" Value= "-logdir="$(OutputReportPath)" -artifactname=Gauntlet -ReportExportPath="$(OutputReportPath)"" />
<Property Name= "GauntletReportArgs" Value= "$(GauntletReportArgs) -ReportURL="$(AutomationReportUrl)/$(OutputFragmentPath)/"" If= "'$(AutomationReportUrl)' != ''" />
</Do>
2023-03-13 11:35:43 -04:00
<Property Name= "TestNodeName" Value= "$(PreNodeName)$(TargetPlatform) $(TestConfiguration) $(TestNameTitle)" />
2023-03-13 09:32:52 -04:00
<Property Name= "NodeAnnotations" Value= "" />
<Property Name= "NodeAnnotations" Value= "Workflow=$(AnnotationsTarget)" If= "ContainsItem('$(AnnotationsPlatforms)', '$(TargetPlatform)', ';') and ContainsItem('$(AnnotationsTests)', '$(TestName)', ';')" />
2021-07-27 15:36:56 -04:00
<!-- Run the test. No 'Requires' as we run on the same machine locally and use the publish folder otherwise -->
2023-03-13 09:32:52 -04:00
<Node Name= "$(TestNodeName)" Requires= "$(TestPrerequisites)" Annotations= "$(NodeAnnotations)" >
2023-08-30 11:27:14 -04:00
<Command Name= "RunUnreal" Arguments= "-project=$(TargetProject) -test="$(TestName)" -platform=$(TargetPlatform) -configuration=$(TestConfiguration) -target=$(TargetName) $(GauntletBuildArg) $(GauntletTestArgs) $(GauntletReportArgs)" />
2021-03-11 23:26:40 -04:00
</Node>
<!-- Add it to our list -->
2021-05-13 20:20:15 -04:00
<Do If= "!ContainsItem('$(TargetPlatformsToSkipTests)', '$(TargetPlatform)', '+')" >
2021-03-28 22:51:06 -04:00
<Property Name= "AllPlatformTestNodes" Value= "$(AllPlatformTestNodes);$(TestNodeName)" />
</Do>
2024-01-15 08:03:54 -05:00
</ForEach>
2024-08-09 10:34:26 -04:00
<!-- Expand the tests here -->
<Expand Name= "AdditionalTestNodes" />
2021-03-11 23:26:40 -04:00
</ForEach>
2021-03-09 21:05:18 -04:00
</Agent>
2024-08-09 10:34:26 -04:00
2021-03-09 21:05:18 -04:00
<!-- Declare labels for CIS -->
2023-01-13 13:36:19 -05:00
<Label Category= "Clients" Name= "$(PreLabelName)$(TargetPlatform)" Requires= "$(PlatformCompileNodeName);$(UploadSymbolsNodeName)" />
<Label Category= "Clients" Name= "$(PreLabelName)Content $(TargetPlatform)" Requires= "$(PlatformCookNodeName);$(PlatformStageNodeName);$(PlatformPackageNodeName)" />
<Label Category= "Clients" Name= "$(PreLabelName)Publish $(TargetPlatform)" Requires= "$(PlatformPublishPackagedNodeName);$(PlatformPublishPackagedNodeName);$(PlatformPublishStagedNodeName);$(PlatformHashNodeName)" />
2023-11-07 15:29:09 -05:00
<Label Category= "Tests" Name= "$(PreLabelName)Install $(TargetPlatform)" Requires= "$(AllPlatformInstallNodes)" />
2023-01-13 13:36:19 -05:00
<Label Category= "Tests" Name= "$(PreLabelName)BootTest $(TargetPlatform)" Requires= "$(AllPlatformBootTestNodes)" />
<Label Category= "Tests" Name= "$(PreLabelName)Test $(TargetPlatform)" Requires= "$(AllPlatformTestNodes)" />
2021-03-09 21:05:18 -04:00
2021-07-27 15:36:56 -04:00
<!-- Tie all steps into our platform tasks unless excluded -->
2021-03-09 21:05:18 -04:00
<Property Name= "PlatformTasks" Value= "" />
2021-12-03 01:31:49 -05:00
<Property Name= "PlatformTasks" Value= "$(PlatformCompileNodeName);$(UploadSymbolsNodeName)" If= "!$(SkipBuild)" />
2024-02-22 13:14:40 -05:00
<Property Name= "PlatformTasks" Value= "$(PlatformTasks);$(PlatformCookNodeName)" If= "!$(SkipCook) and !$(SkipPublish)" />
<Property Name= "PlatformTasks" Value= "$(PlatformTasks);$(RequirePlatformStaged)" If= "!$(SkipPublish)" />
<Property Name= "PlatformTasks" Value= "$(PlatformTasks);$(RequirePlatformPackaged)" If= "!$(SkipPackage) and !$(SkipPublish)" />
2021-07-27 15:36:56 -04:00
<Property Name= "PlatformTasks" Value= "$(PlatformTasks);$(PlatformHashNodeName)" If= "$(PublishHashedStagingData)" />
2024-06-04 12:59:06 -04:00
<Property Name= "PlatformTasks" Value= "$(PlatformTasks);$(AllPlatformBootTestNodes);$(AllPlatformTestNodes)" />
2024-06-06 16:41:22 -04:00
<Property Name= "PlatformTasks" Value= "$(PlatformTasks);$(PlatformCheckBuildSizeNodeName)" If= "'$(BuildSizeLimit)' != ''" />
2021-03-09 21:05:18 -04:00
<Property Name= "GeneratedTargetNodes" Value= "$(GeneratedTargetNodes);$(PlatformTasks)" />
2024-01-15 08:03:54 -05:00
<Property Name= "GeneratedTargetTestNodes" Value= "$(GeneratedTargetTestNodes);$(AllPlatformBootTestNodes);$(AllPlatformTestNodes)" />
2021-03-09 21:05:18 -04:00
</ForEach>
<!-- Create an aggregate with all the generated nodes -->
2022-07-11 09:50:47 -04:00
<Aggregate Name= "BuildAndTest $(ProjectName)" Requires= "$(GeneratedToolNodes);$(GeneratedCookedEditorNodes);$(GeneratedEditorTestNodes);$(GeneratedCookedEditorTestNodes);$(GeneratedTargetNodes);$(GeneratedTargetTestNodes)" />
2024-01-15 08:03:54 -05:00
<Aggregate Name= "OnlyTest $(ProjectName)" Requires= "$(GeneratedEditorTestNodes);$(GeneratedCookedEditorTestNodes);$(GeneratedTargetTestNodes)" />
2021-03-09 21:05:18 -04:00
</BuildGraph>