protected override void Generate(NukeBuild build, IReadOnlyCollection <ExecutableTarget> executableTargets) { var relevantTargets = InvokedTargets .SelectMany(x => ExecutionPlanner.GetExecutionPlan(executableTargets, new[] { x })) .Distinct() .Where(x => !ExcludedTargets.Contains(x.Name) && !NonEntryTargets.Contains(x.Name)).ToList(); var configuration = GetConfiguration(relevantTargets); using var writer = new CustomFileWriter(ConfigurationFile, indentationFactor: 2); configuration.Write(writer); }
protected virtual AzurePipelinesJob GetJob( ExecutableTarget executableTarget, LookupTable <ExecutableTarget, AzurePipelinesJob> jobs) { var(partitionName, totalPartitions) = ArtifactExtensions.Partitions.GetValueOrDefault(executableTarget.Definition); var publishedArtifacts = ArtifactExtensions.ArtifactProducts[executableTarget.Definition] .Select(x => (AbsolutePath)x) .Select(x => x.DescendantsAndSelf(y => y.Parent).FirstOrDefault(y => !y.ToString().ContainsOrdinalIgnoreCase("*"))) .Distinct() .Select(x => x.ToString().TrimStart(x.Parent.ToString()).TrimStart('/', '\\')).ToArray(); // var artifactDependencies = ( // from artifactDependency in ArtifactExtensions.ArtifactDependencies[executableTarget.Definition] // let dependency = executableTarget.ExecutionDependencies.Single(x => x.Factory == artifactDependency.Item1) // let rules = (artifactDependency.Item2.Any() // ? artifactDependency.Item2 // : ArtifactExtensions.ArtifactProducts[dependency.Definition]) // .Select(GetArtifactRule).ToArray() // select new TeamCityArtifactDependency // { // BuildType = buildTypes[dependency].Single(x => x.Partition == null), // ArtifactRules = rules // }).ToArray<TeamCityDependency>(); var invokedTargets = executableTarget .DescendantsAndSelf(x => x.ExecutionDependencies, x => NonEntryTargets.Contains(x.Name)) .Where(x => x == executableTarget || NonEntryTargets.Contains(x.Name)) .Reverse() .Select(x => x.Name).ToArray(); var dependencies = executableTarget.ExecutionDependencies .Where(x => !ExcludedTargets.Contains(x.Name) && !NonEntryTargets.Contains(x.Name)) .SelectMany(x => jobs[x]).ToArray(); return(new AzurePipelinesJob { Name = executableTarget.Name, DisplayName = executableTarget.Name, ScriptPath = PowerShellScript, Dependencies = dependencies, Parallel = totalPartitions, PartitionName = partitionName, InvokedTargets = invokedTargets, PublishArtifacts = publishedArtifacts }); }