Some improvements
Some checks failed
Build on push / prepare (push) Successful in 6s
Build on push / build (push) Failing after 4s

This commit is contained in:
2026-02-15 03:20:03 +01:00
parent 8586a09cd0
commit ca51f738c0
3 changed files with 80 additions and 30 deletions

View File

@@ -1,19 +1,42 @@
name: "package cleanup"
description: "Cleans up old packages and versions"
inputs:
url:
description: "Server URL"
required: true
names:
description: "Names of packages"
required: true
owner:
description: "Owner of the package"
required: true
types:
description: "Types of packages (e.g. Container, PyPi, NuGet)"
required: false
default: "Container,PyPi,NuGet"
api_token:
description: "API token for authentication"
required: true
runs:
using: "composite"
steps:
- name: Install set-version tool
- name: Download and test package-cleanup tool
shell: bash
run: |
dotnet tool install \
--tool-path .tools \
ShEdraft.SetVersion \
--version 1.0.0 \
--add-source https://git.sh-edraft.de/api/packages/sh-edraft.de/nuget/index.json
curl -OJ https://git.sh-edraft.de/api/packages/sh-edraft.de/generic/package-cleanup/package-cleanup-linux-x64
- name: Run set-version
# Make executable
chmod +x package-cleanup-linux-x64
- name: Run package-cleanup
shell: bash
env:
URL: ${{ inputs.url }}
OWNER: ${{ inputs.owner }}
TYPES: ${{ inputs.types }}
NAMES: ${{ inputs.names }}
API_TOKEN: ${{ inputs.api_token }}
run: |
./.tools/set-version --suffix dev
./package-cleanup-linux-x64

View File

@@ -15,7 +15,7 @@ public static class ConfigurationExtension
public static IConfigurationBuilder EnsureGiteaConfig(this IConfigurationBuilder builder)
{
var configuration = builder.Build();
var requiredKeys = new[] { "URL", "OWNER", "TYPE", "NAME", "API_TOKEN" };
var requiredKeys = new[] { "URL", "OWNER", "TYPES", "NAME", "API_TOKEN" };
foreach (var key in requiredKeys)
{

View File

@@ -11,7 +11,7 @@ public class GiteaPackageService(
: IGiteaPackageService
{
private string GetBaseUrl() =>
$"{configuration["URL"]?.TrimEnd('/')}/packages/{configuration["OWNER"]}/{configuration["TYPE"]}/{configuration["NAME"]}";
$"{configuration["URL"]?.TrimEnd('/')}/packages/{configuration["OWNER"]}";
private void AddAuthorizationHeader(HttpRequestMessage request)
{
@@ -28,32 +28,59 @@ public class GiteaPackageService(
{
var baseUrl = GetBaseUrl();
var allPackages = new List<GiteaPackage>();
var page = 1;
while (true)
// Parse comma-separated types
var types = (configuration["TYPE"] ?? "")
.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
if (types.Length == 0)
{
var url = $"{baseUrl}?page={page}";
logger.LogInformation("Fetching packages from Gitea: {Url}", url);
logger.LogWarning("No package types configured");
return allPackages;
}
var request = new HttpRequestMessage(HttpMethod.Get, url);
AddAuthorizationHeader(request);
// Parse comma-separated names
var names = (configuration["NAMES"] ?? "")
.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
var response = await httpClient.SendAsync(request, cancellationToken);
response.EnsureSuccessStatusCode();
if (names.Length == 0)
{
logger.LogWarning("No package names configured");
return allPackages;
}
var packages =
await response.Content.ReadFromJsonAsync<List<GiteaPackage>>(cancellationToken: cancellationToken)
?? [];
if (packages.Count == 0)
foreach (var type in types)
{
foreach (var name in names)
{
break;
var page = 1;
while (true)
{
var url = $"{baseUrl}/{type}/{name}?page={page}";
logger.LogInformation("Fetching packages from Gitea: {Url}", url);
var request = new HttpRequestMessage(HttpMethod.Get, url);
AddAuthorizationHeader(request);
var response = await httpClient.SendAsync(request, cancellationToken);
response.EnsureSuccessStatusCode();
var packages =
await response.Content.ReadFromJsonAsync<List<GiteaPackage>>(cancellationToken: cancellationToken)
?? [];
if (packages.Count == 0)
{
break;
}
allPackages.AddRange(packages);
logger.LogInformation("Fetched {Count} packages from page {Page}", packages.Count, page);
page++;
}
}
allPackages.AddRange(packages);
logger.LogInformation("Fetched {Count} packages from page {Page}", packages.Count, page);
page++;
}
logger.LogInformation("Successfully fetched {Count} packages in total", allPackages.Count);
@@ -76,7 +103,7 @@ public class GiteaPackageService(
try
{
var baseUrl = GetBaseUrl();
var url = $"{baseUrl}/{package.Version}";
var url = $"{baseUrl}/{package.Type}/{package.Name}/{package.Version}";
logger.LogInformation("Deleting package {PackageName} (ID: {PackageId}) from Gitea",
package.Name, package.Id);