コード例 #1
0
        public FlubuEngine()
        {
            LoggerFactory             = new LoggerFactory();
            FlubuConfigurationBuilder = new FlubuConfigurationBuilder();
            LoggerFactory.AddProvider(new FlubuLoggerProvider());
            var loggers = ServiceDescriptor.Singleton(typeof(ILogger <>), typeof(Logger <>));
            var app     = new CommandLineApplication()
            {
                UnrecognizedArgumentHandling = UnrecognizedArgumentHandling.CollectAndContinue
            };

            FlubuConfiguration flubuConfiguration = new FlubuConfiguration();
            CommandArguments   arguments          = new CommandArguments();
            var serviceCollection = new ServiceCollection()
                                    .AddCoreComponents()
                                    .AddTasks()
                                    .AddSingleton(app)
                                    .AddSingleton(LoggerFactory)
                                    .AddSingleton <IBuildScriptLocator, BuildScriptLocator>()
                                    .AddSingleton <IFlubuConfigurationProvider, FlubuConfigurationProvider>()
                                    .AddSingleton <IFlubuCommandParser, FlubuCommandParser>()
                                    .AddSingleton(arguments);

            serviceCollection.TryAdd(loggers);
            serviceCollection.AddSingleton(flubuConfiguration);
            ServiceProvider = serviceCollection.BuildServiceProvider();

            TaskFactory = new DotnetTaskFactory(ServiceProvider);
        }
コード例 #2
0
        public IntegrationTestFixture()
        {
            LoggerFactory = Microsoft.Extensions.Logging.LoggerFactory.Create(
                builder =>
            {
                builder.AddFilter((level) => level >= LogLevel.Information)
                .AddConsole();
            });

            var services = new ServiceCollection()
                           .AddLogging()
                           .AddCoreComponents()
                           .AddScriptAnalyzers()
                           .AddParserComponents()
                           .AddTasks();
            var config = new FlubuConfiguration();

            services.AddSingleton(config);
            services.AddSingleton(new CommandArguments());

            ServiceProvider = services.BuildServiceProvider();
        }
コード例 #3
0
        public async System.Threading.Tasks.Task LoadDefaultScript()
        {
            var scriptFileName = "e.cs";

            var asmbFileName = _loader.GetBuildScriptAssemblyFileName(scriptFileName, fullPath: false);

            if (File.Exists(asmbFileName))
            {
                File.Delete(asmbFileName);
            }

            CommandArguments args = new CommandArguments();

            _scriptLocator.Setup(x => x.FindBuildScript(args)).Returns(scriptFileName);

            _fileLoader.Setup(i => i.ReadAllLines(scriptFileName))
            .Returns(new List <string>
            {
                "using System;",
                "using FlubuCore.Context;",
                "using FlubuCore.Scripting;",
                string.Empty,
                "public class MyBuildScript : DefaultBuildScript",
                "{",
                "    protected override void ConfigureBuildProperties(IBuildPropertiesContext context)",
                "    {",
                "        System.Console.WriteLine(\"2222\");",
                "        }",
                string.Empty,
                "        protected override void ConfigureTargets(ITaskContext context)",
                "        {",
                "            Console.WriteLine(\"2222\");",
                "        }",
                "    }"
            });

            _analyzer.Setup(i => i.Analyze(It.IsAny <List <string> >()))
            .Returns(new ScriptAnalyzerResult()
            {
                ClassName = "MyBuildScript"
            });

            FlubuConfiguration configuration = new FlubuConfiguration();
            IBuildScript       t             = await _loader.FindAndCreateBuildScriptInstanceAsync(args);

            var provider = new ServiceCollection()
                           .AddSingleton <IScriptProperties, ScriptProperties>()
                           .AddSingleton <ITargetCreator, TargetCreator>()
                           .AddSingleton(configuration)
                           .BuildServiceProvider();

            var targetTree = new TargetTree(provider, new CommandArguments());

            t.Run(new FlubuSession(
                      _loggerTaskSession.Object,
                      targetTree,
                      new CommandArguments(),
                      new ScriptServiceProvider(provider),
                      new DotnetTaskFactory(provider),
                      new FluentInterfaceFactory(provider),
                      new BuildPropertiesSession(targetTree),
                      new BuildServer()));
        }
