Files
ForgejoReleaseSync/Services/GithubService.cs
T
mahdium be58a82631
Run Forgejo Release Sync / sync (push) Successful in 6m50s
fix: add State enum to JSON serialization context
2026-11-05 00:08:56 +03:30

43 lines
1.5 KiB
C#

using System.Text.Json;
using System.Text.Json.Serialization;
using ForgejoReleaseSync.DTOs;
using ForgejoReleaseSync.DTOs.Forgejo;
using Microsoft.Extensions.Logging;
namespace ForgejoReleaseSync.Services;
public class GithubService(IHttpClientFactory httpClientFactory, ILogger<GithubService> logger)
{
public async Task<List<GithubReleaseResponseDto>> FetchRepoReleasesAsync(
string owner, string repo, CancellationToken token = default)
{
try
{
var httpClient = httpClientFactory.CreateClient("github");
using var response = await httpClient.GetAsync(
$"repos/{owner}/{repo}/releases?per_page=3&page=1", token);
response.EnsureSuccessStatusCode();
await using var stream = await response.Content.ReadAsStreamAsync(token);
var releases = await JsonSerializer.DeserializeAsync(
stream, AppJsonSerializerContext.Default.ListGithubReleaseResponseDto, token);
return releases ?? [];
}
catch (Exception ex)
{
logger.LogError(ex, "Failed to fetch GitHub releases for {Owner}/{Repo}", owner, repo);
throw;
}
}
}
[JsonSerializable(typeof(List<GithubReleaseResponseDto>))]
[JsonSerializable(typeof(ForgejoCreateReleaseDto))]
[JsonSerializable(typeof(ForgejoReleaseResponseDto))]
[JsonSerializable(typeof(List<ForgejoReleaseResponseDto>))]
[JsonSerializable(typeof(State))]
internal partial class AppJsonSerializerContext : JsonSerializerContext
{
}