;To pack submit tool run these two commands substituting the correct paths ;RunUBT.bat -Target="SubmitTool Win64 Development -Target="UnrealPak Win64 Development -Project=Programs/SubmitTool/SubmitTool.uproject" ;RunUAT.bat BuildCookRun -platform=Win64 -project=SubmitTool -skipcook -stage -pak -nodebuginfo -nobootstrapexe -stagingdirectory=***STAGINGDESTINATION***/SubmitTool -NoCodeSign ;After these you will have a standalone submit tool you can zip and distribute in ***STAGINGDESTINATION***/SubmitTool ; For general parameters see Engine\Source\Programs\SubmitTool\Private\Parameters\SubmitToolParameters.h [SubmitTool.CopyLog] LogsToCollect=(\ "$(SubmitToolSavedDir)Logs/SubmitTool.log"\ ) ; Tags parameters (See Engine\Source\Programs\SubmitTool\Private\Models\TagDefinition.h): ; Tags: ; TagId -> tag to add in the CLDescription ; TagLabel -> label to display in SubmitTool ; ToolTip -> Tooltip to show on hovering the Tag ; DocumentationUrl -> URL to navigate to upon clicking the tag help ; InputType -> Type of widget {FreeText, PerforceUser} ; ValueDelimiter -> string that acts as a delimiter to split different values ; MinValues - theminimum amount of values that this tag should have ; MaxValues -> the maximum amount of values this tag can have ; bIsUserValue -> if true, values for this tag will need to be valid p4 usernames (if RegexValidation is present, both the regex and p4 users are valid) ; Filters -> if present acts as an allow list, any value that contains any of the listed filter will be included ; Validation -> How the tag is validated ; IsMandatory -> if the tag needs to appear for the CL to be submitted ; RegexValidation -> if present, validates the values of the tag against this regex ; RegexErrorMessage -> Shows this error when RegexValidation fails ; ValidationOverrides -> List of overrides for specific paths ; RegexPath -> If any depot files matches this path use this validation instead: ; Validation (see above) ; [Tags.Review] TagId="#rb" TagLabel="Reviewed By" ToolTip="The RB (reviewed by) tag will display any reviewers on the change." InputType="PerforceUser" InputSubType="Swarm" MinValues=1 MaxValues=10 bIsUserValue="true" Validation=(\ bIsMandatory="false",\ RegexValidation="^skip$|^none$|^trivial$",\ RegexErrorMessage="#RB tag value should be one of 'skip', 'none', 'trivial' or a valid p4 username or group"\ ) ValidationOverrides=(\ (\ RegexPath="^.*\.(?:c|cc|cpp|inl|m|mm|rc|cs|csproj|h|hpp|inl|usf|ush|uproject|uplugin|sln)$",\ ConfigOverride=(\ bIsMandatory="true",\ RegexValidation="^skip$|^none$|^trivial$",\ RegexErrorMessage="#RB tag value should be one of 'skip', 'none', 'trivial' or a valid p4 username or group, this tag is mandatory for code changes"\ )\ )\ ) [Tags.ComboSample] TagId="#comboSample" TagLabel="Combo" ToolTip="This is an example." DocumentationURL="https://www.google.com/" InputType="MultiSelect" MinValues=1 MaxValues=20 SelectValues=(\ "I",\ "am",\ "an ",\ "example") [Tags.EmptySample] TagId="#bool" TagLabel="Bool" ToolTip="Bool example." InputType="Boolean" [Tags.TextSample] TagId="#text" TagLabel="Value Tag" ToolTip="Text example." InputType="FreeText" ; Validator Parameters (more in Engine\Source\Programs\SubmitTool\Private\Logic\Validators\ValidatorDefinition.h) ; [Validator.Id] -> The value after the . is the Validator unique ID ; Values: ; Type -> Validator Class {TagValidator, CustomValidator, UBTValidator} ; CustomName -> Name of the custom validator, example <"MyCustomValidator"> ; IsRequired -> True or False if this validator is required to pass to submit. If it's not it will just throw warnings instead of blocking errors. ; bRequireCompleteWhenOptional -> Whether the validator is required to finish running before allowing submission ; TimeoutLimit -> Timeout for validators, infinite if unspecified ; ; IncludeFilesWithExtension -> List extension for which this Validator needs to run. ; IncludeFilesInDirectory -> Only run this validator for files under this directory ; ChangelistDescriptionAddendum -> This text will be added to the CL description if this validation passes ; bSkipWhenAddendumInDescription -> Skip this validator when the addendum is already present in the CL description ; SkipForbiddenTags -> Skip is forbidden when this text if found in the CL description ; DependsOn -> List of Validator Ids that needs to succeed before this validator runs ; ExecutionBlockGroups -> List of execution groups this Validator is part of. Two validators with an execution group in commmon cannot run concurrently ; UIGroup -> Name of the UI Section this Validator is part of ; bAcceptDeletedFiles -> If this Validator runs on files marked for delete ; bTreatWarningsAsErrors -> If this Validator should treat warnings as errors ; bUsesIncrementalCache -> If this validator maintains a local cache of results per file between runs on the same CL, used for incremental validations ; bUsesIncrementalCache -> If this validator maintains a local cache of results per file between runs on the same CL, used for incremental validations ; AdditionalValidationErrorMessages -> Additional error messages to print when this validation fails ; ToolTip -> Tooltip when hovering over the Validator ; TaskArea -> Area this validator works on, if an area is updated, the validator state will be automatically resetted { Everything, LocalFiles, ShelvedFiles, LocalAndShelvedFiles, Changelist } ; [Validator.Tag] Type="TagValidator" CustomName="P4 Changelist Tag Validator" IsRequired="true" ToolTip="This validator ensures you have all of the required tags in your changelist description." TaskArea="Changelist" [Validator.NonUnityAndStaticAnalysis] Type="UBTValidator" IsRequired="true" bUsesIncrementalCache="true" CustomName="Non Unity + SA Validator" IncludeFilesWithExtension=(".h", ".hpp", ".c", ".cpp") ExecutablePath="$(root)/Engine/Build/BatchFiles/RunUBT.bat" ExecutableArguments="-Define:CHECK_PUREVIRTUALS=1 -Define:UE_CHECK_DISABLE_OPTIMIZATION=1 -NoPCH -DisableUnity -AllModules -NoLink -WarningsAsErrors -IncludeHeaders" StaticAnalysers=( "Default", "visualcpp", "clang", "PVSStudio") StaticAnalyser="Default" StaticAnalyserArg="-staticanalyzer=" bUseStaticAnalyser="true" FileListArgument="-FileList=" TargetListArgument="-TargetList=" ProjectArgument="-Project=" Configuration="Development" Platform="Win64" Configurations=("Development", "Debug", "Shipping") Platforms=("Win64", "Linux", "Mac") Targets=("Editor", "Client") ToolTip="This Validator compiles the code in the changelist using the configuration/platform provided, it also runs Static Code Analysis at the same time." ErrorMessages=("A conflicting instance of", "dereferencing NULL pointer", "Unhandled exception:") UIGroup="Code Validations" ExecutionBlockGroups=("UBT") TaskArea="LocalFiles" [Validator.CrossChangelist] Type="CrossChangelistValidator" IsRequired="false" Invalidated=("Files") CustomName="Cross Changelists Validator" bAcceptDeletedFiles="true" ToolTip="This validator checks for both files in uncontrolled CLs and files that might need to be in the same changelist. A .h and .cpp in a different changelist might be an issue." TaskArea="LocalFiles" ; This is an example of configuration for a validator that calls the editor with your project and runs a commandlet, to do in-editor validations ; You'll need to replace paths and commandlets, and tweak cmdline parameters ; ; [Validator.EditorCommandletExample] ; Type="CustomValidator" ; IsRequired="true" ; bLaunchHidden="true" ; bLaunchReallyHidden="false" ; CustomName="Editor Validator" ; bAcceptDeletedFiles="true" ; bTreatWarningsAsErrors="true" ; IncludeFilesWithExtension=(".uasset", ".umap", ".uplugin") ; ExecutableCandidates=(\ ; ("Editor Config: Development", "$(root)/Engine/Binaries/Win64/UnrealEditor.exe"),\ ; ("Editor Config: DebugGame", "$(root)/Engine/Binaries/Win64/UnrealEditor-Win64-DebugGame.exe"),\ ; ("Editor Config: Debug", "$(root)/Engine/Binaries/Win64/UnrealEditor-Win64-Debug.exe")\ ; ) ; bUseLatestExecutable="true" ; ExecutableArguments="********YOUR PROJECT NAME********* -Run=******YOUR COMMANDLET******* -P4Changelist=$(CL) -p4client=$(CLIENT) -abslog=$(SubmitToolLogsDir)/EditorValidation.log -unattended -traceautostart=0 -fastexit -ini:EditorPerProjectUserSettings:[/Script/LiveCoding.LiveCodingSettings]:bEnabled=false" ; IncludeFilesInDirectory="$(root)/********PATH TO YOUR PROJECT********" ; ChangelistDescriptionAddendum="#changelist validated" ; bSkipWhenAddendumInDescription="true" ; EnableOutputErrorsAnchor="Submit Tool Anchor - any error after this line shall be considered and cause error." ; DisableOutputErrorsAnchor="Submit Tool Anchor - any error after this line shall be ignored." ; ToolTip="This validator runs a commandlet in the local editor validation." ; UIGroup="Editor Validations" ; AdditionalValidationErrorMessages=("This validation runs UnrealEditor, please make sure you have a working non-crashing editor and, if you build your own, you have the right configuration selected in the validator options") ; ExecutionBlockGroups=("Editor") ; TaskArea="LocalFiles"