private static bool BuildDepsParallel(ModulesOrder modulesOrder, BuiltInfoStorage builtStorage, List <Dep> modulesToBuild, ModuleBuilder builder) { var parallelBuilder = new ParallelBuilder(modulesOrder.ConfigsGraph); var tasks = new List <Task>(); var builtCount = 1; for (int i = 0; i < Helper.MaxDegreeOfParallelism; i++) { tasks.Add(Task.Run(() => { while (true) { var dep = parallelBuilder.TryStartBuild(); if (dep == null) { return; } if (dep.Equals(modulesOrder.BuildOrder.LastOrDefault())) { parallelBuilder.EndBuild(dep); continue; } if (NoNeedToBuild(dep, modulesToBuild)) { parallelBuilder.EndBuild(dep); lock (builtStorage) builtStorage.AddBuiltModule(dep, modulesOrder.CurrentCommitHashes); continue; } ConsoleWriter.WriteProgress($"{dep.ToBuildString(),-49} {$"{builtCount}/{modulesToBuild.Count}",10}"); var success = builder.Build(dep); parallelBuilder.EndBuild(dep, !success); if (success) { lock (builtStorage) { builtStorage.AddBuiltModule(dep, modulesOrder.CurrentCommitHashes); builtCount++; } } } })); } Task.WaitAll(tasks.ToArray()); builtStorage.Save(); Log.LogDebug("msbuild time: " + new TimeSpan(ModuleBuilder.TotalMsbuildTime)); return(!parallelBuilder.IsFailed); }
protected override int Execute() { var cwd = Directory.GetCurrentDirectory(); var moduleName = Path.GetFileName(cwd); configuration = string.IsNullOrEmpty(configuration) ? "full-build" : configuration; var shellRunner = new ShellRunner(LogManager.GetLogger <ShellRunner>()); var cleaner = new Cleaner(shellRunner); var builder = new ModuleBuilder(Log, buildSettings); var builderInitTask = Task.Run(() => builder.Init()); var modulesOrder = new BuildPreparer(Log).GetModulesOrder(moduleName, configuration ?? "full-build"); var modulesToBuild = modulesOrder.UpdatedModules; if (rebuild) { modulesToBuild = modulesOrder.BuildOrder.ToList(); } if (modulesToBuild.Count > 0 && modulesToBuild[modulesToBuild.Count - 1].Name == moduleName) { modulesToBuild.RemoveAt(modulesToBuild.Count - 1); //remove root } var builtStorage = BuiltInfoStorage.Deserialize(); foreach (var dep in modulesToBuild) { builtStorage.RemoveBuildInfo(dep.Name); } builderInitTask.Wait(); if (FeatureFlags.CleanBeforeBuild || buildSettings.CleanBeforeBuild) { TryCleanModules(modulesToBuild, cleaner); } TryNugetRestore(modulesToBuild, builder); var isSuccessful = parallel ? BuildDepsParallel(modulesOrder, builtStorage, modulesToBuild, builder) : BuildDepsSequential(modulesOrder, builtStorage, modulesToBuild, builder); return(isSuccessful ? 0 : -1); }
protected override int Execute() { var cwd = Directory.GetCurrentDirectory(); var moduleName = Path.GetFileName(cwd); configuration = configuration ?? "full-build"; if (!new ConfigurationParser(new FileInfo(cwd)).ConfigurationExists(configuration)) { ConsoleWriter.WriteError($"Configuration '{configuration}' was not found in {moduleName}."); return(-1); } var shellRunner = new ShellRunner(LogManager.GetLogger <ShellRunner>()); var cleaner = new Cleaner(shellRunner); var builder = new ModuleBuilder(Log, buildSettings); var builderInitTask = Task.Run(() => builder.Init()); var modulesOrder = new BuildPreparer(Log).GetModulesOrder(moduleName, configuration); var builtStorage = BuiltInfoStorage.Deserialize(); builtStorage.RemoveBuildInfo(moduleName); builderInitTask.Wait(); var module = new Dep(moduleName, null, configuration); if (FeatureFlags.CleanBeforeBuild || buildSettings.CleanBeforeBuild) { if (cleaner.IsNetStandard(module)) { cleaner.Clean(module); } } BuildDeps.TryNugetRestore(new List <Dep> { module }, builder); if (!builder.Build(module)) { builtStorage.Save(); return(-1); } builtStorage.AddBuiltModule(module, modulesOrder.CurrentCommitHashes); builtStorage.Save(); return(0); }
protected override int Execute() { var cwd = Directory.GetCurrentDirectory(); var moduleName = Path.GetFileName(cwd); configuration = configuration ?? "full-build"; List <Dep> modulesToUpdate; List <Dep> topSortedDeps; Dictionary <string, string> currentCommitHases; if (!new ConfigurationParser(new FileInfo(cwd)).ConfigurationExists(configuration)) { ConsoleWriter.WriteError($"Configuration '{configuration}' was not found in {moduleName}."); return(-1); } var builder = new ModuleBuilder(Log, buildSettings); var builderInitTask = Task.Run(() => builder.Init()); new BuildPreparer(Log).GetModulesOrder(moduleName, configuration, out topSortedDeps, out modulesToUpdate, out currentCommitHases); var builtStorage = BuiltInfoStorage.Deserialize(); builtStorage.RemoveBuildInfo(moduleName); builderInitTask.Wait(); var module = new Dep(moduleName, null, configuration); BuildDeps.TryNugetRestore(new List <Dep> { module }, builder); if (!builder.Build(module)) { builtStorage.Save(); return(-1); } builtStorage.AddBuiltModule(module, currentCommitHases); builtStorage.Save(); return(0); }
private static bool BuildDepsSequential(ModulesOrder modulesOrder, BuiltInfoStorage builtStorage, List <Dep> modulesToBuild, ModuleBuilder builder) { var built = 1; for (var i = 0; i < modulesOrder.BuildOrder.Count - 1; i++) { var dep = modulesOrder.BuildOrder[i]; if (NoNeedToBuild(dep, modulesToBuild)) { builtStorage.AddBuiltModule(dep, modulesOrder.CurrentCommitHashes); continue; } ConsoleWriter.WriteProgress($"{dep.ToBuildString(),-49} {$"{built}/{modulesToBuild.Count}",10}"); try { if (!builder.Build(dep)) { builtStorage.Save(); return(false); } } catch (Exception) { builtStorage.Save(); throw; } builtStorage.AddBuiltModule(dep, modulesOrder.CurrentCommitHashes); built++; } builtStorage.Save(); Log.LogDebug("msbuild time: " + new TimeSpan(ModuleBuilder.TotalMsbuildTime)); return(true); }
protected override int Execute() { var cwd = Directory.GetCurrentDirectory(); var moduleName = Path.GetFileName(cwd); configuration = string.IsNullOrEmpty(configuration) ? "full-build" : configuration; List <Dep> modulesToBuild; List <Dep> topSortedDeps; Dictionary <string, string> currentCommitHases; new BuildPreparer(Log).GetModulesOrder(moduleName, configuration ?? "full-build", out topSortedDeps, out modulesToBuild, out currentCommitHases); if (rebuild) { modulesToBuild = topSortedDeps; } var builtStorage = BuiltInfoStorage.Deserialize(); foreach (var dep in modulesToBuild) { builtStorage.RemoveBuildInfo(dep.Name); } var builder = new ModuleBuilder(Log, buildSettings); if (restore) { TryNugetRestore(modulesToBuild, builder); } int built = 1; for (var i = 0; i < topSortedDeps.Count - 1; i++) { var dep = topSortedDeps[i]; if (NoNeedToBuild(dep, modulesToBuild)) { builtStorage.AddBuiltModule(dep, currentCommitHases); continue; } ConsoleWriter.WriteProgress($"{dep.ToBuildString(),-49} {$"{built}/{modulesToBuild.Count - 1}",10}"); try { if (!builder.Build(dep)) { builtStorage.Save(); return(-1); } } catch (Exception) { builtStorage.Save(); throw; } builtStorage.AddBuiltModule(dep, currentCommitHases); built++; } builtStorage.Save(); Log.Debug("msbuild time: " + ModuleBuilder.TotalMsbuildTime); return(0); }