Skip to content

Commit e1092bf

Browse files
committed
chore: refactor command handling.
1 parent 9b1ca5d commit e1092bf

12 files changed

+55
-85
lines changed

Directory.Packages.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
<PackageVersion Include="xunit" Version="2.9.3" />
1313
<PackageVersion Include="xunit.runner.visualstudio" Version="3.0.1" />
1414
</ItemGroup>
15-
</Project>
15+
</Project>

README.md

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,13 @@ Install-Package UnityBuildRunner.Core
3737

3838
You can run installed tool via `UnityBuildRunner` (.NET Global Tool) or `dotnet UnityBuildRunner` (.NET Tool) command.
3939

40-
```
40+
```sh
4141
$ UnityBuildRunner --help
42-
Usage: UnityBuildRunner [options...]
42+
Usage: run [options...]
4343

4444
Options:
45-
-unity-path, --unity-path <String> Full Path to the Unity.exe (Leave empty when use 'UnityPath' Environment variables instead.) (Default: )
46-
-timeout, --timeout <String> Timeout to terminate execution within. default: "00:60:00" (Default: 02:00:00)
47-
48-
Commands:
49-
help Display help.
50-
version Display version.
45+
-unity-path, --unity-path <String> Full Path to the Unity executable, leave empty when use 'UnityPath' Environment variables instead. (Default: )
46+
-timeout, --timeout <String> Timeout for Unity Build. (Default: 02:00:00)
5147
```
5248

5349
## CLI (Basic)
@@ -58,31 +54,31 @@ All you need to do is pass unity's path as `-u UnityPath` and leave other argmen
5854
5955
If you are running Unity batch build like this.
6056

61-
```sh
62-
$ "C:\Program Files\Unity\Hub\Editor\2022.3.3f1\Editor\Unity.exe" -quit -batchmode -buildTarget "WindowsStoreApps" -projectPath "C:\git\MRTKSample\Unity" -logfile "log.log" -executeMethod "HoloToolkit.Unity.HoloToolkitCommands.BuildSLN"
63-
```
57+
```sh
58+
$ "C:/Program Files/Unity/Hub/Editor/6000.0.12f1/Editor/Unity.exe" -quit -batchmode -nographics -silent-crashes -logfile "log.log" -buildTarget "StandaloneWindows64" -projectPath "C:/github/UnityBuildRunner/sandbox/Sandbox.Unity" -executeMethod "BuildUnity.BuildGame"
59+
```
6460

6561
Then, append `UnityBuildRunner --unity-path <UnityPath>` or `dotnet UnityBuildRunner --unity-path <UnityPath>` to existing command, that's all.
6662

6763
```sh
6864
# .NET Global Tool
69-
$ UnityBuildRunner --unity-path "C:\Program Files\Unity\Hub\Editor\2022.3.3f1\Editor\Unity.exe" -quit -batchmode -buildTarget "WindowsStoreApps" -projectPath "C:\git\MRTKSample\Unity" -logfile "log.log" -executeMethod "HoloToolkit.Unity.HoloToolkitCommands.BuildSLN"
65+
$ UnityBuildRunner --unity-path "C:/Program Files/Unity/Hub/Editor/6000.0.12f1/Editor/Unity.exe" -quit -batchmode -nographics -silent-crashes -logfile "log.log" -buildTarget "StandaloneWindows64" -projectPath "C:/github/UnityBuildRunner/sandbox/Sandbox.Unity" -executeMethod "BuildUnity.BuildGame"
7066

7167
# .NET Tool
72-
$ dotnet UnityBuildRunner --unity-path "C:\Program Files\Unity\Hub\Editor\2022.3.3f1\Editor\Unity.exe" -quit -batchmode -buildTarget "WindowsStoreApps" -projectPath "C:\git\MRTKSample\Unity" -logfile "log.log" -executeMethod "HoloToolkit.Unity.HoloToolkitCommands.BuildSLN"
68+
$ dotnet UnityBuildRunner --unity-path "C:/Program Files/Unity/Hub/Editor/6000.0.12f1/Editor/Unity.exe" -quit -batchmode -nographics -silent-crashes -logfile "log.log" -buildTarget "StandaloneWindows64" -projectPath "C:/github/UnityBuildRunner/sandbox/Sandbox.Unity" -executeMethod "BuildUnity.BuildGame"
7369
```
7470

7571
> **Note**: Another way to specifying UnityPath is via Environment Variable `UnityPath`.
7672
7773
```sh
7874
# Environment Variables
79-
$ set UnityPath=C:\Program Files\Unity\Hub\Editor\2022.3.3f1\Editor\Unity.exe
75+
$ set UnityPath=C:/Program Files/Unity/Hub/Editor/6000.0.12f1/Editor/Unity.exe
8076

