diff --git a/src/Tgstation.Server.Host/Components/Engine/OpenDreamInstaller.cs b/src/Tgstation.Server.Host/Components/Engine/OpenDreamInstaller.cs
index cd6cd5eeb7..115ec4f041 100644
--- a/src/Tgstation.Server.Host/Components/Engine/OpenDreamInstaller.cs
+++ b/src/Tgstation.Server.Host/Components/Engine/OpenDreamInstaller.cs
@@ -24,12 +24,17 @@ namespace Tgstation.Server.Host.Components.Engine
class OpenDreamInstaller : EngineInstallerBase
{
///
- /// The name of the subdirectory used to store the server binaries.
+ /// The bin directory name.
///
- const string InstallationServerDirectory = "server";
+ const string BinDir = "bin";
///
- /// The name of the subdirectory used to store the compiler binaries.
+ /// The OD server directory name.
+ ///
+ const string ServerDir = "Content.Server";
+
+ ///
+ /// The name of the subdirectory in an installation's used to store the compiler binaries.
///
const string InstallationCompilerDirectory = "compiler";
@@ -211,6 +216,7 @@ namespace Tgstation.Server.Host.Components.Engine
var dotnetPath = dotnetPaths[selectedPathIndex];
+ // TODO: https://github.com/OpenDreamProject/OpenDream/issues/1495
int? buildExitCode = null;
await HandleExtremelyLongPathOperation(
async shortenedPath =>
@@ -231,27 +237,68 @@ namespace Tgstation.Server.Host.Components.Engine
if (buildExitCode != 0)
throw new JobException("OpenDream build failed!");
- var serverMoveTask = IOManager.MoveDirectory(
- IOManager.ConcatPath(
- sourcePath,
- "bin",
- "Content.Server"),
- IOManager.ConcatPath(
- installPath,
- InstallationServerDirectory),
- cancellationToken);
+ async ValueTask MoveBinFiles()
+ {
+ var installBinPath = IOManager.ConcatPath(installPath, BinDir);
- var compilerMoveTask = IOManager.MoveDirectory(
- IOManager.ConcatPath(
- sourcePath,
- "bin",
- "DMCompiler"),
- IOManager.ConcatPath(
- installPath,
- InstallationCompilerDirectory),
- cancellationToken);
+ await IOManager.CreateDirectory(installBinPath, cancellationToken);
- await Task.WhenAll(serverMoveTask, compilerMoveTask);
+ var serverMoveTask = IOManager.MoveDirectory(
+ IOManager.ConcatPath(
+ sourcePath,
+ BinDir,
+ ServerDir),
+ IOManager.ConcatPath(
+ installBinPath,
+ ServerDir),
+ cancellationToken);
+
+ var compilerMoveTask = IOManager.MoveDirectory(
+ IOManager.ConcatPath(
+ sourcePath,
+ BinDir,
+ "DMCompiler"),
+ IOManager.ConcatPath(
+ installBinPath,
+ InstallationCompilerDirectory),
+ cancellationToken);
+
+ await Task.WhenAll(serverMoveTask, compilerMoveTask);
+ }
+
+ async ValueTask MoveResources()
+ {
+ const string RobustDir = "RobustToolbox";
+ const string ResourcesDir = "Resources";
+
+ var rootMoveTask = IOManager.MoveDirectory(
+ IOManager.ConcatPath(
+ sourcePath,
+ ResourcesDir),
+ IOManager.ConcatPath(
+ installPath,
+ ResourcesDir),
+ cancellationToken);
+ var installRobustDir = IOManager.ConcatPath(installPath, RobustDir);
+
+ await IOManager.CreateDirectory(installRobustDir, cancellationToken);
+ var robustMoveTask = IOManager.MoveDirectory(
+ IOManager.ConcatPath(
+ sourcePath,
+ RobustDir,
+ ResourcesDir),
+ IOManager.ConcatPath(
+ installRobustDir,
+ ResourcesDir),
+ cancellationToken);
+
+ await Task.WhenAll(rootMoveTask, robustMoveTask);
+ }
+
+ var binSetupTask = MoveBinFiles();
+ var resourcesMoveTask = MoveResources();
+
+ await ValueTaskExtensions.WhenAll(binSetupTask, resourcesMoveTask);
await IOManager.DeleteDirectory(sourcePath, cancellationToken);
}
@@ -297,11 +344,13 @@ namespace Tgstation.Server.Host.Components.Engine
serverExePath = IOManager.ConcatPath(
installationPath,
- InstallationServerDirectory,
+ BinDir,
+ ServerDir,
$"OpenDreamServer{exeExtension}");
compilerExePath = IOManager.ConcatPath(
installationPath,
+ BinDir,
InstallationCompilerDirectory,
$"DMCompiler{exeExtension}");
}