Compare commits
15 Commits
master
...
2026.02.14
| Author | SHA1 | Date | |
|---|---|---|---|
| 5e493513f1 | |||
| 0332f08194 | |||
| c19921eb85 | |||
| fef6b580e3 | |||
| 0f48552783 | |||
| a06557dc48 | |||
| 22d0361afe | |||
| 008de6593c | |||
| c6465b70d1 | |||
| f3cff58707 | |||
| 9e25b8c4a1 | |||
| bcfbbfc470 | |||
| b503de71b4 | |||
| e5eb38507b | |||
| 0b0890a07d |
65
.gitea/workflows/build dev.yaml
Normal file
65
.gitea/workflows/build dev.yaml
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
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: |
|
||||||
|
curl -OJ https://git.sh-edraft.de/api/packages/sh-edraft.de/generic/package-cleanup/package-cleanup-linux-x64
|
||||||
|
|
||||||
|
# Make executable
|
||||||
|
chmod +x package-cleanup-linux-x64
|
||||||
|
|
||||||
|
- name: Run package-cleanup
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
./package-cleanup-linux-x64
|
||||||
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
.idea
|
||||||
|
.code
|
||||||
|
|
||||||
|
bin/
|
||||||
|
obj/
|
||||||
19
package-cleanup/action.yaml
Normal file
19
package-cleanup/action.yaml
Normal 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
16
sh.actions.sln
Normal 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
|
||||||
23
sh.actions/sh.actions.package-cleanup/Models/GiteaConfig.cs
Normal file
23
sh.actions/sh.actions.package-cleanup/Models/GiteaConfig.cs
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
10
sh.actions/sh.actions.package-cleanup/Models/GiteaPackage.cs
Normal file
10
sh.actions/sh.actions.package-cleanup/Models/GiteaPackage.cs
Normal 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; }
|
||||||
|
}
|
||||||
65
sh.actions/sh.actions.package-cleanup/Program.cs
Normal file
65
sh.actions/sh.actions.package-cleanup/Program.cs
Normal 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);
|
||||||
|
// }
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
Reference in New Issue
Block a user