8177
# .NET Global Tool
82-
$ UnityBuildRunner -quit -batchmode -buildTarget "WindowsStoreApps" -projectPath "C:\git\MRTKSample\Unity" -logfile "log.log" -executeMethod "HoloToolkit.Unity.HoloToolkitCommands.BuildSLN"
78+
$ UnityBuildRunner -quit -batchmode -nographics -silent-crashes -logfile "log.log" -buildTarget "StandaloneWindows64" -projectPath "C:/github/UnityBuildRunner/sandbox/Sandbox.Unity" -executeMethod "BuildUnity.BuildGame"
8379

8480
# .NET Tool
85-
$ dotnet UnityBuildRunner -quit -batchmode -buildTarget "WindowsStoreApps" -projectPath "C:\git\MRTKSample\Unity" -logfile "log.log" -executeMethod "HoloToolkit.Unity.HoloToolkitCommands.BuildSLN"
81+
$ dotnet UnityBuildRunner -quit -batchmode -nographics -silent-crashes -logfile "log.log" -buildTarget "StandaloneWindows64" -projectPath "C:/github/UnityBuildRunner/sandbox/Sandbox.Unity" -executeMethod "BuildUnity.BuildGame"
8682
```
8783

8884
## Library (Basic)
@@ -91,7 +87,7 @@ You can use as Library as well. This is sample code to run Unity Build.
9187

9288
```csharp
9389
// Parse settings from argument
94-
var settings = DefaultSettings.Parse(args, @"C:\Program Files\Unity\Hub\Editor\2022.3.3f1\Editor\Unity.exe", TimeSpan.FromMinutes(30));
90+
var settings = DefaultSettings.Parse(args, @"C:/Program Files/Unity/Hub/Editor/6000.0.12f1/Editor/Unity.exe", TimeSpan.FromMinutes(30));
9591
using var cts = settings.CreateCancellationTokenSource();
9692

9793
// Run build
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
%YAML 1.1
2+
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!655991488 &1
4+
MultiplayerManager:
5+
m_ObjectHideFlags: 0
6+
m_EnableMultiplayerRoles: 0
7+
m_StrippingTypes: {}

sandbox/Sandbox.Unity/ProjectSettings/boot.config

Whitespace-only changes.

src/UnityBuildRunner.Core/BuildErrorCode.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System;
21
using System.Reflection;
32

43
namespace UnityBuildRunner.Core;

