Skip to content

Commit fe3814c

Browse files
committed
Handle multiple changes to multiple bumps
1 parent c10f073 commit fe3814c

2 files changed

Lines changed: 55 additions & 33 deletions

File tree

tracer/build/_build/Build.Utilities.cs

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -282,41 +282,49 @@ static Func<string, CooldownMode> BuildCooldownModeSelector(string[] includePack
282282
foreach (var tested in testedVersions)
283283
{
284284
var packageName = tested.NugetPackageSearchName;
285-
var previousMax = versionGenerator
286-
.GetPreviouslyTestedVersions(tested.IntegrationName)
287-
.Where(v => v >= tested.MinVersion && v <= tested.MaxVersion)
288-
.OrderByDescending(v => v)
289-
.FirstOrDefault();
285+
var previouslyTested = versionGenerator.GetPreviouslyTestedVersions(tested.IntegrationName);
290286

291-
if (previousMax is null || tested.MaxVersion > previousMax)
287+
foreach (var selected in tested.SelectedVersions)
292288
{
293-
bumped++;
294-
DateTimeOffset? publishedDate = null;
295-
if (queriedVersions.TryGetValue(packageName, out var versionsForPackage))
289+
// Compare per-slot: entries can have multiple selected versions (one per glob or
290+
// per major), e.g. AWSSDK.Core's 3.3.*, 3.*.*, 4.*.*. Bound the predecessor search
291+
// to same-major and <= selected so each slot's previous max is found independently
292+
// -- a 3.x backport is visible even when the 4.x slot is unchanged.
293+
var previousMax = previouslyTested
294+
.Where(v => v.Major == selected.Major && v <= selected)
295+
.OrderByDescending(v => v)
296+
.FirstOrDefault();
297+
298+
if (previousMax is null || selected > previousMax)
296299
{
297-
var match = versionsForPackage.FirstOrDefault(v => v.Version == tested.MaxVersion.ToString());
298-
publishedDate = match?.Published;
300+
bumped++;
301+
DateTimeOffset? publishedDate = null;
302+
if (queriedVersions.TryGetValue(packageName, out var versionsForPackage))
303+
{
304+
var match = versionsForPackage.FirstOrDefault(v => v.Version == selected.ToString());
305+
publishedDate = match?.Published;
306+
}
307+
308+
versionGenerator.BumpReport.AddBump(new PackageBumpReport.BumpEntry(
309+
packageName,
310+
tested.IntegrationName,
311+
previousMax,
312+
selected,
313+
publishedDate));
314+
315+
Logger.Information(
316+
" {Package} {Previous} -> {Current} (published {Date}, https://www.nuget.org/packages/{Package}/{Current})",
317+
packageName,
318+
previousMax?.ToString() ?? "(new)",
319+
selected,
320+
publishedDate?.UtcDateTime.ToString("yyyy-MM-dd") ?? "(unknown)",
321+
packageName,
322+
selected);
323+
}
324+
else
325+
{
326+
unchanged++;
299327
}
300-
301-
versionGenerator.BumpReport.AddBump(new PackageBumpReport.BumpEntry(
302-
packageName,
303-
tested.IntegrationName,
304-
previousMax,
305-
tested.MaxVersion,
306-
publishedDate));
307-
308-
Logger.Information(
309-
" {Package} {Previous} -> {Current} (published {Date}, https://www.nuget.org/packages/{Package}/{Current})",
310-
packageName,
311-
previousMax?.ToString() ?? "(new)",
312-
tested.MaxVersion,
313-
publishedDate?.UtcDateTime.ToString("yyyy-MM-dd") ?? "(unknown)",
314-
packageName,
315-
tested.MaxVersion);
316-
}
317-
else
318-
{
319-
unchanged++;
320328
}
321329
}
322330

tracer/build/_build/GeneratePackageVersions/PackageVersionGenerator.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,16 @@ where IsSupported(entry, version.ToString(), framework)
165165
{
166166
var earliestVersion = allVersions.First();
167167
var lastVersion = allVersions.Last();
168-
testedVersions.Add(new(entry.NugetPackageSearchName, entry.IntegrationName, earliestVersion, lastVersion));
168+
169+
// One row per distinct selected version preserves split-range / per-glob slots
170+
// (e.g. AWSSDK.Core's 3.3.*, 3.*.*, 4.*.* each produce their own entry), so a
171+
// backport to 3.x is reported even when the overall max 4.x is unchanged.
172+
var selectedVersions = allVersions
173+
.Distinct()
174+
.OrderBy(v => v)
175+
.ToList();
176+
177+
testedVersions.Add(new(entry.NugetPackageSearchName, entry.IntegrationName, earliestVersion, lastVersion, selectedVersions));
169178
}
170179
}
171180

@@ -433,6 +442,11 @@ public void Finish()
433442
}
434443
}
435444

436-
public record TestedPackage(string NugetPackageSearchName, string IntegrationName, Version MinVersion, Version MaxVersion);
445+
public record TestedPackage(
446+
string NugetPackageSearchName,
447+
string IntegrationName,
448+
Version MinVersion,
449+
Version MaxVersion,
450+
IReadOnlyList<Version> SelectedVersions);
437451
}
438452
}

0 commit comments

Comments
 (0)