@@ -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
0 commit comments