Exemple #1
0
        public void Generate(NukeBuild build, IReadOnlyCollection <ExecutableTarget> executableTargets)
        {
            var relevantTargets = RelevantTargetNames
                                  .SelectMany(x => ExecutionPlanner.GetExecutionPlan(executableTargets, new[] { x }))
                                  .Distinct()
                                  .Where(x => !IrrelevantTargetNames.Contains(x.Name)).ToList();
            var configuration = GetConfiguration(build, relevantTargets);

            using var stream = CreateStream();
            var writer = CreateWriter(stream);

            writer.WriteComment("------------------------------------------------------------------------------");
            writer.WriteComment("<auto-generated>");
            writer.WriteComment();
            writer.WriteComment("    This code was generated.");
            writer.WriteComment();
            writer.WriteComment("    - To turn off auto-generation set:");
            writer.WriteComment();
            writer.WriteComment($"        [{GetType().Name.TrimEnd(nameof(Attribute))} ({nameof(IConfigurationGenerator.AutoGenerate)} = false)]");
            writer.WriteComment();
            writer.WriteComment("    - To trigger manual generation invoke:");
            writer.WriteComment();
            writer.WriteComment($"        nuke --{ConfigurationParameterName} {Id} --host {HostName}");
            writer.WriteComment();
            writer.WriteComment("</auto-generated>");
            writer.WriteComment("------------------------------------------------------------------------------");
            writer.WriteLine();
            writer.Write(configuration.Write);
        }
Exemple #2
0
        public void Schedule(MyProject project, IEnumerable <MyWorkingNode> newNodes = null)
        {
            // If there are any init tasks in the current plan, copy them over to the new one.
            // This is mostly for the first simulation step if there is also a model change.
            MyExecutionBlock oldPlan = null;

            if (ExecutionPlan != null)
            {
                oldPlan = ExecutionPlan.InitStepPlan;
            }

            m_project     = project;
            ExecutionPlan = ExecutionPlanner.CreateExecutionPlan(project, newNodes);

            if (oldPlan != null)
            {
                var newInitPlan = new List <IMyExecutable>();
                newInitPlan.AddRange(oldPlan.Children);
                newInitPlan.AddRange(ExecutionPlan.InitStepPlan.Children);
                ExecutionPlan.InitStepPlan = new MyExecutionBlock(newInitPlan.ToArray())
                {
                    Name = oldPlan.Name
                };
            }

            ExtractAllNodes(m_project);

            // Allow subclasses to react to re-scheduling.
            ScheduleChanged();
        }
Exemple #3
0
        protected virtual TeamCityProject GetProject(
            NukeBuild build,
            IReadOnlyCollection <ExecutableTarget> executableTargets)
        {
            var relevantTargets = VcsTriggeredTargets.Concat(ManuallyTriggeredTargets)
                                  .SelectMany(x => ExecutionPlanner.GetExecutionPlan(executableTargets, new[] { x }))
                                  .Distinct()
                                  .Where(x => !ExcludedTargets.Contains(x.Name) && !NonEntryTargets.Contains(x.Name)).ToList();

            var vcsRoot     = GetVcsRoot(build);
            var lookupTable = new LookupTable <ExecutableTarget, TeamCityBuildType>();
            var buildTypes  = relevantTargets
                              .SelectMany(x => GetBuildTypes(build, x, vcsRoot, lookupTable), (x, y) => (ExecutableTarget: x, BuildType: y))
                              .ForEachLazy(x => lookupTable.Add(x.ExecutableTarget, x.BuildType))
                              .Select(x => x.BuildType).ToArray();

            var parameters = GetGlobalParameters(build);

            if (Platform == TeamCityAgentPlatform.Windows)
            {
                parameters = parameters
                             .Concat(new TeamCityKeyValueParameter
                {
                    Key   = "teamcity.runner.commandline.stdstreams.encoding",
                    Value = "IBM-437"
                });
            }

            return(new TeamCityProject
            {
                VcsRoot = vcsRoot,
                BuildTypes = buildTypes,
                Parameters = parameters.ToArray()
            });
        }
