diff --git a/Program.cs b/Program.cs index c493a2e..e38f857 100644 --- a/Program.cs +++ b/Program.cs @@ -14,7 +14,7 @@ builder.Services.AddSingleton(repositoryConfig); var client = new HttpClient(); client.DefaultRequestHeaders.Add("User-Agent", "ForgejoReleaseSync"); client.DefaultRequestHeaders.Add("Accept", "application/json"); -client.Timeout = TimeSpan.FromSeconds(90); +client.Timeout = TimeSpan.FromMinutes(3); client.MaxResponseContentBufferSize = 1024 * 1024 * 1; builder.Services.AddSingleton(client); diff --git a/Services/ForgejoService.cs b/Services/ForgejoService.cs index 6325baf..f490a14 100644 --- a/Services/ForgejoService.cs +++ b/Services/ForgejoService.cs @@ -9,7 +9,7 @@ namespace ForgejoReleaseSync.Services; public class ForgejoService(HttpClient httpClient, AppConfig config, ILogger logger) { - public async Task CreateReleaseAsync(string owner, string repo, string body, string name, string tagName, CancellationToken token = default) + public async Task> CreateReleaseAsync(string owner, string repo, string body, string name, string tagName, CancellationToken token = default) { try { @@ -26,6 +26,14 @@ public class ForgejoService(HttpClient httpClient, AppConfig config, ILogger> FetchRepoReleasesAsync(string owner, string repo) + public async Task> FetchRepoReleasesAsync(string owner, string repo, CancellationToken token = default) { try { @@ -44,9 +52,9 @@ public class ForgejoService(HttpClient httpClient, AppConfig config, ILogger r.Prerelease == false); + long releaseId; if (lastForgejoRelease is null || lastForgejoRelease.TagName != lastRelease.TagName) { logger.LogInformation("Creating release {ReleaseName} for repo {Owner}/{Name}", lastRelease.Name, repoOwner, repoName); - await forgejoService.CreateReleaseAsync(repoOwner, repoName, lastRelease.Body, lastRelease.Name, lastRelease.TagName); + var createReleaseRes = await forgejoService.CreateReleaseAsync(repoOwner, repoName, lastRelease.Body, lastRelease.Name, lastRelease.TagName); + releaseId = createReleaseRes.LastOrDefault().Id; } + releaseId = lastForgejoRelease.Id; var acceptableAssets = lastRelease.Assets .Where(asset => includeRegex.IsMatch(asset.Name) && - !excludeRegex.IsMatch(asset.Name)) + !excludeRegex.IsMatch(asset.Name) && lastForgejoRelease.Assets.All(releaseAsset => releaseAsset.Name != asset.Name)) .ToArray(); logger.LogInformation( @@ -63,6 +66,12 @@ public class SyncService( var downloadPath = await releaseAssetDownloadService.DownloadReleaseAssetAsync(acceptableAsset.BrowserDownloadUrl); logger.LogInformation($"Downloaded {acceptableAsset.Name} to {downloadPath}"); + + await forgejoService.UploadReleaseAssetAsync(repoOwner, repoName, releaseId, downloadPath); + + logger.LogInformation($"Uploaded {acceptableAsset.Name}"); + + await releaseAssetDownloadService.DeleteReleaseAssetAsync(downloadPath); } } }