81 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Linq;
 | |
| using UnityEditor;
 | |
| 
 | |
| namespace UnityBuilderAction.Input
 | |
| {
 | |
|   public class ArgumentsParser
 | |
|   {
 | |
|     static string EOL = Environment.NewLine;
 | |
|     static readonly string[] Secrets = { "androidKeystorePass", "androidKeyaliasName", "androidKeyaliasPass" };
 | |
| 
 | |
|     public static Dictionary<string, string> 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<string, string> providedArguments)
 | |
|     {
 | |
|       providedArguments = new Dictionary<string, string>();
 | |
|       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('-') : "";
 | |
|         bool secret = Secrets.Contains(flag);
 | |
|         string displayValue = secret ? "*HIDDEN*" : "\"" + value + "\"";
 | |
| 
 | |
|         // Assign
 | |
|         Console.WriteLine($"Found flag \"{flag}\" with value {displayValue}.");
 | |
|         providedArguments.Add(flag, value);
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 |