using System.Security.Cryptography.X509Certificates; using System.Text.RegularExpressions; using Microsoft.Extensions.Logging; namespace ForgejoReleaseSync.Services; public class SyncService( AppConfig config, RepositoryConfig repositoryConfig, GithubService githubService, ILogger logger) { private readonly AppConfig _appConfig = config; private readonly GithubService _githubService = githubService; public async Task Sync() { logger.LogInformation("Starting Sync Service"); logger.LogInformation($"loaded {repositoryConfig.Repositories.Count} repositories"); foreach (var repo in repositoryConfig.Repositories) { var repoOwner = repo.GithubUrl.Split('/')[^2]; var repoName = repo.GithubUrl.Split('/').Last(); var includeRegex = new Regex(repo.IncludeAssetsRegex); var excludeRegex = new Regex(repo.ExcludeAssetsRegex); var releases = await _githubService.FetchRepoReleasesAsync(repoOwner, repoName); var lastRelease = releases.LastOrDefault(r => r.Prerelease == false); if (lastRelease is null) continue; var acceptableAssets = lastRelease.Assets .Where(asset => includeRegex.IsMatch(asset.Name) && !excludeRegex.IsMatch(asset.Name)) .ToArray(); logger.LogInformation( "Repo {Owner}/{Name}: release: {ReleaseName} has {ReleaseCount} assets with matching assets", repoOwner, repoName, lastRelease.Name, acceptableAssets.Length); foreach (var acceptableAsset in acceptableAssets) { logger.LogInformation(acceptableAsset.Name); } } } }