src/UnityBuildRunner.Core/BuildErrorFoundException.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
using System;
2-
31
namespace UnityBuildRunner.Core;
42
internal class BuildErrorFoundException : Exception
53
{

src/UnityBuildRunner.Core/DefaultBuilder.cs

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
using Microsoft.Extensions.Logging;
2-
using System;
32
using System.Diagnostics;
4-
using System.IO;
5-
using System.Threading;
6-
using System.Threading.Tasks;
73

84
namespace UnityBuildRunner.Core;
95

@@ -27,11 +23,8 @@ public interface IBuilder
2723
/// <summary>
2824
/// Default Unity builder
2925
/// </summary>
30-
public class DefaultBuilder : IBuilder
26+
public class DefaultBuilder(ISettings settings, ILogger logger, IErrorFilter errorFilter) : IBuilder
3127
{
32-
private readonly ISettings settings;
33-
private readonly ILogger logger;
34-
private readonly IErrorFilter errorFilter;
3528
private BuildErrorCode buildErrorCode = BuildErrorCode.Success;
3629

3730
public int ExitCode { get; private set; }
@@ -40,26 +33,21 @@ public class DefaultBuilder : IBuilder
4033
{
4134
}
4235

43-
public DefaultBuilder(ISettings settings, ILogger logger, IErrorFilter errorFilter)
44-
{
45-
this.settings = settings;
46-
this.logger = logger;
47-
this.errorFilter = errorFilter;
48-
}
49-
5036
public async Task BuildAsync(CancellationToken ct = default)
5137
{
5238
// Initialize
5339
logger.LogInformation($"Initializing UnityBuildRunner.");
5440
await InitializeAsync(settings.LogFilePath, ct).ConfigureAwait(false);
5541

5642
// Build
57-
logger.LogInformation("Starting Unity Build.");
58-
logger.LogInformation($" - Command: {settings.UnityPath} {settings.ArgumentString}");
59-
logger.LogInformation($" - WorkingDir: {settings.WorkingDirectory}");
60-
logger.LogInformation($" - LogFilePath: {settings.LogFilePath}");
61-
logger.LogInformation($" - Timeout: {settings.TimeOut}");
62-
var sw = Stopwatch.StartNew();
43+
logger.LogInformation($$"""
44+
Starting Unity Build.
45+
- Command: {{settings.UnityPath}} {{settings.ArgumentString}}
46+
- WorkingDir: {{settings.WorkingDirectory}}
47+
- LogFilePath: {{settings.LogFilePath}}
48+
- Timeout: {{settings.TimeOut}}
49+
""");
50+
var ts = settings.TimeProvider.GetTimestamp();
6351
using var process = Process.Start(new ProcessStartInfo()
6452
{
6553
FileName = settings.UnityPath,
@@ -86,14 +74,14 @@ public async Task BuildAsync(CancellationToken ct = default)
8674
if (File.Exists(settings.LogFilePath)) break;
8775

8876
// Log waiting message.
89-
if (sw.Elapsed.TotalSeconds > 10 && !waitingLongTime)
77+
if (settings.TimeProvider.GetElapsedTime(ts).TotalSeconds > 10 && !waitingLongTime)
9078
{
9179
waitingLongTime = true;
9280
logger.LogWarning("Waiting Unity creates log file takes long time, still waiting.");
9381
}
9482

9583
// Some large repository's first Unity launch takes huge wait time until log file generated. However waiting more than 5min would be too slow and unnatural.
96-
if (sw.Elapsed.TotalMinutes <= 5)
84+
if (settings.TimeProvider.GetElapsedTime(ts).TotalMinutes <= 5)
9785
{
9886
await Task.Delay(TimeSpan.FromMilliseconds(100), ct).ConfigureAwait(false);
9987
}
@@ -146,7 +134,7 @@ public async Task BuildAsync(CancellationToken ct = default)
146134
logger.LogInformation($"Stopping build. {ex.Message}");
147135
buildErrorCode = BuildErrorCode.ProcessImmediatelyExit;
148136
}
149-
catch (OperationCanceledException) when (sw.Elapsed.TotalMilliseconds > settings.TimeOut.TotalMilliseconds)
137+
catch (OperationCanceledException) when (settings.TimeProvider.GetElapsedTime(ts).TotalMilliseconds > settings.TimeOut.TotalMilliseconds)
150138
{
151139
// Timeout
152140
logger.LogInformation($"Stopping build. Timeout exceeded, {settings.TimeOut.TotalMinutes}min has been passed.");
@@ -175,8 +163,6 @@ public async Task BuildAsync(CancellationToken ct = default)
175163
}
176164
finally
177165
{
178-
sw.Stop();
179-
180166
if (buildErrorCode is BuildErrorCode.Success)
181167
{
182168
logger.LogInformation($"Unity Build successfully complete.");
@@ -185,7 +171,7 @@ public async Task BuildAsync(CancellationToken ct = default)
185171
{
186172
logger.LogInformation($"Unity Build failed, error code '{buildErrorCode}'.");
187173
}
188-
logger.LogInformation($"Build Elapsed Time {sw.Elapsed}");
174+
logger.LogInformation($"Build Elapsed Time {settings.TimeProvider.GetElapsedTime(ts)}");
189175

190176
// Unity's exit code 0 is not mean no error. Therefore, when Unity exitcode was 0 and UnityBuildRunner caught any exception, replace exitcode with custom error.
191177
ExitCode = unityProcessExitCode == 0 ? buildErrorCode.GetAttrubute<ErrorExitCodeAttribute>()?.ExitCode ?? unityProcessExitCode : unityProcessExitCode;

src/UnityBuildRunner.Core/DefaultErrorFilter.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
41
using System.Text.RegularExpressions;
52

63
namespace UnityBuildRunner.Core;

src/UnityBuildRunner.Core/DefaultSettings.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
1-
using System;
2-
using System.Collections.Generic;
31
using System.Diagnostics.CodeAnalysis;
4-
using System.IO;
5-
using System.Linq;
6-
using System.Threading;
72

83
namespace UnityBuildRunner.Core;
94

@@ -41,6 +36,10 @@ public interface ISettings
4136
/// UnityBuild timeout
4237
/// </summary>
4338
TimeSpan TimeOut { get; init; }
39+
/// <summary>
40+
/// Default Timeprovider to use
41+
/// </summary>
42+
TimeProvider TimeProvider { get; init; }
4443

4544
/// <summary>
4645
/// Create CancelltaionTokenSource from <see cref="ISettings"/>.
@@ -59,7 +58,7 @@ public interface ISettings
5958
/// <param name="LogFilePath"></param>
6059
/// <param name="WorkingDirectory"></param>
6160
/// <param name="TimeOut"></param>
62-
public record DefaultSettings(string[] Args, string ArgumentString, string UnityPath, string LogFilePath, string WorkingDirectory, TimeSpan TimeOut) : ISettings
61+
public record DefaultSettings(string[] Args, string ArgumentString, string UnityPath, string LogFilePath, string WorkingDirectory, TimeSpan TimeOut, TimeProvider TimeProvider) : ISettings
6362
{
6463
/// <summary>
6564
/// Validate Settings is correct.
@@ -134,7 +133,7 @@ public static DefaultSettings Parse(IReadOnlyList<string> args, string unityPath
134133
var workingDirectory = Directory.GetCurrentDirectory();
135134

136135
// Create settings
137-
var settings = new DefaultSettings(arguments, argumentString, unityPathFixed, logFilePath, workingDirectory, timeout);
136+
var settings = new DefaultSettings(arguments, argumentString, unityPathFixed, logFilePath, workingDirectory, timeout, TimeProvider.System);
138137

139138
// Validate settings
140139
settings.Validate();

src/UnityBuildRunner.Core/SimpleConsoleLogger.cs

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,39 +4,28 @@
44

55
namespace UnityBuildRunner.Core;
66

7-
public class SimpleConsoleLoggerProvider<T> : ILoggerProvider
7+
public class SimpleConsoleLoggerProvider : ILoggerProvider
88
{
9-
readonly SimpleConsoleLogger<T> logger;
10-
11-
public SimpleConsoleLoggerProvider()
12-
{
13-
logger = new SimpleConsoleLogger<T>();
14-
}
15-
169
public ILogger CreateLogger(string categoryName)
1710
{
18-
return logger;
11+
return new SimpleConsoleLogger(categoryName);
1912
}
2013

2114
public void Dispose()
2215
{
2316
}
2417
}
2518

26-
public class SimpleConsoleLogger<T> : ILogger<T>
19+
public class SimpleConsoleLogger(string categoryName) : ILogger
2720
{
28-
public SimpleConsoleLogger()
29-
{
30-
}
31-
3221
public IDisposable? BeginScope<TState>(TState state) where TState : notnull
3322
{
3423
return NullDisposable.Instance;
3524
}
3625

3726
public bool IsEnabled(LogLevel logLevel)
3827
{
39-
return true;
28+
return logLevel != LogLevel.None;
4029
}
4130

4231
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception? exception, Func<TState, Exception?, string> formatter)
@@ -45,7 +34,6 @@ public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Except
4534

4635
var msg = formatter(state, exception);
4736

48-
4937
if (!string.IsNullOrEmpty(msg))
5038
{
5139
Console.WriteLine(msg);
@@ -69,9 +57,9 @@ public void Dispose()
6957

7058
public static class SimpleConsoleLoggerExtensions
7159
{
72-
public static ILoggingBuilder AddSimpleConsole<T>(this ILoggingBuilder builder)
60+
public static ILoggingBuilder AddSimpleConsole(this ILoggingBuilder builder)
7361
{
74-
builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<ILoggerProvider, SimpleConsoleLoggerProvider<T>>());
62+
builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<ILoggerProvider, SimpleConsoleLoggerProvider>());
7563
return builder;
7664
}
7765
}
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
22
"profiles": {
3-
"UnityBuildRunner": {
3+
"UnityBuildRunner (help)": {
44
"commandName": "Project",
5-
"commandLineArgs": ""
5+
"commandLineArgs": "--help"
66
},
77
"UnityBuildRunner (unity-path)": {
88
"commandName": "Project",
9-
"commandLineArgs": "--unity-path \"C:/Program Files/Unity/Hub/Editor/2021.3.17f1/Editor/Unity.exe\" -quit -batchmode -nographics -silent-crashes -logfile log.log -buildTarget StandaloneWindows64 -projectPath ../../../../../sandbox/Sandbox.Unity -executeMethod BuildUnity.BuildGame"
9+
"commandLineArgs": "--unity-path \"C:/Program Files/Unity/Hub/Editor/6000.0.12f1/Editor/Unity.exe\" -quit -batchmode -nographics -silent-crashes -logfile log.log -buildTarget StandaloneWindows64 -projectPath ../../../../../sandbox/Sandbox.Unity -executeMethod BuildUnity.BuildGame"
1010
},
1111
"UnityBuildRunner (env)": {
1212
"commandName": "Project",
@@ -17,19 +17,19 @@
1717
},
1818
"UnityBuildRunner (-logFile -)": {
1919
"commandName": "Project",
20-
"commandLineArgs": "--unity-path \"C:/Program Files/Unity/Hub/Editor/2021.3.17f1/Editor/Unity.exe\" -quit -batchmode -nographics -silent-crashes -logfile - -buildTarget StandaloneWindows64 -projectPath ../../../../../sandbox/Sandbox.Unity -executeMethod BuildUnity.BuildGame"
20+
"commandLineArgs": "--unity-path \"C:/Program Files/Unity/Hub/Editor/6000.0.12f1/Editor/Unity.exe\" -quit -batchmode -nographics -silent-crashes -logfile - -buildTarget StandaloneWindows64 -projectPath ../../../../../sandbox/Sandbox.Unity -executeMethod BuildUnity.BuildGame"
2121
},
2222
"UnityBuildRunner (quote-slash)": {
2323
"commandName": "Project",
24-
"commandLineArgs": "--unity-path \"C:/Program Files/Unity/Hub/Editor/2021.3.17f1/Editor/Unity.exe\" -quit -batchmode -nographics -silent-crashes -logfile - -buildTarget StandaloneWindows64 -projectPath \"../../../../../sandbox/Sandbox.Unity/\" -executeMethod BuildUnity.BuildGame"
24+
"commandLineArgs": "--unity-path \"C:/Program Files/Unity/Hub/Editor/6000.0.12f1/Editor/Unity.exe\" -quit -batchmode -nographics -silent-crashes -logfile - -buildTarget StandaloneWindows64 -projectPath \"../../../../../sandbox/Sandbox.Unity/\" -executeMethod BuildUnity.BuildGame"
2525
},
2626
"UnityBuildRunner (quote)": {
2727
"commandName": "Project",
28-
"commandLineArgs": "--unity-path \"C:/Program Files/Unity/Hub/Editor/2021.3.17f1/Editor/Unity.exe\" -quit -batchmode -nographics -silent-crashes -logfile - -buildTarget StandaloneWindows64 -projectPath \"..\\..\\..\\..\\..\\sandbox/Sandbox.Unity\\\\\" -executeMethod BuildUnity.BuildGame"
28+
"commandLineArgs": "--unity-path \"C:/Program Files/Unity/Hub/Editor/6000.0.12f1/Editor/Unity.exe\" -quit -batchmode -nographics -silent-crashes -logfile - -buildTarget StandaloneWindows64 -projectPath \"..\\..\\..\\..\\..\\sandbox/Sandbox.Unity\\\\\" -executeMethod BuildUnity.BuildGame"
2929
},
3030
"UnityBuildRunner (quote-bad)": {
3131
"commandName": "Project",
32-
"commandLineArgs": "--unity-path \"C:/Program Files/Unity/Hub/Editor/2021.3.17f1/Editor/Unity.exe\" -quit -batchmode -nographics -silent-crashes -logfile - -buildTarget StandaloneWindows64 -projectPath \"..\\..\\..\\..\\..\\sandbox/Sandbox.Unity\\\" -executeMethod BuildUnity.BuildGame"
32+
"commandLineArgs": "--unity-path \"C:/Program Files/Unity/Hub/Editor/6000.0.12f1/Editor/Unity.exe\" -quit -batchmode -nographics -silent-crashes -logfile - -buildTarget StandaloneWindows64 -projectPath \"..\\..\\..\\..\\..\\sandbox/Sandbox.Unity\\\" -executeMethod BuildUnity.BuildGame"
3333
}
3434
}
3535
}

src/UnityBuildRunner/UnityBuildRunner.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
</PropertyGroup>
1212

1313
<ItemGroup>
14-
<ProjectReference Include="..\UnityBuildRunner.Core\UnityBuildRunner.Core.csproj" />
14+
<PackageReference Include="ConsoleAppFramework" />
1515
</ItemGroup>
1616

1717
<ItemGroup>
18-
<PackageReference Include="ConsoleAppFramework" />
18+
<ProjectReference Include="..\UnityBuildRunner.Core\UnityBuildRunner.Core.csproj" />
1919
</ItemGroup>
2020

2121
</Project>

0 commit comments

Comments
 (0)