Skip to content

Commit 4d24320

Browse files
committed
Add logic to backup last built folder in manual mode
1 parent 0a49de6 commit 4d24320

File tree

2 files changed

+110
-25
lines changed

2 files changed

+110
-25
lines changed

Assets/Scripts/Editor/BuildScript.cs

+106-25
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.IO;
34
using System.Linq;
45
using JetBrains.Annotations;
56
using UnityEditor;
@@ -16,6 +17,8 @@ namespace UnityBuilderAction
1617
public static class BuildScript
1718
{
1819
private static readonly string Eol = Environment.NewLine;
20+
private const bool LogVerboseBatchMode = true;
21+
private const bool LogVerboseNonBatchMode = false;
1922

2023
private static readonly string[] Secrets =
2124
{ "androidKeystorePass", "androidKeyaliasName", "androidKeyaliasPass" };
@@ -49,16 +52,16 @@ public static void Build(string[] args)
4952
{
5053
EditorUserBuildSettings.buildAppBundle = options["customBuildPath"].EndsWith(".aab");
5154
if (options.TryGetValue("androidKeystoreName", out string keystoreName) &&
52-
!string.IsNullOrEmpty(keystoreName))
55+
!string.IsNullOrEmpty(keystoreName))
5356
PlayerSettings.Android.keystoreName = keystoreName;
5457
if (options.TryGetValue("androidKeystorePass", out string keystorePass) &&
55-
!string.IsNullOrEmpty(keystorePass))
58+
!string.IsNullOrEmpty(keystorePass))
5659
PlayerSettings.Android.keystorePass = keystorePass;
5760
if (options.TryGetValue("androidKeyaliasName", out string keyaliasName) &&
58-
!string.IsNullOrEmpty(keyaliasName))
61+
!string.IsNullOrEmpty(keyaliasName))
5962
PlayerSettings.Android.keyaliasName = keyaliasName;
6063
if (options.TryGetValue("androidKeyaliasPass", out string keyaliasPass) &&
61-
!string.IsNullOrEmpty(keyaliasPass))
64+
!string.IsNullOrEmpty(keyaliasPass))
6265
PlayerSettings.Android.keyaliasPass = keyaliasPass;
6366
break;
6467
}
@@ -72,7 +75,7 @@ public static void Build(string[] args)
7275
#endif
7376

7477
if (options.TryGetValue("tag", out string tagVersion) &&
75-
!string.IsNullOrEmpty(tagVersion))
78+
!string.IsNullOrEmpty(tagVersion))
7679
{
7780
string[] tagParameters = tagVersion.Split('-');
7881
if (tagParameters.Contains("minsize"))
@@ -128,19 +131,48 @@ public static void Build(string[] args)
128131
{
129132
buildPlayerOptions.options |= BuildOptions.AutoRunPlayer;
130133
}
134+
135+
var projectPath = Application.dataPath.Substring(0, Application.dataPath.Length - "/Assets".Length);
136+
BackupLastBuild($"{projectPath}/{options["customBuildPath"]}");
131137
}
132138

133139
// Custom build
134140
Build(buildTarget, options["customBuildPath"]);
135141
}
136142

