Commit Graph

27 Commits

Author SHA1 Message Date
Ben Marsh
72a1a24ca4 Allow build commands to fail with an exit code, without throwing exceptions and dumping a callstack. GUBP nodes handle call print callstacks near to the point that they're thrown, but still need to do EC/temp storage clean-up work before the command can execute, so we don't want unneccessary spam by the generic exception handler.
[CL 2662576 by Ben Marsh in Main branch]
2015-08-20 09:46:59 -04:00
Ben Marsh
47c58ec57c Rename the ErrorCodes enum to ExitCode, and ErrorCodes.Error_Success to ExitCode.Success.
[CL 2662478 by Ben Marsh in Main branch]
2015-08-20 08:38:09 -04:00
Wes Hunt
de3ae73eb3 Reduce temp storage spam. Print UTC time in low when UAT starts.
[CL 2661691 by Wes Hunt in Main branch]
2015-08-19 17:04:29 -04:00
Wes Hunt
cefa87e4b7 Ionic.zip code import
* Moving Ionic.Zip source code into UE4 from UE4 source.
* Only one left should be in Binaries/DotNET.
* Moving TPS info to source location.
* Deleting several copies that were floating around.

Assembly Resolve Refactor
* Added AssemblyUtils.InstallAssemblyResolver to handle resolving of known assemblies that may not exist in the same folder as the referencing assembly.
* This is now installed by UAT and UBT, which should handle all needs to load Ionic.Zip and RPCUtility.exe from scripts that install into subfolders of Binaries/DotNET.
* Other assemblies can be added easily as necesary, centralizing the location where this is handled.
* Removed AssemblyResolver from RPCUtilHelper as UBT handles it automatically now.
* Removed Ionic.Zip references from projects that weren't really using it.
#codereview:ben.marsh

[CL 2646891 by Wes Hunt in Main branch]
2015-08-06 15:55:44 -04:00
Wes Hunt
585af51d15 TempStorage Refactor
GUBP High Level
* Temp Storage is zipped into a single archive per node now. This results in ~75% reduction in temp storage usage and network traffic, not to mention the per-file overhead.
* Temp Storage is in P:\\Builds\\{Game}\\TmpStore instead of P:\\Builds\\{Game}\\GUBP (to facilitate easier cleaning of this new structure).
* Temp Storage nodes are in subdirectories of {Branch}\\{CL}\\{NodeName} now instead of a flat directory structure that was hard to manually sift through.

GUBP Mid Level
* Removed -Store= and -StoreSuffix= test parameters.
* Added -NoZipTempStorage parameter to turn off temp storage zipping if necessary.
* Created GUBP.JobInfo class that collects info about the job as a whole to be passed around by GUBP. Mostly used by any code that need to interact with TempStorage.
* Created TempStorageNodeInfo that describes the necessary parameters to find the temp storage location for a node.
* Fully XML commented TempStorage.cs, and commented internals all major functions.
* Added a bunch of telemetry data for storing, retrieving, and cleaning shared temp storage.

UAT Mid Level
* Fixed a bug in Ionic.Zip that make ExtractAll() not work on Mono, checked in new DLLs.
* Added UAT parameter -UseLocalBuildStorage that allows you to test build storage stuff completely locally. Writes to Engine\\Saved\\LocalBuilds\\...

GUBP Low Level
* Refactored some GUBP startup code so temp vars would be limited in scope. Makes it easier to track the impact of refactoring these things.
* CullNodesForPreflight is only called for preflight builds.
* Refactored TempStorage.FindTempStorageManifests to use new TmpStore structure and harden the brittle string/path parsing it was doing. See the new TempStorage FindMatchingSharedTempStorageNodeCLs().
* Refactored TempStorage Saving and Loading to use XDocument instead of older XmlDocument. Removed a bunch of redundant checks.
* Use StripBaseDirectory and MakeRerootedFilePath to remove the brittle directory manipulation code. Directories no longer require a '/' at the end.
* Removed a few redundant caching layers in cleaning temp storage that try to ensure we don't clean a folder twice. None of them were necessary.
* Removed unused single-threaded copy code from temp storage.
* Updated Temp Storage unit test, and fully commented the logic behind it.

