From 230e4a02efd0957f3a7af9e45d15374e440ee661 Mon Sep 17 00:00:00 2001 From: Nate McMaster Date: Fri, 12 Jan 2018 09:46:36 -0800 Subject: [PATCH] Split compilation and tests into separate phases (#779) * Split compilation and tests into separate phases * Ensure template tests are skipped, and reduce duplication between test/build repo targets * Show summary at the end of which repos failed --- build/RepositoryBuild.targets | 108 ++++++++++++++++++++++++++-------- build/Templating.targets | 9 +-- build/repo.targets | 8 +-- build/tasks/OrderBy.cs | 28 +++++++++ build/tasks/RepoTasks.tasks | 1 + 5 files changed, 119 insertions(+), 35 deletions(-) create mode 100644 build/tasks/OrderBy.cs diff --git a/build/RepositoryBuild.targets b/build/RepositoryBuild.targets index 0e0216fbde..7a045b06cf 100644 --- a/build/RepositoryBuild.targets +++ b/build/RepositoryBuild.targets @@ -1,5 +1,15 @@ - + + + + false + + <_NoBuildRepos>$(NoBuild) + <_BuildScriptToExecute Condition="'$(OS)'!='Windows_NT'">build.sh + <_BuildScriptToExecute Condition="'$(OS)'=='Windows_NT'">build.cmd + + + %(RepositoryBuildOrder.Order) @@ -10,33 +20,52 @@ + - - true - false - - - - - - - - - - - + + + + <_NoBuildRepos>true + - + + + + + + + + + + + + + + + + + + $(RepositoryBuildArguments) /p:AspNetUniverseBuildOffline=true @@ -47,14 +76,15 @@ $(RepositoryBuildArguments) /p:Configuration=$(Configuration) $(RepositoryBuildArguments) /p:IsFinalBuild=$(IsFinalBuild) $(RepositoryBuildArguments) /noconsolelogger '/l:RepoTasks.FlowLogger,$(MSBuildThisFileDirectory)tasks\bin\publish\RepoTasks.dll;Summary;FlowId=$(RepositoryToBuild)' + + - /t:CleanArtifacts $(_RepositoryBuildTargets) $(RepositoryBuildArguments) + + + /t:CleanArtifacts /t:Build /p:SkipTests=true $(RepositoryBuildArguments) $(BuildRepositoryRoot)artifacts $(RepositoryArtifactsRoot)\build\ $(RepositoryArtifactsRoot)\msbuild\ - - <_BuildScriptToExecute Condition="'$(OS)'!='Windows_NT'">build.sh - <_BuildScriptToExecute Condition="'$(OS)'=='Windows_NT'">build.cmd @@ -84,4 +114,34 @@ + + + /t:Test /p:NoBuild=$(_NoBuildRepos) $(RepositoryBuildArguments) + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/Templating.targets b/build/Templating.targets index 09300567f0..c199b1c775 100644 --- a/build/Templating.targets +++ b/build/Templating.targets @@ -14,16 +14,11 @@ IsFinalBuild=$(IsFinalBuild); SkipAspNetCoreRuntimeInstall=true; - CleanArtifacts;Restore;Compile;Package - - $(TemplateProjTargets); - Test; - + Targets="CleanArtifacts;Build" + Properties="$(TemplateProjProperties);SkipTests=true" /> diff --git a/build/repo.targets b/build/repo.targets index d1477e8be7..a9b2998960 100644 --- a/build/repo.targets +++ b/build/repo.targets @@ -8,20 +8,19 @@ - <_RepositoryBuildTargets Condition="'$(_RepositoryBuildTargets)'=='' AND '$(SkipTests)'=='true'">/t:Package /t:VerifyPackages - <_RepositoryBuildTargets Condition="'$(_RepositoryBuildTargets)'==''">/t:Build $(IntermediateDir)mirror\ $(IntermediateDir)ext\ - $(IntermediateDir)dependencies.props - $(IntermediateDir)sources.props + $(IntermediateDir)dependencies.g.props + $(IntermediateDir)sources.g.props $(PrepareDependsOn);VerifyPackageArtifactConfig;PrepareOutputPaths $(CleanDependsOn);CleanArtifacts;CleanUniverseArtifacts $(RestoreDependsOn);InstallDotNet;RestoreExternalDependencies $(CompileDependsOn);BuildRepositories $(PackageDependsOn);BuildMetapackage;BuildTemplates;SplitPackages + $(TestDependsOn);_TestRepositories $(VerifyDependsOn);VerifyCoherentVersions $(GetArtifactInfoDependsOn);ResolveRepoInfo @@ -114,6 +113,7 @@ diff --git a/build/tasks/OrderBy.cs b/build/tasks/OrderBy.cs new file mode 100644 index 0000000000..a761d6f093 --- /dev/null +++ b/build/tasks/OrderBy.cs @@ -0,0 +1,28 @@ +// 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.Linq; +using Microsoft.Build.Framework; +using Microsoft.Build.Utilities; + +namespace RepoTasks +{ + public class OrderBy : Task + { + [Required] + [Output] + public ITaskItem[] Items { get; set; } + + public string Key { get; set; } + + public override bool Execute() + { + var key = string.IsNullOrEmpty(Key) + ? "Identity" + : Key; + Items = Items.OrderBy(k => k.GetMetadata(key)).ToArray(); + return true; + } + } +} diff --git a/build/tasks/RepoTasks.tasks b/build/tasks/RepoTasks.tasks index e1a43cf51f..1176f79344 100644 --- a/build/tasks/RepoTasks.tasks +++ b/build/tasks/RepoTasks.tasks @@ -12,6 +12,7 @@ +