diff --git a/build/RepositoryBuild.targets b/build/RepositoryBuild.targets
index 1e1251913c..6d119bbd50 100644
--- a/build/RepositoryBuild.targets
+++ b/build/RepositoryBuild.targets
@@ -52,6 +52,7 @@
$(RepositoryBuildArguments) /p:BuildNumber=$(BuildNumber) /p:Configuration=$(Configuration) /p:CommitHash=$(CommitHash)
+ $(RepositoryBuildArguments) /noconsolelogger '/l:RepoTasks.FlowLogger,$(MSBuildThisFileDirectory)tasks\bin\publish\RepoTasks.dll;Summary;FlowId=$(RepositoryToBuild)'
$(_RepositoryBuildTargets) $(RepositoryBuildArguments)
$(BuildRepositoryRoot)artifacts
diff --git a/build/repo.targets b/build/repo.targets
index ad9f7d7c7f..ec54c6583b 100644
--- a/build/repo.targets
+++ b/build/repo.targets
@@ -17,7 +17,7 @@
<_RepositoryBuildTargets Condition="'$(_RepositoryBuildTargets)'=='' AND '$(CompileOnly)'=='true'">/t:Package /t:VerifyPackages
<_RepositoryBuildTargets Condition="'$(_RepositoryBuildTargets)'==''">/t:Verify
- $(PrepareDependsOn);CleanUniverseArtifacts
+ $(PrepareDependsOn);CleanArtifacts;CleanUniverseArtifacts
$(CleanDependsOn);CleanUniverseArtifacts
$(BuildDependsOn);BuildRepositories
@@ -25,6 +25,7 @@
+
@@ -49,7 +50,7 @@
-
+
<_CloneRepositories Include="@(Repository);@(ShippedRepository)" />
<_CloneRepository Include="$(MSBuildProjectFullPath)">
diff --git a/build/tasks/BuildGraph/DependencyGraphSpecProvider.cs b/build/tasks/BuildGraph/DependencyGraphSpecProvider.cs
deleted file mode 100644
index d16600578a..0000000000
--- a/build/tasks/BuildGraph/DependencyGraphSpecProvider.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System.IO;
-using NuGet.ProjectModel;
-
-namespace RepoTools.BuildGraph
-{
- public class DependencyGraphSpecProvider
- {
- readonly string _packageSpecDirectory;
-
- public DependencyGraphSpecProvider(string packageSpecDirectory)
- {
- _packageSpecDirectory = packageSpecDirectory;
- }
-
- public DependencyGraphSpec GetDependencyGraphSpec(string repositoryName, string solutionPath)
- {
- var outputFile = Path.Combine(_packageSpecDirectory, repositoryName, Path.GetFileName(solutionPath) + ".json");
-
- if (!File.Exists(outputFile))
- {
- return null;
- }
-
- return DependencyGraphSpec.Load(outputFile);
- }
- }
-}
diff --git a/build/tasks/BuildGraph/Repository.cs b/build/tasks/BuildGraph/Repository.cs
index 5baaeedc92..e5bdaf414e 100644
--- a/build/tasks/BuildGraph/Repository.cs
+++ b/build/tasks/BuildGraph/Repository.cs
@@ -4,11 +4,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
-using System.IO;
using System.Linq;
-using System.Threading.Tasks;
-using NuGet.LibraryModel;
-using NuGet.ProjectModel;
namespace RepoTools.BuildGraph
{
@@ -30,105 +26,8 @@ namespace RepoTools.BuildGraph
public IEnumerable AllProjects => Projects.Concat(SupportProjects);
- public static IList ReadAllRepositories(IList repositoryPaths, DependencyGraphSpecProvider provider)
- {
- var repositories = new Repository[repositoryPaths.Count];
-
- Parallel.For(0, repositoryPaths.Count, new ParallelOptions { MaxDegreeOfParallelism = 6 }, i =>
- {
- var repositoryPath = repositoryPaths[i];
- var repositoryName = Path.GetFileName(repositoryPath);
- var repository = Read(provider, repositoryName, repositoryPath);
- repositories[i] = repository;
- });
-
- return repositories;
- }
-
public bool Equals(Repository other) => string.Equals(Name, other.Name, StringComparison.OrdinalIgnoreCase);
public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(Name);
-
- private static Repository Read(DependencyGraphSpecProvider provider, string name, string repositoryPath)
- {
- var repository = new Repository(name);
-
- ReadSharedSourceProjects(Path.Combine(repositoryPath, "shared"), repository, repository.Projects);
-
- var srcDirectory = Path.GetFullPath(Path.Combine(repositoryPath, "src"))
- .Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
-
- var solutionFiles = Directory.EnumerateFiles(repositoryPath, "*.sln");
- foreach (var file in solutionFiles)
- {
- var spec = provider.GetDependencyGraphSpec(name, file);
- if (spec == null)
- {
- continue;
- }
-
- var projects = spec.Projects.OrderBy(p => p.RestoreMetadata.ProjectStyle == ProjectStyle.PackageReference ? 0 : 1);
- foreach (var specProject in projects)
- {
- var projectPath = Path.GetFullPath(specProject.FilePath)
- .Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
-
- var projectGroup = projectPath.StartsWith(srcDirectory, StringComparison.OrdinalIgnoreCase) ?
- repository.Projects :
- repository.SupportProjects;
-
- var project = projectGroup.FirstOrDefault(f => f.Path == specProject.FilePath);
- if (project == null)
- {
- project = new Project(specProject.Name)
- {
- Repository = repository,
- Path = specProject.FilePath,
- Version = specProject.Version?.ToString(),
- };
-
- projectGroup.Add(project);
- }
-
- foreach (var package in GetPackageReferences(specProject))
- {
- project.PackageReferences.Add(package);
- }
- }
- }
-
- return repository;
- }
-
- private static List GetPackageReferences(PackageSpec specProject)
- {
- var allDependencies = Enumerable.Concat(
- specProject.Dependencies,
- specProject.TargetFrameworks.SelectMany(tfm => tfm.Dependencies))
- .Distinct();
-
- var packageReferences = allDependencies
- .Where(d => d.LibraryRange.TypeConstraintAllows(LibraryDependencyTarget.Package))
- .Select(d => d.Name)
- .ToList();
- return packageReferences;
- }
-
- private static void ReadSharedSourceProjects(string sharedSourceProjectsRoot, Repository repository, IList projects)
- {
- if (!Directory.Exists(sharedSourceProjectsRoot))
- {
- return;
- }
-
- foreach (var directory in new DirectoryInfo(sharedSourceProjectsRoot).EnumerateDirectories())
- {
- var project = new Project(directory.Name)
- {
- Repository = repository,
- };
- projects.Add(project);
- }
- }
}
}
diff --git a/build/tasks/CalculateBuildGraph.cs b/build/tasks/CalculateBuildGraph.cs
deleted file mode 100644
index 9475bd99ec..0000000000
--- a/build/tasks/CalculateBuildGraph.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using RepoTools.BuildGraph;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-
-namespace RepoTasks
-{
- public class CalculateBuildGraph : Task
- {
- [Required]
- public ITaskItem[] Repositories { get; set; }
-
- ///
- /// Directory that contains the package spec files.
- ///
- [Required]
- public string PackageSpecsDirectory { get; set; }
-
- ///
- /// The repository at which to root the graph at
- ///
- public string StartGraphAt { get; set; }
-
- [Output]
- public ITaskItem[] RepositoriesToBuildInOrder { get; set; }
-
- public override bool Execute()
- {
- var graphSpecProvider = new DependencyGraphSpecProvider(PackageSpecsDirectory.Trim());
-
- var repositoryPaths = Repositories.Select(r => r.GetMetadata("RepositoryPath")).ToList();
- var repositories = Repository.ReadAllRepositories(repositoryPaths, graphSpecProvider);
-
- var graph = GraphBuilder.Generate(repositories, StartGraphAt, Log);
- var repositoriesWithOrder = new List<(ITaskItem repository, int order)>();
- foreach (var repositoryTaskItem in Repositories)
- {
- var repositoryName = repositoryTaskItem.ItemSpec;
- var graphNodeRepository = graph.FirstOrDefault(g => g.Repository.Name == repositoryName);
- if (graphNodeRepository == null)
- {
- // StartGraphAt was specified so the graph is incomplete.
- continue;
- }
-
- var order = TopologicalSort.GetOrder(graphNodeRepository);
- repositoryTaskItem.SetMetadata("Order", order.ToString());
- repositoriesWithOrder.Add((repositoryTaskItem, order));
- }
-
- Log.LogMessage(MessageImportance.High, "Repository build order:");
- foreach (var buildGroup in repositoriesWithOrder.GroupBy(r => r.order).OrderBy(g => g.Key))
- {
- var buildGroupRepos = buildGroup.Select(b => b.repository.ItemSpec);
- Log.LogMessage(MessageImportance.High, $"{buildGroup.Key.ToString().PadLeft(2, ' ')}: {string.Join(", ", buildGroupRepos)}");
- }
-
- RepositoriesToBuildInOrder = repositoriesWithOrder
- .OrderBy(r => r.order)
- .Select(r => r.repository)
- .ToArray();
-
- return true;
- }
- }
-}
diff --git a/build/tasks/RepoTasks.tasks b/build/tasks/RepoTasks.tasks
index d6c6ae3488..505742d1e9 100644
--- a/build/tasks/RepoTasks.tasks
+++ b/build/tasks/RepoTasks.tasks
@@ -3,8 +3,6 @@
<_RepoTaskAssembly>$(MSBuildThisFileDirectory)bin\publish\RepoTasks.dll
-
-