Exemplo n.º 1
0
        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;
                }
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
    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));
    }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 7
0
        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;
 }
Exemplo n.º 9
0
 /// <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);
 }
Exemplo n.º 10
0
        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);
            }
        }