Forge
csharp3407750f
1using AgentForge.Options;
2
3namespace AgentForge.Configuration;
4
5public static class ForgeEnvironment
6{
7 public static void ApplyEnvironmentOverrides(ForgeOptions options)
8 {
9 options.PublicBaseUrl = Get("FORGE_PUBLIC_BASE_URL") ?? options.PublicBaseUrl;
10 options.DatabasePath = Get("FORGE_DATABASE_PATH") ?? options.DatabasePath;
11 options.ReposPath = Get("FORGE_REPOS_PATH") ?? options.ReposPath;
12 options.GitBaseUrl = Get("FORGE_GIT_BASE_URL") ?? options.GitBaseUrl;
13 options.GitSshPort = ParseInt(Get("FORGE_GIT_SSH_PORT")) ?? options.GitSshPort;
14 options.CiCallbackToken = Get("FORGE_CI_CALLBACK_TOKEN") ?? options.CiCallbackToken;
15 options.CiWebhookUrl = Get("FORGE_CI_WEBHOOK_URL") ?? options.CiWebhookUrl;
16 options.CiWebhookSecret = Get("FORGE_CI_WEBHOOK_SECRET") ?? options.CiWebhookSecret;
17 options.GitHookSecret = Get("FORGE_GIT_HOOK_SECRET") ?? options.GitHookSecret;
18 options.BootstrapToken = Get("FORGE_BOOTSTRAP_TOKEN") ?? options.BootstrapToken;
19 options.RequireAuth = ParseBool(Get("FORGE_REQUIRE_AUTH")) ?? options.RequireAuth;
20 options.RequireGitHookSecret = ParseBool(Get("FORGE_REQUIRE_GIT_HOOK_SECRET")) ?? options.RequireGitHookSecret;
21 options.GitSshSymlinkRoot = Get("FORGE_GIT_SSH_SYMLINK_ROOT") ?? options.GitSshSymlinkRoot;
22 var bundleOverride = Get("FORGE_PLUGIN_BUNDLE");
23 if (bundleOverride is not null)
24 options.PluginBundle = bundleOverride;
25
26 options.PluginsPath = Get("FORGE_PLUGINS_PATH") ?? options.PluginsPath;
27 options.WatchPlugins = ParseBool(Get("FORGE_WATCH_PLUGINS")) ?? options.WatchPlugins;
28
29 options.OAuth.GitHub.ClientId = Get("FORGE_GITHUB_CLIENT_ID") ?? options.OAuth.GitHub.ClientId;
30 options.OAuth.GitHub.ClientSecret = Get("FORGE_GITHUB_CLIENT_SECRET") ?? options.OAuth.GitHub.ClientSecret;
31 options.OAuth.Oidc.Authority = Get("FORGE_OIDC_AUTHORITY") ?? options.OAuth.Oidc.Authority;
32 options.OAuth.Oidc.ClientId = Get("FORGE_OIDC_CLIENT_ID") ?? options.OAuth.Oidc.ClientId;
33 options.OAuth.Oidc.ClientSecret = Get("FORGE_OIDC_CLIENT_SECRET") ?? options.OAuth.Oidc.ClientSecret;
34 options.OAuth.Oidc.DisplayName = Get("FORGE_OIDC_DISPLAY_NAME") ?? options.OAuth.Oidc.DisplayName;
35 options.OAuth.Oidc.ProviderId = Get("FORGE_OIDC_PROVIDER_ID") ?? options.OAuth.Oidc.ProviderId;
36 options.OAuth.Oidc.Scope = Get("FORGE_OIDC_SCOPE") ?? options.OAuth.Oidc.Scope;
37 options.DefaultOrgSlug = Get("FORGE_DEFAULT_ORG_SLUG") ?? options.DefaultOrgSlug;
38 options.OAuthSignInPolicy = Get("FORGE_OAUTH_SIGNIN_POLICY") ?? options.OAuthSignInPolicy;
39 options.OAuthGitHubOrg = Get("FORGE_OAUTH_GITHUB_ORG") ?? options.OAuthGitHubOrg;
40 options.OrgAutoMemberOnLogin = ParseBool(Get("FORGE_ORG_AUTO_MEMBER_ON_LOGIN")) ?? options.OrgAutoMemberOnLogin;
41 options.GitHubImportToken = Get("FORGE_GITHUB_IMPORT_TOKEN") ?? options.GitHubImportToken;
42 options.ImportCatalogPath = Get("FORGE_IMPORT_CATALOG_PATH") ?? options.ImportCatalogPath;
43 options.ImportVisibilityPolicy = Get("FORGE_IMPORT_VISIBILITY_POLICY") ?? options.ImportVisibilityPolicy;
44 }
45
46 private static int? ParseInt(string? value) =>
47 int.TryParse(value, out var parsed) ? parsed : null;
48
49 private static bool? ParseBool(string? value) =>
50 bool.TryParse(value, out var parsed) ? parsed : null;
51
52 public static void Configure(IConfigurationBuilder builder) =>
53 builder.AddEnvironmentVariables(prefix: "FORGE_");
54
55 private static string? Get(string name) =>
56 Environment.GetEnvironmentVariable(name) is { Length: > 0 } value ? value : null;
57}
58
View only · write via MCP/CIDE