Exemple #4
0
        private ExecutionPlanner GetExecutor(BatchRequest batchRequest)
        {
            var factory   = new SampleAPIHttpClientFactory(_Samplefactory, batchRequest.Headers);
            var processor = new RequestProcessor(factory);
            var executor  = new ExecutionPlanner(processor);

            return(executor);
        }
Exemple #5
0
        public void Schedule(MyProject project)
        {
            MyExecutionPlan singleCoreExecutionPlan = ExecutionPlanner.CreateExecutionPlan(project);

            ExecutionPlan = PartitioningStrategy.Divide(singleCoreExecutionPlan);

            //TODO: remove this and replace with proper project traversal to find nodes with no tasks!
            ExtractPartitioningFromExecutionPlan();
        }
Exemple #6
0
        protected override void Generate(
            NukeBuild build,
            IReadOnlyCollection <ExecutableTarget> executableTargets)
        {
            var relevantTargets = InvokedTargets
                                  .SelectMany(x => ExecutionPlanner.GetExecutionPlan(executableTargets, new[] { x }))
                                  .Distinct().ToList();
            var configuration = GetConfiguration(build, relevantTargets);

            using var writer = new CustomFileWriter(ConfigurationFile, indentationFactor: 2);
            configuration.Write(writer);
        }
Exemple #7
0
        protected override void Generate(NukeBuild build, IReadOnlyCollection <ExecutableTarget> executableTargets)
        {
            var relevantTargets = VcsTriggeredTargets.Concat(ManuallyTriggeredTargets)
                                  .SelectMany(x => ExecutionPlanner.GetExecutionPlan(executableTargets, new[] { x }))
                                  .Distinct()
                                  .Where(x => !ExcludedTargets.Contains(x.Name) && !NonEntryTargets.Contains(x.Name)).ToList();
            var configuration = GetConfiguration(build, relevantTargets);

            ControlFlow.Assert(NukeBuild.RootDirectory != null, "NukeBuild.RootDirectory != null");

            TextTasks.WriteAllLines(
                PomFile,
                ResourceUtility.GetResourceAllLines <TeamCityConfigurationEntity>("pom.xml"));

            using var writer = new CustomFileWriter(SettingsFile, indentationFactor: 4);
            configuration.Write(writer);
        }
Exemple #8
0
        public void OnBeforeLogo(NukeBuild build, IReadOnlyCollection <ExecutableTarget> executableTargets)
        {
            var configurationId = EnvironmentInfo.GetParameter <string>(ConfigurationParameterName);

            if (configurationId == null)
            {
                return;
            }

            ControlFlow.Assert(NukeBuild.RootDirectory != null, "NukeBuild.RootDirectory != null");

            var generator = GetGenerators(build)
                            .Where(x => x.Id == configurationId)
                            .SingleOrDefaultOrError($"Found multiple {nameof(IConfigurationGenerator)} with same ID '{configurationId}'.")
                            .NotNull("generator != null");

            var relevantTargets = generator.RelevantTargetNames
                                  .SelectMany(x => ExecutionPlanner.GetExecutionPlan(executableTargets, new[] { x }))
                                  .Distinct()
                                  .Where(x => !generator.IrrelevantTargetNames.Contains(x.Name)).ToList();
            var configuration = generator.GetConfiguration(build, relevantTargets);

            using (var writer = generator.CreateWriter())
            {
                writer.WriteComment("------------------------------------------------------------------------------");
                writer.WriteComment("<auto-generated>");
                writer.WriteComment();
                writer.WriteComment("    This code was generated.");
                writer.WriteComment();
                writer.WriteComment("    - To turn off auto-generation set:");
                writer.WriteComment();
                writer.WriteComment($"        [{generator.GetType().Name.TrimEnd(nameof(Attribute))} ({nameof(IConfigurationGenerator.AutoGenerate)} = false)]");
                writer.WriteComment();
                writer.WriteComment("    - To trigger manual generation invoke:");
                writer.WriteComment();
                writer.WriteComment($"        nuke --{ConfigurationParameterName} {generator.Id} --host {generator.HostType}");
                writer.WriteComment();
                writer.WriteComment("</auto-generated>");
                writer.WriteComment("------------------------------------------------------------------------------");
                writer.WriteLine();
                writer.Write(configuration.Write);
            }

            Environment.Exit(0);
        }