UAT Low Level
* UAT top level exception handler is now a single log line now to help parsers find the error.
* Removed several uses of FormatException as it doesn't display the entire exception chain, and is not as good as the default exception formatter.
* Removed ExceptionToString as it used FormatException, which was not a good precedent.
* Fixed several cases of exception propagation that was not properly chaining the inner exception.
* Refactored ThreadedCopyFiles to use Parallel.For because it was just as fast (if not faster) and much simpler to maintain.
* Removed the suffix from Robust_FileExists_NoExceptions because it's sole purpose in life WAS to throw exceptions!
* Added a bunch of XML doc comments to CommandUtils.
* Modernized some container manipulation and iteration to use IEnumerable and extension methods more appropriately.
* Added several @todos for other minor cleanup stuff that should happen eventually.
* Fixed some uses of String.Compare to use invariant culture.
#codereview:ben.marsh

[CL 2644846 by Wes Hunt in Main branch]
2015-08-05 10:22:11 -04:00
Wes Hunt
9f10de8554 Remove unnecessary var
[CL 2640726 by Wes Hunt in Main branch]
2015-07-31 14:49:46 -04:00
Wes Hunt
8211f9a97c Restor fallback for UAT trying to mount an NFS share from a 32-bit process. This requires a 64-bit OS to work, but it's actually generally fine for UAT to run in 32-bit. We now simply log the bit-ness of the process on startup for diagnostics.
#codereview:ben.marsh,richard.fawcett

[CL 2635301 by Wes Hunt in Main branch]
2015-07-28 09:18:24 -04:00
Wes Hunt
14b5318a8c Get UAT running as a 64-bit process again.
* As of .NET 4.5, the default for Any CPU is to "prefer 32-bit process", and you need to explicitly turn this off to require the process be run as 64-bit.
* See http://blogs.microsoft.co.il/sasha/2012/04/04/what-anycpu-really-means-as-of-net-45-and-visual-studio-11/ for details.
* UAT will now assert when Environment.Is64BitProcess is false on startup, as we essentially require 64-bit for certain scripts, and that's how we ran it before upgrading to .NET4.5.
* Also set default optimization options for the project, which were changed at some point.
* Finally, rolled back CL#2633880, which was trying to work around the fact that UAT was running 32-bit.
#codereview:richard.fawcett, ben.marsh

[CL 2634273 by Wes Hunt in Main branch]
2015-07-27 14:40:30 -04:00
Peter Sauerbrei
dc1d815f84 refactored the logging system for UAT/UBT to be more like UE4
we now use an enum similar to UE4 with Fatal, Error, Warning, Display, Log, Verbose, and VeryVerbose
Log will only go to the log file unless -verbose is passed on the command line
reduced some of the output from UAT to be Log only

[CL 2631062 by Peter Sauerbrei in Main branch]
2015-07-23 14:51:46 -04:00
Wes Hunt
c1672d4beb Remove Remove some redundant and unused functions;
* InternalUtils::ExecutingAssemblyLocation
* InternalUtils::ExecutingAssemblyDirectory
* InternalUtils::ExecutableVersion
* CommandUtils::WriteToFile (one overload not used)
* CommandUtils::ExeFilename
* CommandUtils::ExeDirectory
* CommandUtils::CurrentDirectory
Added:
* Tools.DotNETCommon.AssemblyUtils::ExecutableVersion

