public static int Main(string[] args) { TargetTree targetTree = new TargetTree(); BuildTargets.FillBuildTargets(targetTree); int testsRunCounter = 0; targetTree.AddTarget("rebuild") .SetAsDefault() .SetDescription("Rebuilds the whole project") .DependsOn("compile", "fxcop", "tests", "package"); targetTree.GetTarget("fetch.build.version") .Do(TargetFetchBuildVersion); targetTree.AddTarget("tests") .SetDescription("Runs unit tests") .Do(r => { BuildTargets.TargetRunTests(r, "Detergent.Tests", null, ref testsRunCounter); }).DependsOn("load.solution"); targetTree.AddTarget("package") .SetDescription("Packages the build") .Do(TargetPackage).DependsOn("load.solution", "fetch.build.version"); targetTree.AddTarget("nuget") .SetDescription("Produces NuGet packages for reusable components and publishes them to the NuGet server") .Do(c => { TargetNuGet(c, "Detergent"); }).DependsOn("fetch.build.version"); using (TaskSession session = new TaskSession(new SimpleTaskContextProperties(), args, targetTree)) { BuildTargets.FillDefaultProperties(session); session.Start(BuildTargets.OnBuildFinished); session.AddLogger(new MulticoloredConsoleLogger(Console.Out)); //session.Properties.Set(BuildProps.TargetDotNetVersion, "v4.0.30319"); //session.Properties.Set(BuildProps.TargetDotNetVersionForGallio, "v4.0.30319"); session.Properties.Set(BuildProps.CompanyName, CompanyName); session.Properties.Set(BuildProps.CompanyCopyright, CompanyCopyright); session.Properties.Set(BuildProps.GallioEchoPath, "lib/Gallio-3.2.750/bin/Gallio.Echo.exe"); session.Properties.Set(BuildProps.ProductId, "Detergent"); session.Properties.Set(BuildProps.ProductName, "Detergent"); session.Properties.Set(BuildProps.SolutionFileName, "Detergent.2010.sln"); session.Properties.Set(BuildProps.VersionControlSystem, VersionControlSystem.Subversion); try { // actual run if (args.Length == 0) targetTree.RunTarget(session, targetTree.DefaultTarget.TargetName); else { string targetName = args[0]; if (false == targetTree.HasTarget(targetName)) { session.WriteError("ERROR: The target '{0}' does not exist", targetName); targetTree.RunTarget(session, "help"); return 2; } targetTree.RunTarget(session, args[0]); } session.Complete(); return 0; } catch (TaskExecutionException) { return 1; } catch (Exception ex) { Console.WriteLine(ex); return 1; } } }
public static (List <string> targetsToRun, bool unknownTarget, List <string> notFoundTargets) ParseCmdLineArgs(List <string> mainCommands, TargetTree targetTree) { if (mainCommands == null || mainCommands.Count == 0) { return(null, false, null); } if (targetTree.HasAllTargets(mainCommands, out var notFoundTargets)) { return(mainCommands, false, null); } return(new List <string> { FlubuTargets.Help }, true, notFoundTargets); }
async Task <string> BuildTargetTree(TargetTree tt) { var treeFrom = await gateway.TreeFrom(tt.Current, false); NewTree newTree; if (treeFrom == null) { newTree = new NewTree(); } else { var destinationParentTree = treeFrom.Item2; newTree = BuildNewTreeFrom(destinationParentTree); } foreach (var st in tt.SubTreesToUpdate.Values) { RemoveTreeItemFrom(newTree, st.Current.Name); var sha = await BuildTargetTree(st); if (sha == TargetTree.EmptyTreeSha) { // Resulting tree contains no items continue; } var newTreeItem = new NewTreeItem { Mode = "040000", Path = st.Current.Name, Sha = sha, Type = TreeType.Tree }; newTree.Tree.Add(newTreeItem); } foreach (var l in tt.LeavesToDrop.Values) { RemoveTreeItemFrom(newTree, l.Name); } foreach (var l in tt.LeavesToCreate.Values) { var destination = l.Item1; var source = l.Item2; RemoveTreeItemFrom(newTree, destination.Name); await SyncLeaf(source, destination); switch (source.Type) { case TreeEntryTargetType.Blob: var sourceBlobItem = (await gateway.BlobFrom(source, true)).Item2; newTree.Tree.Add( new NewTreeItem { Mode = sourceBlobItem.Mode, Path = destination.Name, Sha = source.Sha, Type = TreeType.Blob }); break; case TreeEntryTargetType.Tree: newTree.Tree.Add( new NewTreeItem { Mode = "040000", Path = destination.Name, Sha = source.Sha, Type = TreeType.Tree }); break; default: throw new NotSupportedException(); } } if (newTree.Tree.Count == 0) { return(TargetTree.EmptyTreeSha); } return(await gateway.CreateTree(newTree, tt.Current.Owner, tt.Current.Repository)); }
public async Task <int> ExecuteAsync() { var version = Assembly.GetEntryAssembly().GetCustomAttribute <AssemblyFileVersionAttribute>().Version; if (_args.DisableColoredLogging) { FlubuConsoleLogger.DisableColloredLogging = true; } _log.LogInformation($"Flubu v.{version}"); if (_args.Help) { return(1); } if (_args.MainCommands.Count == 1 && _args.MainCommands.First().Equals("setup", StringComparison.OrdinalIgnoreCase)) { TargetTree.SetupFlubu(); return(0); } try { int result = 0; do { IBuildScript script = null; try { if (!_flubuSession.InteractiveMode) { script = await _scriptLoader.FindAndCreateBuildScriptInstanceAsync(_args); } else { script = await _scriptLoader.FindAndCreateBuildScriptInstanceAsync(_flubuSession .InteractiveArgs); } } catch (BuildScriptLocatorException) { if (!_args.InteractiveMode && !_flubuSession.InteractiveMode) { throw; } await SimpleFlubuInteractiveMode(script); } _flubuSession.FlubuHelpText = FlubuHelpText; _flubuSession.ScriptArgs = _args.ScriptArguments; _flubuSession.TargetTree.ResetTargetTree(); //// ReSharper disable once PossibleNullReferenceException if (script != null) { result = script.Run(_flubuSession); } }while (_flubuSession.InteractiveMode && ReloadCommands.Contains(_flubuSession.InteractiveArgs.MainCommands[0], StringComparer.OrdinalIgnoreCase)); return(result); } catch (TaskExecutionException e) { if (_args.RethrowOnException) { throw; } _log.Log(LogLevel.Error, 1, $"EXECUTION FAILED:\r\n{e.ToString()}", null, (t, ex) => t); return(StatusCodes.BuildScriptNotFound); } catch (FlubuException e) { if (_args.RethrowOnException) { throw; } var str = _args.Debug ? e.ToString() : e.Message; _log.Log(LogLevel.Error, 1, $"EXECUTION FAILED:\r\n{str}", null, (t, ex) => t); return(StatusCodes.BuildScriptNotFound); } catch (Exception e) { if (_args.RethrowOnException) { throw; } var str = _args.Debug ? e.ToString() : e.Message; _log.Log(LogLevel.Error, 1, $"EXECUTION FAILED:\r\n{str}", null, (t, ex) => t); return(3); } }
private static (List <string> targetsToRun, bool unknownTarget, List <string> notFoundTargets) ParseCmdLineArgs(ITaskContextInternal context, TargetTree targetTree) { if (context.Args.MainCommands == null || context.Args.MainCommands.Count == 0) { return(null, false, null); } if (targetTree.HasAllTargets(context.Args.MainCommands, out var notFoundTargets)) { return(context.Args.MainCommands, false, null); } return(new List <string> { "help" }, true, notFoundTargets); }
public virtual async Task <int> ExecuteAsync() { if (_args.DisableColoredLogging) { FlubuConsoleLogger.DisableColloredLogging = true; } if (_args.Help) { return(1); } if (_args.MainCommands.Count == 1 && _args.MainCommands.First().Equals("setup", StringComparison.OrdinalIgnoreCase)) { TargetTree.SetupFlubu(); return(0); } try { int result = 0; do { IBuildScript script = null; try { if (!_flubuSession.InteractiveMode) { script = await _scriptProvider.GetBuildScriptAsync(_args); } else { script = await _scriptProvider.GetBuildScriptAsync(_flubuSession .InteractiveArgs, true); } } catch (BuildScriptLocatorException) { if (!_args.InteractiveMode && !_flubuSession.InteractiveMode) { throw; } _flubuSession.LogInfo("Build script not found."); script = await SimpleFlubuInteractiveMode(script); } _flubuSession.ScriptArgs = _args.ScriptArguments; _flubuSession.InteractiveMode = _args.InteractiveMode; _flubuSession.InteractiveArgs = _args; _flubuSession.TargetTree.BuildScript = script; _flubuSession.Properties.Set(BuildProps.IsWebApi, _args.IsWebApi); _flubuSession.TargetTree.ResetTargetTree(); if (script != null) { if (_flubuSession.InteractiveMode) { FlubuInteractiveMode(_flubuSession, script); } else { result = script.Run(_flubuSession); } } }while (_flubuSession.InteractiveMode && InternalCommands.ReloadCommands.Contains(_flubuSession.InteractiveArgs.MainCommands[0], StringComparer.OrdinalIgnoreCase)); return(result); } catch (TaskExecutionException e) { if (_args.RethrowOnException) { throw; } _log.Log(LogLevel.Error, 1, $"EXECUTION FAILED:\r\n{e}", null, (t, ex) => t); return(StatusCodes.BuildScriptNotFound); } catch (FlubuException e) { if (_args.RethrowOnException) { throw; } var str = _args.Debug ? e.ToString() : e.Message; _log.Log(LogLevel.Error, 1, $"EXECUTION FAILED:\r\n{str}", null, (t, ex) => t); return(StatusCodes.BuildScriptNotFound); } catch (Exception e) { if (_args.RethrowOnException) { throw; } var str = _args.Debug ? e.ToString() : e.Message; _log.Log(LogLevel.Error, 1, $"EXECUTION FAILED:\r\n{str}", null, (t, ex) => t); return(3); } }
public static int Main(string[] args) { TargetTree targetTree = new TargetTree(); BuildTargets.FillBuildTargets(targetTree); int testsRunCounter = 0; targetTree.AddTarget("rebuild") .SetAsDefault() .SetDescription("Rebuilds the whole project") .DependsOn("compile", "fxcop", "tests", "package"); targetTree.GetTarget("fetch.build.version") .Do(TargetFetchBuildVersion); targetTree.AddTarget("tests") .SetDescription("Runs unit tests") .Do(r => { BuildTargets.TargetRunTests(r, "Detergent.Tests", null, ref testsRunCounter); }).DependsOn("load.solution"); targetTree.AddTarget("package") .SetDescription("Packages the build") .Do(TargetPackage).DependsOn("load.solution", "fetch.build.version"); targetTree.AddTarget("nuget") .SetDescription("Produces NuGet packages for reusable components and publishes them to the NuGet server") .Do(c => { TargetNuGet(c, "Detergent"); }).DependsOn("fetch.build.version"); using (TaskSession session = new TaskSession(new SimpleTaskContextProperties(), args, targetTree)) { BuildTargets.FillDefaultProperties(session); session.Start(BuildTargets.OnBuildFinished); session.AddLogger(new MulticoloredConsoleLogger(Console.Out)); //session.Properties.Set(BuildProps.TargetDotNetVersion, "v4.0.30319"); //session.Properties.Set(BuildProps.TargetDotNetVersionForGallio, "v4.0.30319"); session.Properties.Set(BuildProps.CompanyName, CompanyName); session.Properties.Set(BuildProps.CompanyCopyright, CompanyCopyright); session.Properties.Set(BuildProps.GallioEchoPath, "lib/Gallio-3.2.750/bin/Gallio.Echo.exe"); session.Properties.Set(BuildProps.ProductId, "Detergent"); session.Properties.Set(BuildProps.ProductName, "Detergent"); session.Properties.Set(BuildProps.SolutionFileName, "Detergent.2010.sln"); session.Properties.Set(BuildProps.VersionControlSystem, VersionControlSystem.Subversion); try { // actual run if (args.Length == 0) { targetTree.RunTarget(session, targetTree.DefaultTarget.TargetName); } else { string targetName = args[0]; if (false == targetTree.HasTarget(targetName)) { session.WriteError("ERROR: The target '{0}' does not exist", targetName); targetTree.RunTarget(session, "help"); return(2); } targetTree.RunTarget(session, args[0]); } session.Complete(); return(0); } catch (TaskExecutionException) { return(1); } catch (Exception ex) { Console.WriteLine(ex); return(1); } } }
public BuildPropertiesSession(TargetTree targetTree) { _targetTree = targetTree; }
/// <summary> /// Creates new instance of <see cref="FlubuConsole"/> class. /// </summary> /// <param name="hintsSourceDictionary">Collection containing input hints</param> public FlubuConsole(TargetTree targetTree, IReadOnlyCollection <Hint> defaultHints, IDictionary <char, IReadOnlyCollection <Hint> > hintsSourceDictionary = null) { _targetTree = targetTree; InitializeHints(defaultHints, hintsSourceDictionary); }
public virtual async Task <int> ExecuteAsync() { if (_args.DisableColoredLogging) { FlubuConsoleLogger.DisableColloredLogging = true; } if (_args.Help) { return(1); } if (_args.IsFlubuSetup()) { TargetTree.SetupFlubu(); return(0); } try { var script = await _scriptProvider.GetBuildScriptAsync(_args); _flubuSession.ScriptArgs = _args.ScriptArguments; _flubuSession.TargetTree.BuildScript = script; _flubuSession.Properties.Set(BuildProps.IsWebApi, _args.IsWebApi); var result = script.Run(_flubuSession); return(result); } catch (TaskExecutionException e) { if (_args.RethrowOnException) { throw; } _log.Log(LogLevel.Error, 1, $"EXECUTION FAILED:\r\n{e.ToString()}", null, (t, ex) => t); return(StatusCodes.BuildScriptNotFound); } catch (FlubuException e) { if (_args.RethrowOnException) { throw; } var str = _args.Debug ? e.ToString() : e.Message; _log.Log(LogLevel.Error, 1, $"EXECUTION FAILED:\r\n{str}", null, (t, ex) => t); return(StatusCodes.BuildScriptNotFound); } catch (Exception e) { if (_args.RethrowOnException) { throw; } var str = _args.Debug ? e.ToString() : e.Message; _log.Log(LogLevel.Error, 1, $"EXECUTION FAILED:\r\n{str}", null, (t, ex) => t); return(3); } }