UET (Unreal Engine Tool) makes building and testing Unreal Engine projects and plugins easy. It can distribute builds with BuildGraph, remotely execute automation tests on device and across multiple machines, handles fault tolerance and automatic retries and generally makes the whole experience of automating Unreal Engine a lot more pleasant.
I saw that someone on the Unreal Source Discord wanted to build a plugin that depends on other plugins. While it isn't valid to build a plugin like this for Fab (you can't have external/non-engine plugin dependencies for code plugins), it's perfectly fine if you want to distribute plugin binaries on e.g. GitHub.
It seems reasonable for UET to support this. I think a rough outline of the work probably looks like:
[ ] BuildGraph XML: Add -BuildDependantPlugins to compile steps when building a plugin with dependencies.
[ ] BuildGraph XML: The "Assemble Host Project" needs to perform the plugin copy steps not just from $(PluginDirectory), but the additional plugin directories as well, with each plugin getting it's own $(ShortPluginName). Maybe we can just give additional plugins a short name of P1, P2, ...? Depends on whether BuildGraph for loops will allow me to do that.
[ ] BuildGraph XML/Prepare Step: Figure out where we're going to clone the additional plugin repositories, since those paths will have be what $(PluginDirectory) is replaced with when copying out the additional plugins. Thankfully PluginDirectory is already a subdirectory of the main repository (usually __REPOSITORY_ROOT__/(plugin name)), so maybe we can just clone into __REPOSITORY_ROOT__/.uet/ExtraPlugins or something like that. If this is a consistent path, we might be able to just have an e.g. ExtraPluginsDirectory and set our host project tagging to do a filter of e.g. */Config/...; to just grab all the content from all the plugins without a foreach loop in the BuildGraph XML?
[ ] BuildGraph XML: Figure out what to do with Assemble Test Project. This isn't needed for "build only" paths, but it is necessary the moment you want to run any tests. Maybe we just don't support running tests for these kinds of plugin-depending-on-plugin situations for now?
[ ] Prepare Step: Actually add the "prepare download plugin" step. This is mostly copying the one that already exists for projects and adapting it for the new paths.
[ ] Can we add a parameter to uet build that lets you specify dependent plugins without having to use BuildConfig.json? It might be unwieldy though due to the interpolation support and number of parameters that plugin source specs actually need.
Oh this is actually a duplicate of #31. I'll keep this one open though because it has the list of tasks that need to be undertaken to complete the work.
I saw that someone on the Unreal Source Discord wanted to build a plugin that depends on other plugins. While it isn't valid to build a plugin like this for Fab (you can't have external/non-engine plugin dependencies for code plugins), it's perfectly fine if you want to distribute plugin binaries on e.g. GitHub.
It seems reasonable for UET to support this. I think a rough outline of the work probably looks like:
-BuildDependantPlugins
to compile steps when building a plugin with dependencies.$(PluginDirectory)
, but the additional plugin directories as well, with each plugin getting it's own$(ShortPluginName)
. Maybe we can just give additional plugins a short name ofP1
,P2
, ...? Depends on whether BuildGraph for loops will allow me to do that.$(PluginDirectory)
is replaced with when copying out the additional plugins. ThankfullyPluginDirectory
is already a subdirectory of the main repository (usually__REPOSITORY_ROOT__/(plugin name)
), so maybe we can just clone into__REPOSITORY_ROOT__/.uet/ExtraPlugins
or something like that. If this is a consistent path, we might be able to just have an e.g.ExtraPluginsDirectory
and set our host project tagging to do a filter of e.g.*/Config/...;
to just grab all the content from all the plugins without a foreach loop in the BuildGraph XML?Assemble Test Project
. This isn't needed for "build only" paths, but it is necessary the moment you want to run any tests. Maybe we just don't support running tests for these kinds of plugin-depending-on-plugin situations for now?uet build
that lets you specify dependent plugins without having to useBuildConfig.json
? It might be unwieldy though due to the interpolation support and number of parameters that plugin source specs actually need.