[CL 2629222 by Wes Hunt in Main branch]
2015-07-22 14:00:30 -04:00
Wes Hunt
506f7e64a4 UEB-260 - Break AutomationTool into AutomationUtils that all automation projects depend on, and AutomationTool, which essentially only contains the startup code.
* Remove ErrorReporter.Error, replace with AutomationException with Error Code.
* Move ErrorCodes to AutomationException.
* Don't return exit codes. Solely rely on exceptions to propagate exit codes.
* Remove MainProc delegate
* Remove setting of Environment.ExitCode as it is ignored when main returns an int.
* ShutdownLogging is nothrow, as all exceptions would be ignored anyway.
* Wrap all shutdown steps so further ones get a chance to run.
* Move HostPlatform.Initialize into the global try/catch block
#codereview:ben.marsh

[CL 2605826 by Wes Hunt in Main branch]
2015-06-30 11:40:05 -04:00
Peter Sauerbrei
df9cf40e72 addition of message to alert the user when they have not properly installed their certificates on the remote mac
UE-15490
#ios

[CL 2550177 by Peter Sauerbrei in Main branch]
2015-05-13 22:55:37 -04:00
Peter Sauerbrei
05e307eccd messaging for when instruments launch fails
UE-12395, UE-9979
#ios

[CL 2546258 by Peter Sauerbrei in Main branch]
2015-05-11 19:34:55 -04:00
Wes Hunt
012e45b913 UBT Utils.cs (New logging system)
* Allows us to use built-in Trace providers (console, file, etc) directly and still use our custom formatting.
* Fat comments explaining why Trace.WriteXXX functions should not be used directly in our system.
* Fixes thread safety by using Trace.WriteXXX under the hood after formatting, which uses a global lock (except on Mono, where a bug appears to be preventing this. Simulating the call on that platform).
* No need for TraceEvent overloads, which saves us the extra parameter cruft.
* Removed non-varargs overloads of Log functions (technically a bit slower, but these are already small messages).
* No longer needed VerbosityFilter and ConsoleListener classes.
* Avoid calling GetSource() if we aren't outputting the source.
* Avoid formatting the string if it won't pass the verbosity level.
* Consolidated all of UAT and UBT options into this class, so they could fully share the implementation.

UBT BuildConfiguration.cs
* Added LogFilename (and --log=<file> arg) that enables logging to a file.
* Added static ctor guard that asserts if someone tries to read a config before we have loaded config files and parsed config-override commandlines. It's a poor man's hack, but better than nothing!

UBT UEBuildConfiguration.cs
* Same static ctor guard as above.

UBT UnrealBuildTools.cs (initialization refactoring)
* In general I tried to de-mystify some of the rationale behind our startup code via fat comments.
* Broke main into 3 stages:
1. "early code" that should not try to read a config value.
  * Very little code here. Mostly setting the current directory.
  * Does an early init of logging to ensure logging is around, but config values won't be ready.
2. "Init Configuration code" that loads config files and parses command lines that may override them.
  * I isolated two locations in startup that parsed long sets of switches and moved ones that trivially affected BuildConfiguration and UEBuildConfiguration in here. Those two locations seemed to have mostly copies of the same switches, indicating serious param parsing issues at some point in time.
  * This allows switches to override config files more easily than the patchwork of re-parsing that was currently used (particularly for -verbose).
  * I did a cursory examination of later code that indicated this double (actually, triple) parsing was no longer necessary with the refactors above. Any insight into why things may have ended up this way would be helpful.
3. "Post Init code" that is actually the meat of UBT.
  * I left this code largely untouched.
  * Removed 2 of 3 different command line logging statements.
  * Removed two redundant parses of config overrides (ParseBuildConfigurationFlags).
* Guarded all of main in a try/catch block to ensure no exceptions can leak from UBT without returning a valid error code. It ALMOST already did this, but only covered the part surrounded by the Mutex.
* There was a perplexing bit that redundantly called XmlConfigLoader.Reset<> (line 683) that I struggled to understand. It turns out UEBuildConfiguration was sensitive to the current directory being set before files were loaded, and the old code called XmlConfigLoader.Init() super early, which required it to be called again after the current directory was set (see UEBuldConfiguration.UEThirdPartySourceDirectory for the cause). After my changes, I verified as best I could that these calls are no longer needed and removed them.

