From 4e8b04da7b5f08ca43d0a626dd0127c53244899c Mon Sep 17 00:00:00 2001 From: edraft Date: Sun, 22 Feb 2026 00:17:23 +0100 Subject: [PATCH] Fixed error handling --- package-cleanup/action.yaml | 2 +- .../Service/PackageServiceTests.cs | 48 ++++++++++++++++++- sh.actions.package-cleanup/Worker.cs | 27 +++++++---- sh.actions.sln.DotSettings.user | 4 ++ 4 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 sh.actions.sln.DotSettings.user diff --git a/package-cleanup/action.yaml b/package-cleanup/action.yaml index 147ca58..d35717e 100644 --- a/package-cleanup/action.yaml +++ b/package-cleanup/action.yaml @@ -14,7 +14,7 @@ inputs: types: description: "Types of packages (e.g. Container, PyPi, NuGet)" required: false - default: "Container,PyPi,NuGet" + default: "container,pypi,nuget,npm" api_token: description: "API token for authentication" required: true diff --git a/sh.actions.package-cleanup.Tests/Service/PackageServiceTests.cs b/sh.actions.package-cleanup.Tests/Service/PackageServiceTests.cs index c2bbec0..5e2490e 100644 --- a/sh.actions.package-cleanup.Tests/Service/PackageServiceTests.cs +++ b/sh.actions.package-cleanup.Tests/Service/PackageServiceTests.cs @@ -22,6 +22,29 @@ public class PackageFilterTests }).ToList(); } + [Fact] + public void TestPackageNameParsing() + { + var inputString = + "@sh-edraft.de/core, sh-edraft.core.api, sh-edraft.core.api.auth, sh-edraft.core.api.configuration, sh-edraft.core.api.db, sh-edraft.core.api.graphql, sh-edraft.core.api.service, sh-edraft.core.utils"; + List expected = [ + "@sh-edraft.de/core", + "sh-edraft.core.api", + "sh-edraft.core.api.auth", + "sh-edraft.core.api.configuration", + "sh-edraft.core.api.db", + "sh-edraft.core.api.graphql", + "sh-edraft.core.api.service", + "sh-edraft.core.utils" + ]; + + var actual = inputString + .Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); + + Assert.Equal(expected.Count, actual.Length); + Assert.Equal(expected, actual); + } + [Fact] public void TestFilterPackagesToDelete() { @@ -102,7 +125,26 @@ public class PackageFilterTests "2024.8.10.0-exp", "2024.8.10.1-exp", "2024.8.11.0-exp", - "2024.8.11.2-exp" + "2024.8.11.2-exp", + "2026.2.21.27-dev", + "2026.2.21.26-dev", + "2026.2.21.25-dev", + "2026.2.21.24-dev", + "2026.2.21.23-dev", + "2026.2.21.22-dev", + "2026.2.21.21-dev", + "2026.2.21.20-dev", + "2026.2.21.19-dev", + "2026.2.21.18-dev", + "2026.2.21.17-dev", + "2026.2.21.15-dev", + "2026.2.21.14-dev", + "2026.2.21.13-dev", + "2026.2.21.12-dev", + "2026.2.21.11-dev", + "2026.2.21.10-dev", + "2026.2.21.9-dev", + "2026.2.21.8-dev", ]; private readonly List _versionsToHold = @@ -139,7 +181,9 @@ public class PackageFilterTests "0.1.1-exp", "0.1.2-exp", "2024.8.11.0-exp", - "2024.8.11.2-exp" + "2024.8.11.2-exp", + "2026.2.21.27-dev", + "2026.2.21.26-dev", ]; private List _expectDeleted => _versions.Except(_versionsToHold).ToList(); diff --git a/sh.actions.package-cleanup/Worker.cs b/sh.actions.package-cleanup/Worker.cs index 38dcc57..2f5b937 100644 --- a/sh.actions.package-cleanup/Worker.cs +++ b/sh.actions.package-cleanup/Worker.cs @@ -56,22 +56,31 @@ public class Worker( return; } + logger.LogInformation("Deleting {count} packages: {names}", names.Length, string.Join(", ", names)); + // Process each name separately: collect -> filter -> delete foreach (var name in names) { - logger.LogInformation("Processing packages for name '{Name}'", name); + try + { + logger.LogInformation("Processing packages for name '{Name}'", name); - var packages = (await giteaPackageService.GetPackagesByNameAsync(name, cancellationToken)).ToList(); - logger.LogInformation("Found {Count} packages for name '{Name}'", packages.Count, name); + var packages = (await giteaPackageService.GetPackagesByNameAsync(name, cancellationToken)).ToList(); + logger.LogInformation("Found {Count} packages for name '{Name}'", packages.Count, name); - var packagesToDelete = packageService.FilterPackagesToDelete(packages); - logger.LogInformation("Found {Count} packages to delete for name '{Name}'", packagesToDelete.Count, - name); + var packagesToDelete = packageService.FilterPackagesToDelete(packages); + logger.LogInformation("Found {Count} packages to delete for name '{Name}'", packagesToDelete.Count, + name); - await DeletePackages(packagesToDelete, cancellationToken); - logger.LogInformation("Deleted {Count} packages for name '{Name}'", packagesToDelete.Count, name); + await DeletePackages(packagesToDelete, cancellationToken); + logger.LogInformation("Deleted {Count} packages for name '{Name}'", packagesToDelete.Count, name); - logger.LogInformation("Cleanup finished for name '{Name}'", name); + logger.LogInformation("Cleanup finished for name '{Name}'", name); + } + catch (Exception ex) + { + logger.LogError(ex, "Failed to delete package {PackageName}", name); + } } logger.LogInformation("All package names processed successfully"); diff --git a/sh.actions.sln.DotSettings.user b/sh.actions.sln.DotSettings.user new file mode 100644 index 0000000..be8a2cb --- /dev/null +++ b/sh.actions.sln.DotSettings.user @@ -0,0 +1,4 @@ + + <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from &lt;sh.actions.package-cleanup.Tests&gt;" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <Project Location="/home/sven/dev/git_sh-edraft_de/actions/sh.actions.package-cleanup.Tests" Presentation="&lt;sh.actions.package-cleanup.Tests&gt;" /> +</SessionState> \ No newline at end of file