143+
private static void BackupLastBuild(string buildPath)
144+
{
145+
if (Directory.Exists(buildPath))
146+
{
147+
string backupFolderPath = $"{buildPath}-Previous";
148+
if (Directory.Exists(backupFolderPath))
149+
{
150+
Directory.Delete(backupFolderPath, true);
151+
}
152+
Log($"Moving current build folder to backup location: {backupFolderPath}");
153+
Directory.Move(buildPath, backupFolderPath);
154+
}
155+
else if (File.Exists(buildPath))
156+
{
157+
string extension = Path.GetExtension(buildPath);
158+
string pathWithoutExtension = buildPath.Substring(0, buildPath.Length - extension.Length);
159+
string backupFilePath = $"{pathWithoutExtension}-Previous{extension}";
160+
if (File.Exists(backupFilePath))
161+
{
162+
File.Delete(backupFilePath);
163+
}
164+
Log($"Moving current build file to backup location: {backupFilePath}");
165+
File.Move(buildPath, backupFilePath);
166+
}
167+
}
168+
137169
private static void SetWebGlOptimization(string value)
138170
{
139171
#if UNITY_2019_4_OR_NEWER
140-
EditorUserBuildSettings.SetPlatformSettings(BuildPipeline.GetBuildTargetName(BuildTarget.WebGL),
172+
EditorUserBuildSettings.SetPlatformSettings(BuildPipeline.GetBuildTargetName(BuildTarget.WebGL),
141173
"CodeOptimization", value);
142174
#else
143-
Console.WriteLine($"Setting {nameof(SetWebGlOptimization)} not supported by this unity version");
175+
Log($"Setting {nameof(SetWebGlOptimization)} not supported by this unity version");
144176
#endif
145177
}
146178

@@ -150,13 +182,13 @@ private static Dictionary<string, string> GetValidatedOptions(string[] args)
150182

151183
if (!validatedOptions.TryGetValue("projectPath", out string _))
152184
{
153-
Console.WriteLine("Missing argument -projectPath");
185+
LogError("Missing argument -projectPath");
154186
EndBuild(110);
155187
}
156188

157189
if (!validatedOptions.TryGetValue("buildTarget", out string buildTarget))
158190
{
159-
Console.WriteLine("Missing argument -buildTarget");
191+
LogError("Missing argument -buildTarget");
160192
EndBuild(120);
161193
}
162194

@@ -167,19 +199,19 @@ private static Dictionary<string, string> GetValidatedOptions(string[] args)
167199

168200
if (!validatedOptions.TryGetValue("customBuildPath", out string _))
169201
{
170-
Console.WriteLine("Missing argument -customBuildPath");
202+
LogError("Missing argument -customBuildPath");
171203
EndBuild(130);
172204
}
173205

174206
const string defaultCustomBuildName = "TestBuild";
175207
if (!validatedOptions.TryGetValue("customBuildName", out string customBuildName))
176208
{
177-
Console.WriteLine($"Missing argument -customBuildName, defaulting to {defaultCustomBuildName}.");
209+
LogError($"Missing argument -customBuildName, defaulting to {defaultCustomBuildName}.");
178210
validatedOptions.Add("customBuildName", defaultCustomBuildName);
179211
}
180212
else if (customBuildName == "")
181213
{
182-
Console.WriteLine($"Invalid argument -customBuildName, defaulting to {defaultCustomBuildName}.");
214+
LogError($"Invalid argument -customBuildName, defaulting to {defaultCustomBuildName}.");
183215
validatedOptions.Add("customBuildName", defaultCustomBuildName);
184216
}
185217

@@ -190,10 +222,10 @@ private static void ParseCommandLineArguments(string[] args, out Dictionary<stri
190222
{
191223
providedArguments = new Dictionary<string, string>();
192224

193-
Console.WriteLine(
225+
LogVerbose(
194226
$"{Eol}" +
195227
$"###########################{Eol}" +
196-
$"# Parsing settings #{Eol}" +
228+
$"# Parsing settings #{Eol}" +
197229
$"###########################{Eol}" +
198230
$"{Eol}"
199231
);
@@ -213,7 +245,7 @@ private static void ParseCommandLineArguments(string[] args, out Dictionary<stri
213245
string displayValue = secret ? "*HIDDEN*" : "\"" + value + "\"";
214246

215247
// Assign
216-
Console.WriteLine($"Found flag \"{flag}\" with value {displayValue}.");
248+
LogVerbose($"Found flag \"{flag}\" with value {displayValue}.");
217249
providedArguments.Add(flag, value);
218250
}
219251
}
@@ -232,39 +264,46 @@ private static void Build(BuildTarget buildTarget, string filePath)
232264

233265
private static void ReportSummary(BuildSummary summary)
234266
{
235-
Console.WriteLine(
236-
$"{Eol}" +
267+
string summaryText = $"{Eol}" +
237268
$"###########################{Eol}" +
238-
$"# Build results #{Eol}" +
269+
$"# Build results #{Eol}" +
239270
$"###########################{Eol}" +
240271
$"{Eol}" +
241272
$"Duration: {summary.totalTime.ToString()}{Eol}" +
242273
$"Warnings: {summary.totalWarnings.ToString()}{Eol}" +
243274
$"Errors: {summary.totalErrors.ToString()}{Eol}" +
244275
$"Size: {summary.totalSize.ToString()} bytes{Eol}" +
245-
$"{Eol}"
246-
);
247-
}
276+
$"{Eol}";
277+
278+
if (summary.totalErrors == 0)
279+
{
280+
Log(summaryText);
281+
}
282+
else
283+
{
284+
LogError(summaryText);
285+
}
286+
}
248287

249288
private static void ExitWithResult(BuildResult result)
250289
{
251290
switch (result)
252291
{
253292
case BuildResult.Succeeded:
254-
Console.WriteLine("Build succeeded!");
293+
Log("Build succeeded!");
255294
EndBuild(0);
256295
break;
257296
case BuildResult.Failed:
258-
Console.WriteLine("Build failed!");
297+
LogError("Build failed!");
259298
EndBuild(101);
260299
break;
261300
case BuildResult.Cancelled:
262-
Console.WriteLine("Build cancelled!");
301+
LogError("Build cancelled!");
263302
EndBuild(102);
264303
break;
265304
case BuildResult.Unknown:
266305
default:
267-
Console.WriteLine("Build result is unknown!");
306+
LogError("Build result is unknown!");
268307
EndBuild(103);
269308
break;
270309
}
@@ -284,5 +323,47 @@ private static void EndBuild(int returnValue)
284323
}
285324
}
286325
}
326+
327+
private static void LogVerbose(string message)
328+
{
329+
if(Application.isBatchMode)
330+
{
331+
if (LogVerboseBatchMode)
332+
{
333+
Console.WriteLine(message);
334+
}
335+
}
336+
else
337+
{
338+
if (LogVerboseNonBatchMode)
339+
{
340+
Debug.Log(message);
341+
}
342+
}
343+
}
344+
345+
private static void Log(string message)
346+
{
347+
if(Application.isBatchMode)
348+
{
349+
Console.WriteLine(message);
350+
}
351+
else
352+
{
353+
Debug.Log(message);
354+
}
355+
}
356+
357+
private static void LogError(string message)
358+
{
359+
if(Application.isBatchMode)
360+
{
361+
Console.WriteLine(message);
362+
}
363+
else
364+
{
365+
Debug.LogError(message);
366+
}
367+
}
287368
}
288369
}

