public bool TryInitBuild(RequestContext context, Build build, string[] buildArgs) { if (_process != null) { RaiseCommonError("InitBuild: server is busy!", true); return(false); } for (var i = 0; i < buildArgs.Length; i++) { var curArg = buildArgs[i]; var argName = build.Args.ElementAtOrDefault(i); var argCheck = build.Checks.ElementAtOrDefault(i); if (!IsValidBuildArg(curArg, argCheck)) { RaiseCommonError($"InitBuild: argument '{argName}' is invalid: '{curArg}' don't maches by '{argCheck}'!", true); return(false); } } _logger.LogDebug($"InitBuild: \"{build.Name}\""); _build = build; _process = new BuildProcess(_loggerFactory, build); var convertedLogFile = ConvertArgValue(Project, _build, null, build.LogFile); LogFileChanged?.Invoke(convertedLogFile); OnInitBuild?.Invoke(context, _process); return(true); }
void ProcessBuild() { _logger.LogDebug("ProcessBuild"); var nodes = _build.Nodes; _process.StartBuild(_curTime); if (nodes.Count == 0) { _logger.LogError("ProcessBuild: No build nodes!"); _process.Abort(_curTime); } var tasks = InitTasks(nodes); foreach (var task in tasks) { _logger.LogDebug($"ProcessBuild: task: {tasks.IndexOf(task)}/{tasks.Count}"); task.Start(); task.Wait(); var result = task.Result; if (!result) { _logger.LogDebug($"ProcessBuild: failed command!"); _process.Abort(_curTime); } if (_process.IsAborted) { _logger.LogDebug($"ProcessBuild: aborted!"); break; } } LogFileChanged?.Invoke(null); _buildArgs = null; _build = null; _thread = null; _process = null; _taskStates = new ConcurrentDictionary <string, string>(); _logger.LogDebug("ProcessBuild: cleared"); }