Browse Source

Run in parallel

pull/12072/head
Max Katz 3 years ago
parent
commit
c72aa402a8
  1. 18
      nukebuild/ApiDiffValidation.cs
  2. 10
      nukebuild/Build.cs

18
nukebuild/ApiDiffValidation.cs

@ -5,11 +5,12 @@ using System.IO.Compression;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Nuke.Common.Tooling; using Nuke.Common.Tooling;
public static class ApiDiffValidation public static class ApiDiffValidation
{ {
public static void ValidatePackage( public static async Task ValidatePackage(
Tool apiCompatTool, string packagePath, Version baselineVersion, Tool apiCompatTool, string packagePath, Version baselineVersion,
string suppressionFilesFolder, bool updateSuppressionFile) string suppressionFilesFolder, bool updateSuppressionFile)
{ {
@ -24,7 +25,7 @@ public static class ApiDiffValidation
Directory.CreateDirectory(suppressionFilesFolder!); Directory.CreateDirectory(suppressionFilesFolder!);
} }
using (var baselineStream = DownloadBaselinePackage(packagePath, baselineVersion)) using (var baselineStream = await DownloadBaselinePackage(packagePath, baselineVersion))
using (var target = new ZipArchive(File.Open(packagePath, FileMode.Open, FileAccess.Read), ZipArchiveMode.Read)) using (var target = new ZipArchive(File.Open(packagePath, FileMode.Open, FileAccess.Read), ZipArchiveMode.Read))
using (var baseline = new ZipArchive(baselineStream, ZipArchiveMode.Read)) using (var baseline = new ZipArchive(baselineStream, ZipArchiveMode.Read))
using (Helpers.UseTempDir(out var tempFolder)) using (Helpers.UseTempDir(out var tempFolder))
@ -44,7 +45,7 @@ public static class ApiDiffValidation
Directory.CreateDirectory(Path.GetDirectoryName(baselineDllRealPath)!); Directory.CreateDirectory(Path.GetDirectoryName(baselineDllRealPath)!);
using (var baselineDllFile = File.Create(baselineDllRealPath)) using (var baselineDllFile = File.Create(baselineDllRealPath))
{ {
baselineDll.entry.Open().CopyTo(baselineDllFile); await baselineDll.entry.Open().CopyToAsync(baselineDllFile);
} }
var targetDll = targetDlls.FirstOrDefault(e => var targetDll = targetDlls.FirstOrDefault(e =>
@ -59,7 +60,7 @@ public static class ApiDiffValidation
Directory.CreateDirectory(Path.GetDirectoryName(targetDllRealPath)!); Directory.CreateDirectory(Path.GetDirectoryName(targetDllRealPath)!);
using (var targetDllFile = File.Create(targetDllRealPath)) using (var targetDllFile = File.Create(targetDllRealPath))
{ {
targetDll.entry.Open().CopyTo(targetDllFile); await targetDll.entry.Open().CopyToAsync(targetDllFile);
} }
left.Add(baselineDllPath); left.Add(baselineDllPath);
@ -67,7 +68,6 @@ public static class ApiDiffValidation
} }
var args = $""" -l={string.Join(',', left)} -r="{string.Join(',', right)}" """; var args = $""" -l={string.Join(',', left)} -r="{string.Join(',', right)}" """;
updateSuppressionFile = true;
if (File.Exists(suppressionFile)) if (File.Exists(suppressionFile))
{ {
args += $""" --suppression-file="{suppressionFile}" """; args += $""" --suppression-file="{suppressionFile}" """;
@ -96,7 +96,7 @@ public static class ApiDiffValidation
.ToArray(); .ToArray();
} }
static Stream DownloadBaselinePackage(string packagePath, Version baselineVersion) static async Task<Stream> DownloadBaselinePackage(string packagePath, Version baselineVersion)
{ {
Build.Information("Downloading {0} baseline package for version {1}", Path.GetFileName(packagePath), baselineVersion); Build.Information("Downloading {0} baseline package for version {1}", Path.GetFileName(packagePath), baselineVersion);
@ -107,11 +107,11 @@ public static class ApiDiffValidation
"""(\.\d+\.\d+\.\d+)$""", ""); """(\.\d+\.\d+\.\d+)$""", "");
using var httpClient = new HttpClient(); using var httpClient = new HttpClient();
using var response = httpClient.Send(new HttpRequestMessage(HttpMethod.Get, using var response = await httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Get,
$"https://www.nuget.org/api/v2/package/{packageId}/{baselineVersion}")); $"https://www.nuget.org/api/v2/package/{packageId}/{baselineVersion}"));
using var stream = response.Content.ReadAsStream(); await using var stream = await response.Content.ReadAsStreamAsync();
var memoryStream = new MemoryStream(); var memoryStream = new MemoryStream();
stream.CopyTo(memoryStream); await stream.CopyToAsync(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin); memoryStream.Seek(0, SeekOrigin.Begin);
return memoryStream; return memoryStream;
} }

10
nukebuild/Build.cs

@ -285,14 +285,12 @@ partial class Build : NukeBuild
Target ValidateApiDiff => _ => _ Target ValidateApiDiff => _ => _
.DependsOn(CreateNugetPackages) .DependsOn(CreateNugetPackages)
.Executes(() => .Executes(async () =>
{ {
foreach (var nugetPackage in Directory.GetFiles(Parameters.NugetRoot)) await Task.WhenAll(
{ Directory.GetFiles(Parameters.NugetRoot).Select(nugetPackage => ApiDiffValidation.ValidatePackage(
ApiDiffValidation.ValidatePackage(
ApiCompatTool, nugetPackage, Parameters.ApiValidationBaseline, ApiCompatTool, nugetPackage, Parameters.ApiValidationBaseline,
Parameters.ApiValidationSuppressionFiles, Parameters.UpdateApiValidationSuppression); Parameters.ApiValidationSuppressionFiles, Parameters.UpdateApiValidationSuppression)));
}
}); });
Target RunTests => _ => _ Target RunTests => _ => _

Loading…
Cancel
Save