Assets/Scripts/Editor/BuildScriptMenu.cs

+4
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public static void BuildWebGLDefault()
3737
SetParameterValue("-autorunplayer", "true", ref parameters);
3838
SetParameterValue("-tag", tag, ref parameters);
3939
SetParameterValue("-customBuildPath", $"Builds/WebGL/{tag}", ref parameters);
40+
SetParameterValue("-customBuildName", tag, ref parameters);
4041
BuildWithParameters(parameters);
4142
}
4243

@@ -49,6 +50,7 @@ public static void BuildWebGLMinSize()
4950
SetParameterValue("-autorunplayer", "true", ref parameters);
5051
SetParameterValue("-tag", tag, ref parameters);
5152
SetParameterValue("-customBuildPath", $"Builds/WebGL/{tag}", ref parameters);
53+
SetParameterValue("-customBuildName", tag, ref parameters);
5254
BuildWithParameters(parameters);
5355
}
5456

@@ -61,6 +63,7 @@ public static void BuildWebGLDebug()
6163
SetParameterValue("-autorunplayer", "true", ref parameters);
6264
SetParameterValue("-tag", tag, ref parameters);
6365
SetParameterValue("-customBuildPath", $"Builds/WebGL/{tag}", ref parameters);
66+
SetParameterValue("-customBuildName", tag, ref parameters);
6467
BuildWithParameters(parameters);
6568
}
6669

@@ -73,6 +76,7 @@ public static void BuildWebGLWebGL2()
7376
SetParameterValue("-autorunplayer", "true", ref parameters);
7477
SetParameterValue("-tag", tag, ref parameters);
7578
SetParameterValue("-customBuildPath", $"Builds/WebGL/{tag}", ref parameters);
79+
SetParameterValue("-customBuildName", tag, ref parameters);
7680
BuildWithParameters(parameters);
7781
}
7882

0 commit comments

Comments
 (0)