Remove dead code and ensure source code is cloned when building on CI
This commit is contained in:
parent
4182b0b5d2
commit
4fa08287a2
|
|
@ -52,6 +52,7 @@
|
|||
<PropertyGroup>
|
||||
<!-- If there are duplicate properties, the properties which are defined later in the order would override the earlier ones -->
|
||||
<RepositoryBuildArguments>$(RepositoryBuildArguments) /p:BuildNumber=$(BuildNumber) /p:Configuration=$(Configuration) /p:CommitHash=$(CommitHash)</RepositoryBuildArguments>
|
||||
<RepositoryBuildArguments>$(RepositoryBuildArguments) /noconsolelogger '/l:RepoTasks.FlowLogger,$(MSBuildThisFileDirectory)tasks\bin\publish\RepoTasks.dll;Summary;FlowId=$(RepositoryToBuild)'</RepositoryBuildArguments>
|
||||
|
||||
<BuildArguments>$(_RepositoryBuildTargets) $(RepositoryBuildArguments)</BuildArguments>
|
||||
<RepositoryArtifactsRoot>$(BuildRepositoryRoot)artifacts</RepositoryArtifactsRoot>
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
<_RepositoryBuildTargets Condition="'$(_RepositoryBuildTargets)'=='' AND '$(CompileOnly)'=='true'">/t:Package /t:VerifyPackages</_RepositoryBuildTargets>
|
||||
<_RepositoryBuildTargets Condition="'$(_RepositoryBuildTargets)'==''">/t:Verify</_RepositoryBuildTargets>
|
||||
|
||||
<PrepareDependsOn>$(PrepareDependsOn);CleanUniverseArtifacts</PrepareDependsOn>
|
||||
<PrepareDependsOn>$(PrepareDependsOn);CleanArtifacts;CleanUniverseArtifacts</PrepareDependsOn>
|
||||
<CleanDependsOn>$(CleanDependsOn);CleanUniverseArtifacts</CleanDependsOn>
|
||||
<BuildDependsOn>$(BuildDependsOn);BuildRepositories</BuildDependsOn>
|
||||
</PropertyGroup>
|
||||
|
|
@ -25,6 +25,7 @@
|
|||
<Import Project="$(_RepositoryListToImport)" />
|
||||
|
||||
<Target Name="CleanUniverseArtifacts">
|
||||
<RemoveDir Directories="$(_CloneRepositoryRoot)" Condition="Exists('$(_CloneRepositoryRoot)') AND '$(ClearRepositoryCloneRoot)' != 'false'" />
|
||||
<RemoveDir Directories="$(RepositoryRoot)obj" Condition="Exists('$(RepositoryRoot)obj')" />
|
||||
</Target>
|
||||
|
||||
|
|
@ -49,7 +50,7 @@
|
|||
</ItemGroup>
|
||||
</Target>
|
||||
|
||||
<Target Name="CloneRepositories" DependsOnTargets="_PrepareRepositories">
|
||||
<Target Name="CloneRepositories" DependsOnTargets="_PrepareRepositories" Condition="'$(ClearRepositoryCloneRoot)' != 'false'">
|
||||
<ItemGroup>
|
||||
<_CloneRepositories Include="@(Repository);@(ShippedRepository)" />
|
||||
<_CloneRepository Include="$(MSBuildProjectFullPath)">
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<Project> AllProjects => Projects.Concat(SupportProjects);
|
||||
|
||||
public static IList<Repository> ReadAllRepositories(IList<string> 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<string> 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<Project> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
|
||||
/// <summary>
|
||||
/// Directory that contains the package spec files.
|
||||
/// </summary>
|
||||
[Required]
|
||||
public string PackageSpecsDirectory { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The repository at which to root the graph at
|
||||
/// </summary>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -3,8 +3,6 @@
|
|||
<_RepoTaskAssembly>$(MSBuildThisFileDirectory)bin\publish\RepoTasks.dll</_RepoTaskAssembly>
|
||||
</PropertyGroup>
|
||||
|
||||
<UsingTask TaskName="RepoTasks.CalculateBuildGraph" AssemblyFile="$(_RepoTaskAssembly)" />
|
||||
<UsingTask TaskName="RepoTasks.AnalyzeBuildGraph" AssemblyFile="$(_RepoTaskAssembly)" />
|
||||
<UsingTask TaskName="RepoTasks.GenerateLineup" AssemblyFile="$(_RepoTaskAssembly)" />
|
||||
<UsingTask TaskName="RepoTasks.PinVersions" AssemblyFile="$(_RepoTaskAssembly)" />
|
||||
</Project>
|
||||
|
|
|
|||
Loading…
Reference in New Issue