コード例 #4
0
        public async Task LoadSimpleScript()
        {
            var scriptFileName = "e3.cs";

            var asmbFileName = _loader.GetBuildScriptAssemblyFileName(scriptFileName, fullPath: false);

            if (File.Exists(asmbFileName))
            {
                File.Delete(asmbFileName);
            }

            CommandArguments args = new CommandArguments();

            _scriptLocator.Setup(x => x.FindBuildScript(args)).Returns(scriptFileName);

            _fileLoader.Setup(i => i.ReadAllLines(scriptFileName))
            .Returns(new List <string>
            {
                "using FlubuCore.Scripting;",
                "using System;",
                "using FlubuCore;",
                "using FlubuCore.Context;",
                "using Microsoft.Extensions.DependencyInjection;",
                "using Microsoft.Extensions.Logging;",
                string.Empty,
                "public class MyBuildScript : IBuildScript",
                "{",
                "    public int Run(IFlubuSession session)",
                "    {",
                "        Console.WriteLine(\"11\");",
                "        return 0;",
                "    }",

                "    public void ConfigureServices(IServiceCollection services)",
                "    {",
                "    }",

                "    public void Configure(IFlubuConfigurationBuilder configurationBuilder, ILoggerFactory loggerFactory)",
                "    {",
                "    }",
                "}",
            });

            _analyzer.Setup(i => i.Analyze(It.IsAny <List <string> >()))
            .Returns(new ScriptAnalyzerResult()
            {
                ClassName = "MyBuildScript"
            });

            IBuildScript t = await _loader.FindAndCreateBuildScriptInstanceAsync(args);

            FlubuConfiguration configuration = new FlubuConfiguration();
            var provider = new ServiceCollection()
                           .AddSingleton <IScriptProperties, ScriptProperties>()
                           .AddSingleton <ITargetCreator, TargetCreator>()
                           .AddSingleton(configuration)
                           .BuildServiceProvider();

            var targetTree = new TargetTree(provider, new CommandArguments());

            t.Run(new FlubuSession(
                      _loggerTaskSession.Object,
                      targetTree,
                      new CommandArguments(),
                      new ScriptServiceProvider(provider),
                      new DotnetTaskFactory(provider),
                      new FluentInterfaceFactory(provider),
                      new BuildPropertiesSession(targetTree),
                      new BuildServer()));
        }
コード例 #5
0
        public int Run(IFlubuSession flubuSession)
        {
            _flubuSession       = flubuSession;
            _scriptProperties   = flubuSession.ScriptServiceProvider.GetScriptProperties();
            _targetCreator      = flubuSession.ScriptServiceProvider.GetTargetCreator();
            _flubuConfiguration = flubuSession.ScriptServiceProvider.GetFlubuConfiguration();

            try
            {
                ConfigureDefaultProps(flubuSession);
                BeforeBuildExecution(flubuSession);
                RunBuild(flubuSession);
                flubuSession.Complete();
                AfterBuildExecution(flubuSession);
                return(0);
            }
            catch (TargetNotFoundException e)
            {
                flubuSession.ResetDepth();
                OnBuildFailed(flubuSession, e);
                AfterBuildExecution(flubuSession);
                if (flubuSession.Args.RethrowOnException)
                {
                    throw;
                }

                flubuSession.LogError($"{Environment.NewLine}{e.Message}");
                return(3);
            }
            catch (WebApiException e)
            {
                flubuSession.ResetDepth();
                OnBuildFailed(flubuSession, e);
                AfterBuildExecution(flubuSession);
                if (flubuSession.Args.RethrowOnException)
                {
                    throw;
                }

                return(1);
            }
            catch (FlubuException e)
            {
                flubuSession.ResetDepth();
                OnBuildFailed(flubuSession, e);

                if (!flubuSession.Args.RethrowOnException)
                {
                    flubuSession.LogError($"ERROR: {e.Message}", Color.Red);
                }

                AfterBuildExecution(flubuSession);
                if (flubuSession.Args.RethrowOnException)
                {
                    throw;
                }

                return(1);
            }
            catch (Exception e)
            {
                flubuSession.ResetDepth();
                OnBuildFailed(flubuSession, e);

                if (!flubuSession.Args.RethrowOnException)
                {
                    flubuSession.LogError($"ERROR: {e}", Color.Red);
                }

                AfterBuildExecution(flubuSession);
                if (flubuSession.Args.RethrowOnException)
                {
                    throw;
                }

                return(2);
            }
        }