|
6 | 6 | import * as semver from 'semver'
|
7 | 7 | import * as vscode from 'vscode'
|
8 | 8 | import * as packageJson from '../../../package.json'
|
| 9 | +import { getLogger } from '../logger' |
| 10 | +import { onceChanged } from '../utilities/functionUtils' |
9 | 11 |
|
10 | 12 | /**
|
11 | 13 | * Returns true if the current build is running on CI (build server).
|
@@ -89,3 +91,39 @@ export function getCodeCatalystSpaceName(): string | undefined {
|
89 | 91 | // TODO: remove legacy __DEV_ENVIRONMENT_ORGANIZATION_NAME
|
90 | 92 | return process.env['__DEV_ENVIRONMENT_SPACE_NAME'] || process.env['__DEV_ENVIRONMENT_ORGANIZATION_NAME']
|
91 | 93 | }
|
| 94 | + |
| 95 | +type ConfigToEnvMap = { [key: string]: string } |
| 96 | +type ServiceConfig = Partial<{ [K in keyof ConfigToEnvMap]: any }> |
| 97 | +const logConfigsOnce: { [key: string]: ReturnType<typeof onceChanged> } = {} |
| 98 | + |
| 99 | +/** |
| 100 | + * Accepts a service name and a {config key -> expected env var name} map. |
| 101 | + * For each config key, check if the associated env var exists and return |
| 102 | + * a config map with the found values. Changes are logged once for each |
| 103 | + * service/found env var combos. |
| 104 | + */ |
| 105 | +export function getServiceEnvVarConfig(service: string, configToEnvMap: ConfigToEnvMap): ServiceConfig { |
| 106 | + const config: ServiceConfig = {} |
| 107 | + const overriden: string[] = [] |
| 108 | + |
| 109 | + // Find env vars for each field in the config |
| 110 | + for (const [field, envKey] of Object.entries(configToEnvMap)) { |
| 111 | + if (envKey in process.env) { |
| 112 | + config[field] = process.env[envKey] |
| 113 | + overriden.push(envKey) |
| 114 | + } |
| 115 | + } |
| 116 | + |
| 117 | + // Log env var overrides, keeping track of which service we are logging for. |
| 118 | + // This allows us to log only once when env vars for a service change. |
| 119 | + if (overriden.length > 0) { |
| 120 | + if (!(service in logConfigsOnce)) { |
| 121 | + logConfigsOnce[service] = onceChanged(vars => { |
| 122 | + getLogger().info(`using env vars for ${service} config: ${vars}`) |
| 123 | + }) |
| 124 | + } |
| 125 | + logConfigsOnce[service](overriden) |
| 126 | + } |
| 127 | + |
| 128 | + return config |
| 129 | +} |
0 commit comments