using System.Net.Http.Headers; using ForgejoReleaseSync.Services; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; var builder = Host.CreateApplicationBuilder(args); var config = AppConfigLoader.LoadConfigFromEnv(); builder.Services.AddSingleton(config); var repositoryConfig = await RepoConfigLoader.LoadConfigAsync(config.RepositoryConfigFilePath); builder.Services.AddSingleton(repositoryConfig); builder.Services.AddHttpClient("github", client => { client.BaseAddress = new Uri("https://api.github.com/"); client.DefaultRequestHeaders.UserAgent.ParseAdd("ForgejoReleaseSync"); client.DefaultRequestHeaders.Accept.ParseAdd("application/vnd.github+json"); }); builder.Services.AddHttpClient("forgejo", client => { client.BaseAddress = new Uri(config.ForgejoInstacne.TrimEnd('/') + "/"); client.DefaultRequestHeaders.UserAgent.ParseAdd("ForgejoReleaseSync"); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("token", config.ForgejoToken); }); builder.Services.AddHttpClient("asset-download", client => { client.DefaultRequestHeaders.UserAgent.ParseAdd("ForgejoReleaseSync"); }); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(); var app = builder.Build(); using var scope = app.Services.CreateScope(); await scope.ServiceProvider .GetRequiredService() .Sync();