Skip to content

Commit 55e1f96

Browse files
committed
License checking parallelism
1 parent 28c7f05 commit 55e1f96

1 file changed

Lines changed: 24 additions & 13 deletions

File tree

Runner/Jobs/NuGetExtraAssembliesJob.cs

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -106,20 +106,24 @@ private async Task<List<PackageInfo>> GatherNuGetInfoAsync(int count)
106106

107107
var approvedPackages = new List<PackageInfo>();
108108

109-
for (int i = 0; i < packages.Count; i++)
109+
int i = 0;
110+
111+
await Parallel.ForEachAsync(packages, new ParallelOptions { MaxDegreeOfParallelism = 4 }, async (package, _) =>
110112
{
111-
var (id, version) = packages[i];
112-
string prefix = $"[NuGet {i + 1}/{packages.Count}] {id} {version}";
113-
LastProgressSummary = $"Checking NuGet package {i + 1}/{packages.Count}. Approved {approvedPackages.Count} so far.";
113+
var (id, version) = package;
114+
int iLocal = Interlocked.Increment(ref i);
115+
116+
string prefix = $"[NuGet {iLocal}/{packages.Count}] {id} {version}";
117+
LastProgressSummary = $"Checking NuGet package {iLocal}/{packages.Count}. Approved {approvedPackages.Count} so far.";
114118

115119
bool isExtra = ExtraPackages.Contains(id);
116120
if (!isExtra)
117121
{
118122
if (!await _nuget.IsPermissivelyLicensedAsync(id, version))
119123
{
120124
await LogAsync($"{prefix} - skipped (non-permissive license)");
121-
skippedLicense++;
122-
continue;
125+
Interlocked.Increment(ref skippedLicense);
126+
return;
123127
}
124128
}
125129

@@ -130,23 +134,27 @@ private async Task<List<PackageInfo>> GatherNuGetInfoAsync(int count)
130134
if (dll is null || selectedTfm is null)
131135
{
132136
await LogAsync($"{prefix} - skipped (no suitable DLL)");
133-
skippedNoDlls++;
137+
Interlocked.Increment(ref skippedLicense);
134138
DeleteDirectory(pkgDir);
135-
continue;
139+
return;
136140
}
137141

138142
var deps = await _nuget.ResolveAllDependenciesAsync(id, version, skipLicenseCheck: isExtra);
139143
if (deps is null)
140144
{
141145
await LogAsync($"{prefix} - skipped (dependency with non-permissive license)");
142-
skippedLicense++;
146+
Interlocked.Increment(ref skippedLicense);
143147
DeleteDirectory(pkgDir);
144-
continue;
148+
return;
149+
}
150+
151+
lock (approvedPackages)
152+
{
153+
approvedPackages.Add(new PackageInfo(id, version, pkgDir, dll, deps));
145154
}
146155

147-
approvedPackages.Add(new PackageInfo(id, version, pkgDir, dll, deps));
148156
await LogAsync($"{prefix} - approved ({deps.Count} deps)");
149-
}
157+
});
150158

151159
await LogAsync($"Phase 1 complete: {approvedPackages.Count} approved, {skippedLicense} license, {skippedNoDlls} no DLLs");
152160

@@ -155,7 +163,10 @@ private async Task<List<PackageInfo>> GatherNuGetInfoAsync(int count)
155163
throw new Exception("No packages passed license and DLL checks.");
156164
}
157165

158-
return approvedPackages;
166+
return packages
167+
.Select(p => approvedPackages.FirstOrDefault(ap => ap.Id.Equals(p.Id, StringComparison.OrdinalIgnoreCase) && ap.Version.Equals(p.Version, StringComparison.OrdinalIgnoreCase)))
168+
.Where(ap => ap is not null)
169+
.ToList()!;
159170
}
160171

161172
private async Task ProcessApprovedPackagesAsync(List<PackageInfo> approvedPackages, int maxPackagesToInclude)

0 commit comments

Comments
 (0)