Exemple #9
0
        protected IEnumerable <ExecutableTarget> GetInvokedTargets(ExecutableTarget executableTarget, IReadOnlyCollection <ExecutableTarget> relevantTargets)
        {
            var invokedTargets = new List <ExecutableTarget> {
                executableTarget
            };
            ICollection <ExecutableTarget> additionalInvokedTargets;

            do
            {
                additionalInvokedTargets = invokedTargets.SelectMany(x => x.ExecutionDependencies)
                                           .Concat(invokedTargets.SelectMany(x => x.Triggers))
                                           .Except(invokedTargets)
                                           .Where(x => NonEntryTargets.Contains(x.Name))
                                           .Where(x => !ExcludedTargets.Contains(x.Name)).ToList();
                invokedTargets.AddRange(additionalInvokedTargets);
            } while (additionalInvokedTargets.Count > 0);

            return(ExecutionPlanner.GetExecutionPlan(invokedTargets, new[] { executableTarget.Name }));
        }
        protected IEnumerable <ExecutableTarget> GetInvokedTargets(ExecutableTarget executableTarget, IReadOnlyCollection <ExecutableTarget> relevantTargets)
        {
            var invokedTargets = new List <ExecutableTarget> {
                executableTarget
            };
            ICollection <ExecutableTarget> additionalInvokedTargets;

            do
            {
                additionalInvokedTargets = invokedTargets.SelectMany(x => x.ExecutionDependencies)
                                           .Concat(invokedTargets.SelectMany(x => x.Triggers))
                                           .Except(invokedTargets)
                                           .Where(x => NonEntryTargets.Contains(x.Name))
                                           .Where(x => !ExcludedTargets.Contains(x.Name)).ToList();
                invokedTargets.AddRange(additionalInvokedTargets);
            } while (additionalInvokedTargets.Count > 0);

            Assert.True(invokedTargets.Except(new[] { executableTarget }).Count(x => x.PartitionSize != null) == 0,
                        $"Non-entry targets for {executableTarget.Name} cannot define partitions");
            return(ExecutionPlanner.GetExecutionPlan(invokedTargets, new[] { executableTarget.Name }));
        }
Exemple #11
0
        public void OnBeforeLogo(NukeBuild build, IReadOnlyCollection <ExecutableTarget> executableTargets)
        {
            if (!EnvironmentInfo.GetParameter <bool>(ConfigurationParameterName) ||
                NukeBuild.Host != HostType)
            {
                return;
            }

            ControlFlow.Assert(NukeBuild.RootDirectory != null, "NukeBuild.RootDirectory != null");

            var relevantTargets = RelevantTargetNames
                                  .SelectMany(x => ExecutionPlanner.GetExecutionPlan(executableTargets, new[] { x }))
                                  .Distinct()
                                  .Where(x => !IrrelevantTargetNames.Contains(x.Name)).ToList();

            using (var writer = CreateWriter())
            {
                WriteAutoGenerationComment(writer);
                var configuration = GetConfiguration(build, relevantTargets);
                configuration.Write(writer);
            }

            Environment.Exit(0);
        }
        private IEnumerable <ExecutableTarget> GetPlan(ExecutableTarget[] invokedTargets = null)
        {
            string[] SelectNames(ExecutableTarget[] targets) => targets?.Select(x => x.Name).ToArray();

            return(ExecutionPlanner.GetExecutionPlan(new[] { A, B, C }, SelectNames(invokedTargets)));
        }
 public void Init()
 {
     _parser = new ExecutionPlanner(new ProcedureCollection());
 }