52 lines
1.9 KiB
C#
52 lines
1.9 KiB
C#
using DotNetEnv;
|
|
|
|
namespace ForgejoReleaseSync.Services;
|
|
|
|
public class AppConfig
|
|
{
|
|
public required string ForgejoInstacne { get; set; }
|
|
public required string ForgejoToken { get; set; }
|
|
public required ushort SyncConcurrency { get; set; }
|
|
public required string RepositoryConfigFilePath { get; set; }
|
|
}
|
|
|
|
|
|
public static class AppConfigLoader
|
|
{
|
|
public static AppConfig LoadConfigFromEnv()
|
|
{
|
|
Env.Load();
|
|
|
|
var forgejoInstance = Environment.GetEnvironmentVariable("FORGEJO_INSTANCE");
|
|
var forgejoToken = Environment.GetEnvironmentVariable("FORGEJO_TOKEN");
|
|
var syncConcurrency = Environment.GetEnvironmentVariable("SYNC_CONCURRENCY");
|
|
var repoConfigFilePath = Environment.GetEnvironmentVariable("REPO_CONFIG_FILE");
|
|
|
|
if (string.IsNullOrEmpty(forgejoInstance))
|
|
throw new Exception("FORGEJO_INSTANCE environment variable is required");
|
|
if (!string.IsNullOrEmpty(forgejoToken) && forgejoInstance.EndsWith('/'))
|
|
forgejoInstance = forgejoInstance[..^1];
|
|
|
|
if (string.IsNullOrEmpty(forgejoToken))
|
|
throw new Exception("FORGEJO_TOKEN environment variable is required");
|
|
|
|
ushort syncConcurrencyParsed = 3;
|
|
if (!string.IsNullOrEmpty(syncConcurrency))
|
|
ushort.TryParse(syncConcurrency, out syncConcurrencyParsed);
|
|
if (syncConcurrencyParsed > 10)
|
|
throw new ArgumentOutOfRangeException(nameof(syncConcurrencyParsed),
|
|
"Sync concurrency cannot be greater than 10");
|
|
|
|
if (string.IsNullOrEmpty(repoConfigFilePath))
|
|
throw new Exception("REPO_CONFIG_FILE environment variable is required");
|
|
|
|
|
|
return new AppConfig
|
|
{
|
|
ForgejoInstacne = forgejoInstance,
|
|
ForgejoToken = forgejoToken,
|
|
SyncConcurrency = syncConcurrencyParsed,
|
|
RepositoryConfigFilePath = repoConfigFilePath
|
|
};
|
|
}
|
|
} |