From ad65b0ece4a117982691f8c397647ca7dca8922d Mon Sep 17 00:00:00 2001 From: Webber Date: Wed, 22 Apr 2020 00:03:20 +0200 Subject: [PATCH] Abstract out the argument parser --- .../Assets/Editor/Input/ArgumentsParser.cs | 76 +++++++++++++++++++ .../Editor/Input/ArgumentsParser.cs.meta | 3 + 2 files changed, 79 insertions(+) create mode 100644 action/default-build-script/Assets/Editor/Input/ArgumentsParser.cs create mode 100644 action/default-build-script/Assets/Editor/Input/ArgumentsParser.cs.meta diff --git a/action/default-build-script/Assets/Editor/Input/ArgumentsParser.cs b/action/default-build-script/Assets/Editor/Input/ArgumentsParser.cs new file mode 100644 index 00000000..2e29c0f3 --- /dev/null +++ b/action/default-build-script/Assets/Editor/Input/ArgumentsParser.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using UnityEditor; + +namespace UnityBuilderAction.Input +{ + public class ArgumentsParser + { + static string EOL = Environment.NewLine; + + public static Dictionary GetValidatedOptions() + { + ParseCommandLineArguments(out var validatedOptions); + + if (!validatedOptions.TryGetValue("projectPath", out var projectPath)) { + Console.WriteLine("Missing argument -projectPath"); + EditorApplication.Exit(110); + } + + if (!validatedOptions.TryGetValue("buildTarget", out var buildTarget)) { + Console.WriteLine("Missing argument -buildTarget"); + EditorApplication.Exit(120); + } + + if (!Enum.IsDefined(typeof(BuildTarget), buildTarget)) { + EditorApplication.Exit(121); + } + + if (!validatedOptions.TryGetValue("customBuildPath", out var customBuildPath)) { + Console.WriteLine("Missing argument -customBuildPath"); + EditorApplication.Exit(130); + } + + const string defaultCustomBuildName = "TestBuild"; + if (!validatedOptions.TryGetValue("customBuildName", out var customBuildName)) { + Console.WriteLine($"Missing argument -customBuildName, defaulting to {defaultCustomBuildName}."); + validatedOptions.Add("customBuildName", defaultCustomBuildName); + } else if (customBuildName == "") { + Console.WriteLine($"Invalid argument -customBuildName, defaulting to {defaultCustomBuildName}."); + validatedOptions.Add("customBuildName", defaultCustomBuildName); + } + + return validatedOptions; + } + + static void ParseCommandLineArguments(out Dictionary providedArguments) + { + providedArguments = new Dictionary(); + string[] args = Environment.GetCommandLineArgs(); + + Console.WriteLine( + $"{EOL}" + + $"###########################{EOL}" + + $"# Parsing settings #{EOL}" + + $"###########################{EOL}" + + $"{EOL}" + ); + + // Extract flags with optional values + for (int current = 0, next = 1; current < args.Length; current++, next++) { + // Parse flag + bool isFlag = args[current].StartsWith("-"); + if (!isFlag) continue; + string flag = args[current].TrimStart('-'); + + // Parse optional value + bool flagHasValue = next < args.Length && !args[next].StartsWith("-"); + string value = flagHasValue ? args[next].TrimStart('-') : ""; + + // Assign + Console.WriteLine($"Found flag \"{flag}\" with value \"{value}\"."); + providedArguments.Add(flag, value); + } + } + } +} diff --git a/action/default-build-script/Assets/Editor/Input/ArgumentsParser.cs.meta b/action/default-build-script/Assets/Editor/Input/ArgumentsParser.cs.meta new file mode 100644 index 00000000..93f74cb6 --- /dev/null +++ b/action/default-build-script/Assets/Editor/Input/ArgumentsParser.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 46d2ec4a86604575be2b2d02b0df7b74 +timeCreated: 1587503354 \ No newline at end of file