diff --git a/.gitea/workflows/build dev.yaml b/.gitea/workflows/build dev.yaml
index 6fb42c5..b5563cf 100644
--- a/.gitea/workflows/build dev.yaml
+++ b/.gitea/workflows/build dev.yaml
@@ -31,39 +31,42 @@ jobs:
with:
name: version
- - name: Build package
+ - name: Build single file executables
run: |
cd sh.actions/sh.actions.package-cleanup
- dotnet build -c Release -p:Version=$(cat ../../version.txt)
- - name: Configure nuget
- run: |
- dotnet nuget add source --name git_sh-edraft_de --username ${{ secrets.CI_USERNAME }} --password ${{ secrets.CI_ACCESS_TOKEN }} --store-password-in-clear-text https://git.sh-edraft.de/api/packages/sh-edraft.de/nuget/index.json
+ # Build for Linux x64
+ dotnet publish -c Release -r linux-x64 -p:Version=$(cat ../../version.txt) -o publish/linux-x64
- - name: Upload
+ - name: Upload to Gitea Generic Package Registry
run: |
cd sh.actions/sh.actions.package-cleanup
- VERSION_FIXED=$(cat ../../version.txt | sed 's/\.0\([0-9]\)/.\1/g' | sed 's/\.0-/-/g')
- dotnet nuget push --source git_sh-edraft_de bin/Release/sh.actions.package-cleanup.$VERSION_FIXED.nupkg
+ curl -X PUT \
+ -H "Authorization: token ${{ secrets.CI_ACCESS_TOKEN }}" \
+ -T publish/linux-x64/sh.actions.package-cleanup \
+ "https://git.sh-edraft.de/api/packages/sh-edraft.de/generic/package-cleanup/$(cat ../../version.txt)/package-cleanup-linux-x64"
- test:
- runs-on: [runner]
- needs: build
- container: git.sh-edraft.de/sh-edraft.de/act-runner:latest
- steps:
- - name: Configure nuget
- run: |
- dotnet nuget add source --name git_sh-edraft_de --username ${{ secrets.CI_USERNAME }} --password ${{ secrets.CI_ACCESS_TOKEN }} --store-password-in-clear-text https://git.sh-edraft.de/api/packages/sh-edraft.de/nuget/index.json
+ # test:
+ # runs-on: [runner]
+ # needs: build
+ # container: git.sh-edraft.de/sh-edraft.de/act-runner:latest
+ # steps:
+ # - name: Download and test package-cleanup tool
+ # shell: bash
+ # run: |
+ # # Create tools directory
+ # mkdir -p .tools
- - name: Install package-cleanup tool
- shell: bash
- run: |
- dotnet tool install \
- --tool-path .tools \
- package-cleanup \
- --source sh-git_sh-edraft_de
+ # # Download the Linux x64 version (since we're running on Linux)
+ # VERSION=$(curl -s https://git.sh-edraft.de/api/packages/sh-edraft.de/generic/package-cleanup | jq -r '.versions[0].name')
+ # curl -L -H "Authorization: token ${{ secrets.CI_ACCESS_TOKEN }}" \
+ # -o .tools/package-cleanup \
+ # "https://git.sh-edraft.de/api/packages/sh-edraft.de/generic/package-cleanup/$VERSION/package-cleanup-linux-x64"
- - name: Run package-cleanup
- shell: bash
- run: |
- ./.tools/sh.actions.package-cleanup
+ # # Make executable
+ # chmod +x .tools/package-cleanup
+
+ # - name: Run package-cleanup
+ # shell: bash
+ # run: |
+ # ./.tools/package-cleanup
diff --git a/sh.actions/sh.actions.package-cleanup/Models/GiteaConfig.cs b/sh.actions/sh.actions.package-cleanup/Models/GiteaConfig.cs
new file mode 100644
index 0000000..ae76675
--- /dev/null
+++ b/sh.actions/sh.actions.package-cleanup/Models/GiteaConfig.cs
@@ -0,0 +1,23 @@
+namespace sh.actions.package_cleanup.Models;
+
+///
+/// Konfiguration für Gitea-Verbindung
+///
+public class GiteaConfig
+{
+ ///
+ /// Basis-URL der Gitea-Instanz (z.B. https://git.example.com)
+ ///
+ public string GiteaUrl { get; set; } = string.Empty;
+
+ ///
+ /// API-Token für Authentifizierung
+ ///
+ public string ApiToken { get; set; } = string.Empty;
+
+ ///
+ /// Owner/Username des Pakets
+ ///
+ public string Owner { get; set; } = string.Empty;
+}
+
diff --git a/sh.actions/sh.actions.package-cleanup/Models/GiteaPackage.cs b/sh.actions/sh.actions.package-cleanup/Models/GiteaPackage.cs
new file mode 100644
index 0000000..d72720f
--- /dev/null
+++ b/sh.actions/sh.actions.package-cleanup/Models/GiteaPackage.cs
@@ -0,0 +1,10 @@
+namespace sh.actions.package_cleanup.Models;
+
+public class GiteaPackage
+{
+ public int Id { get; set; }
+ public string Name { get; set; } = string.Empty;
+ public string Version { get; set; } = string.Empty;
+ public string Type { get; set; } = string.Empty;
+ public DateTime CreatedAt { get; set; }
+}
\ No newline at end of file
diff --git a/sh.actions/sh.actions.package-cleanup/Program.cs b/sh.actions/sh.actions.package-cleanup/Program.cs
index cb1afde..05d239c 100644
--- a/sh.actions/sh.actions.package-cleanup/Program.cs
+++ b/sh.actions/sh.actions.package-cleanup/Program.cs
@@ -1,2 +1,65 @@
// See https://aka.ms/new-console-template for more information
-Console.WriteLine("Hello, World! from ci");
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using sh.actions.package_cleanup.Models;
+using sh.actions.package_cleanup.Service;
+
+Console.WriteLine("Hello, World!");
+//
+// // Setup Dependency Injection
+// var services = new ServiceCollection();
+//
+// // Add Logging
+// services.AddLogging(builder =>
+// builder.AddConsole()
+// .SetMinimumLevel(LogLevel.Information)
+// );
+//
+// // Load configuration from environment variables or appsettings
+// var giteaUrl = Environment.GetEnvironmentVariable("GITEA_URL") ?? "https://git.example.com";
+// var apiToken = Environment.GetEnvironmentVariable("GITEA_API_TOKEN") ?? string.Empty;
+// var owner = Environment.GetEnvironmentVariable("GITEA_OWNER") ?? "sh-edraft";
+//
+// var giteaConfig = new GiteaConfig
+// {
+// GiteaUrl = giteaUrl,
+// ApiToken = apiToken,
+// Owner = owner
+// };
+//
+// services.AddSingleton(giteaConfig);
+//
+// // Add HttpClient
+// services.AddHttpClient();
+//
+// // Build service provider
+// var serviceProvider = services.BuildServiceProvider();
+//
+// try
+// {
+// // Get the service and execute
+// var packageService = serviceProvider.GetRequiredService();
+// var logger = serviceProvider.GetRequiredService>();
+//
+// logger.LogInformation("Starting package cleanup tool");
+// logger.LogInformation("Gitea URL: {GiteaUrl}", giteaUrl);
+// logger.LogInformation("Owner: {Owner}", owner);
+//
+// using var cts = new CancellationTokenSource();
+// var packages = await packageService.GetPackagesByOwnerAsync(cts.Token);
+//
+// logger.LogInformation("Retrieved {Count} packages", packages.Count());
+//
+// foreach (var package in packages)
+// {
+// logger.LogInformation("Package: {Name} (Version: {Version})", package.Name, package.Version);
+// }
+//
+// logger.LogInformation("Package cleanup tool completed successfully");
+// }
+// catch (Exception ex)
+// {
+// var logger = serviceProvider.GetRequiredService>();
+// logger.LogError(ex, "Application error");
+// Environment.Exit(1);
+// }
diff --git a/sh.actions/sh.actions.package-cleanup/README.md b/sh.actions/sh.actions.package-cleanup/README.md
deleted file mode 100644
index 07f0087..0000000
--- a/sh.actions/sh.actions.package-cleanup/README.md
+++ /dev/null
@@ -1 +0,0 @@
-# Gitea package cleanup
\ No newline at end of file
diff --git a/sh.actions/sh.actions.package-cleanup/Service/GiteaPackageService.cs b/sh.actions/sh.actions.package-cleanup/Service/GiteaPackageService.cs
index 6594406..bd13abe 100644
--- a/sh.actions/sh.actions.package-cleanup/Service/GiteaPackageService.cs
+++ b/sh.actions/sh.actions.package-cleanup/Service/GiteaPackageService.cs
@@ -1,6 +1,48 @@
namespace sh.actions.package_cleanup.Service;
-public class GiteaPackageService : IGiteaPackageService
+using System.Net.Http.Json;
+using Microsoft.Extensions.Logging;
+using sh.actions.package_cleanup.Models;
+
+public class GiteaPackageService(HttpClient httpClient, GiteaConfig config, ILogger logger)
+ : IGiteaPackageService
{
-
+ public async Task> GetPackagesByOwnerAsync(CancellationToken cancellationToken = default)
+ {
+ try
+ {
+ var url = $"{config.GiteaUrl.TrimEnd('/')}/api/v1/packages/{config.Owner}";
+
+ logger.LogInformation("Fetching packages from Gitea: {Url}", url);
+
+ var request = new HttpRequestMessage(HttpMethod.Get, url);
+
+ // Add authentication if token is provided
+ if (!string.IsNullOrEmpty(config.ApiToken))
+ {
+ request.Headers.Add("Authorization", $"token {config.ApiToken}");
+ }
+
+ var response = await httpClient.SendAsync(request, cancellationToken);
+ response.EnsureSuccessStatusCode();
+
+ var packages =
+ await response.Content.ReadFromJsonAsync>(cancellationToken: cancellationToken)
+ ?? new List();
+
+ logger.LogInformation("Successfully fetched {Count} packages", packages.Count);
+
+ return packages;
+ }
+ catch (HttpRequestException ex)
+ {
+ logger.LogError(ex, "Error fetching packages from Gitea");
+ throw;
+ }
+ catch (Exception ex)
+ {
+ logger.LogError(ex, "Unexpected error fetching packages");
+ throw;
+ }
+ }
}
\ No newline at end of file
diff --git a/sh.actions/sh.actions.package-cleanup/Service/IGiteaPackageService.cs b/sh.actions/sh.actions.package-cleanup/Service/IGiteaPackageService.cs
index 3ec0b5a..bb3017e 100644
--- a/sh.actions/sh.actions.package-cleanup/Service/IGiteaPackageService.cs
+++ b/sh.actions/sh.actions.package-cleanup/Service/IGiteaPackageService.cs
@@ -1,6 +1,8 @@
namespace sh.actions.package_cleanup.Service;
+using sh.actions.package_cleanup.Models;
+
public interface IGiteaPackageService
{
-
+ Task> GetPackagesByOwnerAsync(CancellationToken cancellationToken = default);
}
\ No newline at end of file
diff --git a/sh.actions/sh.actions.package-cleanup/sh.actions.package-cleanup.csproj b/sh.actions/sh.actions.package-cleanup/sh.actions.package-cleanup.csproj
index f5131f1..038a930 100644
--- a/sh.actions/sh.actions.package-cleanup/sh.actions.package-cleanup.csproj
+++ b/sh.actions/sh.actions.package-cleanup/sh.actions.package-cleanup.csproj
@@ -6,29 +6,26 @@
sh.actions.package_cleanup
enable
enable
-
-
- true
- package-cleanup
-
- sh.actions.package-cleanup
0.0.1
- sh-edraft gitea package cleanup
- Tool to cleanup gitea packages
- edraft
- https://git.sh-edraft.de/sh-edraft.de/actions
- https://git.sh-edraft.de/sh-edraft.de/actions
- git
- MIT
- false
- true
- true
- snupkg
- README.md
+
+
+ true
+ true
+ true
+ true
+ full
+
+
-
+
+
+
+
+
+
+