Skip to content

Commit

Permalink
Merge branch 'feature/prerelease_selection_fix' into 'master'
Browse files Browse the repository at this point in the history
Fix prerelease version selection from nuget api results

See merge request vostok-libraries/devtools!1
  • Loading branch information
Пономарёв Игорь Евгеньевич committed Dec 28, 2023
2 parents e915a93 + 44578cd commit 2247d0d
Showing 1 changed file with 23 additions and 11 deletions.
34 changes: 23 additions & 11 deletions dotnetcementrefs/dotnetcementrefs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -308,19 +308,31 @@ private static IEnumerable<KeyValuePair<string, string>> ConstructMetadata(Proje
var packageSource = new PackageSource(sourceUrl);
var sourceRepository = new SourceRepository(packageSource, providers);
var metadataResource = sourceRepository.GetResource<PackageMetadataResource>();
var versions = (
await metadataResource.GetMetadataAsync(
package,
includePrerelease,
false,
new(),
new NullLogger(),
CancellationToken.None
).ConfigureAwait(false)
).Where(data => data.Identity.Id == package)
var searchResult = await metadataResource.GetMetadataAsync(
package,
includePrerelease,
false,
new(),
new NullLogger(),
CancellationToken.None
).ConfigureAwait(false);
var versions = searchResult
.Where(data => data.Identity.Id == package)
.OrderBy(data => data.Published)
.Select(data => data.Identity.Version)
.ToArray();
return versions.Any() ? versions.Max() : null;
if (versions.Length == 0)
return null;

var maxVer = versions.Max();
// semver doesn't sort suffix numerically, so .Max() will return the oldest prerelease version
// there could be a better solution with proper string comparer,
// but it'll only help if all prerelease versions have the same tag name with numbered suffix
// additionally, if there's a release version available, it must be the most relevant one
// even if there are later prerelease versions published after it
var latest = versions.LastOrDefault(v => v.Version == maxVer.Version && !v.IsPrerelease)
?? versions.Last(v => v.Version == maxVer.Version);
return latest;
}

private class Parameters
Expand Down

0 comments on commit 2247d0d

Please sign in to comment.