XmlConfigLoader.cs
* Add support for Properties in XmlConfigLoader.

AutomationTool Program.cs
* Guard logging shutdown code in try/finally so it can't be missed.

AutomationTool Log.cs
* Uses new logging system from UBT
* Removed unnecessary classes (VerbosityFilter, AutomationConsoleTraceListener, and AutomationFileTraceListener)
* Console trace logic is handled by UBT code now, moved UTF8Output handling to InitLogging.
* A custom TraceListener for file logging was unnecessary.
  * Logic to handle creating the log file and retry loops was move into InitLogging, and the result passed to a regular TextFileTraceListener.
  * Logic to handle copying the log on shutdown was moved to a ShutdownLogging function.
#codereview:robert.manuszewski,michael.trepka,kellan.carr

[CL 2526245 by Wes Hunt in Main branch]
2015-04-26 18:19:28 -04:00
Kellan Carr
c7ea0162a5 build script, don't try and kill processes on mac #codereview Michael.Trepka
[CL 2464427 by Kellan Carr in Main branch]
2015-02-27 15:47:09 -05:00
Terence Burns
6f98decbcd UE-8433
Added an error code for missing ue4game binaries when packaging a non code project.
Added a check in main frame actions to determine whether we display a dialog with the error message in it.

Fix for incorrect IOS stub path being logged
Fix for incorrect Android apk path being generated for non ue4game renames in ::GetFinalApkName

[CL 2427458 by Terence Burns in Main branch]
2015-02-01 12:33:30 -05:00
Ben Marsh
149375b14b Update copyright notices to 2015.
[CL 2379638 by Ben Marsh in Main branch]
2014-12-07 19:09:38 -05:00
Daniel Lamb
a8e869f622 Added nicer error when staging fails to copy from launch on.
[CL 2344892 by Daniel Lamb in Main branch]
2014-10-30 10:12:52 -04:00
Jack Porter
41e7c27325 [MMVP-74] Android packaging / deployment error reporting
[CL 2294967 by Jack Porter in Main branch]
2014-09-12 06:23:49 -04:00
Ben Marsh
861c999223 Generate an aggregate UAT project file, which adds references to all the other automation projects. Allows rebuilding and debugging directly from the IDE.
[CL 2277801 by Ben Marsh in Main branch]
2014-08-29 12:25:29 -04:00
Peter Sauerbrei
51fa18631b addition of errors to Launch On, Package, and Cook analytics
TTP341794
#ue4
#analytics

[CL 2240496 by Peter Sauerbrei in Main branch]
2014-08-01 20:30:13 -04:00
Josh Adams
aa3fabd4f4 - SSH/Rsync can now be used in UBT, but is not currently recommended yet (one step is much slower, and IPhonePackager issues)
- Integrated IPhonePackager code directly into IOS Automation (this is not 100% working yet, it's a work-in-progress). Original IPP still in same place untouched
- Added a return code to RunLocalProcess
- Added IPhonePackager UAT script that will pass along params to the internal IPP code (RunUAT IPhonePackager -cmd="<ipp commandline here>" [-nocompile])
#codereview Robert.Manuszewski,peter.sauerbrei

[CL 2123325 by Josh Adams in Main branch]
2014-07-01 10:58:33 -04:00
Robert Manuszewski
4365584669 UAT: A few tweaks to prevent blocking operations on app domain unload
[CL 2073174 by Robert Manuszewski in Main branch]
2014-05-14 14:52:20 -04:00
Robert Manuszewski
6072806f3e UAT: Another attempt to fix EC hangs. Re-enabling automated tests in GUBP
#codereview gil.gribb

[CL 2065776 by Robert Manuszewski in Main branch]
2014-05-07 13:10:24 -04:00
Robert Manuszewski
9fde9e92e2 #UE4 - UAT: More logging when when exiting
[CL 2044130 by Robert Manuszewski in Main branch]
2014-04-23 18:25:41 -04:00