Compare commits

...

14 Commits

Author SHA1 Message Date
0332f08194 Try generic upload
All checks were successful
Build on push / prepare (push) Successful in 19s
Build on push / build (push) Successful in 23s
2026-02-14 17:56:57 +01:00
c19921eb85 Try fix install
Some checks failed
Build on push / prepare (push) Successful in 5s
Build on push / build (push) Successful in 25s
Build on push / test (push) Failing after 2s
2026-02-14 17:45:35 +01:00
fef6b580e3 Auth for nuget tooling
Some checks failed
Build on push / prepare (push) Successful in 27s
Build on push / build (push) Successful in 14s
Build on push / test (push) Failing after 2s
2026-02-14 17:42:04 +01:00
0f48552783 Use local action
Some checks failed
Build on push / prepare (push) Successful in 26s
Build on push / build (push) Successful in 31s
Build on push / test (push) Failing after 2s
2026-02-14 17:26:55 +01:00
a06557dc48 use local action
Some checks failed
Build on push / prepare (push) Failing after 1s
Build on push / build (push) Has been skipped
Build on push / test (push) Has been skipped
2026-02-14 17:24:54 +01:00
22d0361afe Fixed install
Some checks failed
Build on push / prepare (push) Successful in 28s
Build on push / build (push) Successful in 33s
Build on push / test (push) Failing after 2s
2026-02-14 17:15:07 +01:00
008de6593c Refixed action
Some checks failed
Build on push / prepare (push) Successful in 27s
Build on push / build (push) Successful in 34s
Build on push / test (push) Failing after 2s
2026-02-14 17:13:07 +01:00
c6465b70d1 test local action
Some checks failed
Build on push / prepare (push) Failing after 1s
Build on push / build (push) Has been skipped
Build on push / test (push) Has been skipped
2026-02-14 17:09:05 +01:00
f3cff58707 Fixed tool install
Some checks failed
Build on push / prepare (push) Successful in 6s
Build on push / build (push) Failing after 5s
Build on push / test (push) Has been skipped
2026-02-14 16:58:03 +01:00
9e25b8c4a1 Fixed build
Some checks failed
Build on push / prepare (push) Successful in 5s
Build on push / build (push) Successful in 13s
Build on push / test (push) Failing after 2s
2026-02-14 16:56:38 +01:00
bcfbbfc470 Added readme
Some checks failed
Build on push / prepare (push) Successful in 6s
Build on push / build (push) Failing after 13s
Build on push / test (push) Has been skipped
2026-02-14 16:55:11 +01:00
b503de71b4 fixed build
Some checks failed
Build on push / prepare (push) Successful in 5s
Build on push / build (push) Failing after 6s
Build on push / test (push) Has been skipped
2026-02-14 16:41:54 +01:00
e5eb38507b trigger ci
Some checks failed
Build on push / prepare (push) Successful in 19s
Build on push / test (push) Failing after 2s
2026-02-14 16:40:54 +01:00
0b0890a07d Added package cleanup project 2026-02-14 16:39:25 +01:00
10 changed files with 297 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
name: Build on push
run-name: Build on push
on:
push:
branches:
- dev
jobs:
prepare:
runs-on: [runner]
container: git.sh-edraft.de/sh-edraft.de/act-runner:latest
steps:
- uses: https://git.sh-edraft.de/sh-edraft.de/actions/set-version@dev
with:
version_suffix: dev
env:
CI_ACCESS_TOKEN: ${{ secrets.CI_ACCESS_TOKEN }}
build:
runs-on: [runner]
needs: prepare
container: git.sh-edraft.de/sh-edraft.de/act-runner:latest
steps:
- name: Clone Repository
uses: https://github.com/actions/checkout@v3
with:
token: ${{ secrets.CI_ACCESS_TOKEN }}
- name: Download build version artifact
uses: actions/download-artifact@v3
with:
name: version
- name: Build single file executables
run: |
cd sh.actions/sh.actions.package-cleanup
# Build for Linux x64
dotnet publish -c Release -r linux-x64 -p:Version=$(cat ../../version.txt) -o publish/linux-x64
- name: Upload to Gitea Generic Package Registry
run: |
cd sh.actions/sh.actions.package-cleanup
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: Download and test package-cleanup tool
# shell: bash
# run: |
# # Create tools directory
# mkdir -p .tools
# # 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"
# # Make executable
# chmod +x .tools/package-cleanup
# - name: Run package-cleanup
# shell: bash
# run: |
# ./.tools/package-cleanup

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
.idea
.code
bin/
obj/

