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); }
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(); }
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() }); }
private ExecutionPlanner GetExecutor(BatchRequest batchRequest) { var factory = new SampleAPIHttpClientFactory(_Samplefactory, batchRequest.Headers); var processor = new RequestProcessor(factory); var executor = new ExecutionPlanner(processor); return(executor); }
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(); }
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); }
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); }
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); }
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 })); }
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()); }