Files
actions/sh.actions.package-cleanup/Service/PackageService.cs
edraft 8cdd6a6e0e
Some checks failed
Build on push / prepare (push) Successful in 7s
Build on push / build (push) Failing after 4s
Should fix output problem
2026-02-15 10:11:29 +01:00

50 lines
2.0 KiB
C#

using sh.actions.package_cleanup.Models;
namespace sh.actions.package_cleanup.Service;
public class PackageService(IGiteaPackageService packageService) : IPackageService
{
public async Task<List<GiteaPackage>> GetFilteredPackages()
{
return (await packageService.GetPackagesByOwnerAsync()).ToList();
}
public List<GiteaPackage> FilterPackagesToDelete(List<GiteaPackage> packages)
{
var versionMap = packages.ToDictionary(p => p.Version, p => SoftwareVersion.Parse(p.Version));
var versionsToKeep = new HashSet<string>();
foreach (var package in packages
.Where(p => string.IsNullOrEmpty(versionMap[p.Version].Suffix))
.GroupBy(p => versionMap[p.Version].ToString())
.Select(g => g.OrderBy(p => p.Version.Length).First()))
{
versionsToKeep.Add(package.Version);
}
var latestVersion = packages.FirstOrDefault(p => versionMap[p.Version].IsLatest);
if (latestVersion != null)
{
versionsToKeep.Add(latestVersion.Version);
}
var suffixedVersionsToKeep = packages
.Where(p => !string.IsNullOrEmpty(versionMap[p.Version].Suffix) &&
!(versionMap[p.Version].Major == 0 && versionMap[p.Version].Minor == 0 &&
versionMap[p.Version].Patch == 0))
.GroupBy(p => (versionMap[p.Version].Suffix, versionMap[p.Version].Major, versionMap[p.Version].Minor))
.SelectMany(g => g
.OrderByDescending(p => versionMap[p.Version].Patch)
.ThenByDescending(p => versionMap[p.Version].Build)
.Take(2)
.GroupBy(p => versionMap[p.Version].ToString())
.Select(group => group.OrderBy(p => p.Version.Length).First()));
foreach (var package in suffixedVersionsToKeep)
{
versionsToKeep.Add(package.Version);
}
return packages.Where(p => !versionsToKeep.Contains(p.Version)).ToList();
}
}