View File

@@ -0,0 +1,19 @@
name: "package cleanup"
description: "Cleans up old packages and versions"
runs:
using: "composite"
steps:
- name: Install set-version 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
- name: Run set-version
shell: bash
run: |
./.tools/set-version --suffix dev

16
sh.actions.sln Normal file
View File

@@ -0,0 +1,16 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "sh.actions.package-cleanup", "sh.actions/sh.actions.package-cleanup\sh.actions.package-cleanup.csproj", "{F4995B6A-2CA1-4CD4-AEAC-BE397AF1910A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F4995B6A-2CA1-4CD4-AEAC-BE397AF1910A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F4995B6A-2CA1-4CD4-AEAC-BE397AF1910A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F4995B6A-2CA1-4CD4-AEAC-BE397AF1910A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F4995B6A-2CA1-4CD4-AEAC-BE397AF1910A}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,23 @@
namespace sh.actions.package_cleanup.Models;
/// <summary>
/// Konfiguration für Gitea-Verbindung
/// </summary>
public class GiteaConfig
{
/// <summary>
/// Basis-URL der Gitea-Instanz (z.B. https://git.example.com)
/// </summary>
public string GiteaUrl { get; set; } = string.Empty;
/// <summary>
/// API-Token für Authentifizierung
/// </summary>
public string ApiToken { get; set; } = string.Empty;
/// <summary>
/// Owner/Username des Pakets
/// </summary>
public string Owner { get; set; } = string.Empty;
}

View File

@@ -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; }
}

View File

@@ -0,0 +1,65 @@
// See https://aka.ms/new-console-template for more information
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<IGiteaPackageService, GiteaPackageService>();
//
// // Build service provider
// var serviceProvider = services.BuildServiceProvider();
//
// try
// {
// // Get the service and execute
// var packageService = serviceProvider.GetRequiredService<IGiteaPackageService>();
// var logger = serviceProvider.GetRequiredService<ILogger<Program>>();
//
// 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<ILogger<Program>>();
// logger.LogError(ex, "Application error");
// Environment.Exit(1);
// }

View File

@@ -0,0 +1,48 @@
namespace sh.actions.package_cleanup.Service;
using System.Net.Http.Json;
using Microsoft.Extensions.Logging;
using sh.actions.package_cleanup.Models;
public class GiteaPackageService(HttpClient httpClient, GiteaConfig config, ILogger<GiteaPackageService> logger)
: IGiteaPackageService
{
public async Task<IEnumerable<GiteaPackage>> 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<List<GiteaPackage>>(cancellationToken: cancellationToken)
?? new List<GiteaPackage>();
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;
}
}
}

View File

@@ -0,0 +1,8 @@
namespace sh.actions.package_cleanup.Service;
using sh.actions.package_cleanup.Models;
public interface IGiteaPackageService
{
Task<IEnumerable<GiteaPackage>> GetPackagesByOwnerAsync(CancellationToken cancellationToken = default);
}

View File

@@ -0,0 +1,31 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace>sh.actions.package_cleanup</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<Version Condition="'$(Version)' == ''">0.0.1</Version>
<!-- Single File Publishing -->
<PublishSingleFile>true</PublishSingleFile>
<SelfContained>true</SelfContained>
<IncludeNativeLibrariesForSelfExtract>true</IncludeNativeLibrariesForSelfExtract>
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>full</TrimMode>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="10.0.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="10.0.0" />
<PackageReference Include="System.Net.Http.Json" Version="10.0.0" />
</ItemGroup>
</Project>