in apps/rush-lib/src/api/EnvironmentConfiguration.ts [310:439]
public static validate(options: IEnvironmentConfigurationInitializeOptions = {}): void {
EnvironmentConfiguration.reset();
const unknownEnvVariables: string[] = [];
for (const envVarName in process.env) {
if (process.env.hasOwnProperty(envVarName) && envVarName.match(/^RUSH_/i)) {
const value: string | undefined = process.env[envVarName];
// Environment variables are only case-insensitive on Windows
const normalizedEnvVarName: string =
os.platform() === 'win32' ? envVarName.toUpperCase() : envVarName;
switch (normalizedEnvVarName) {
case EnvironmentVariableNames.RUSH_TEMP_FOLDER: {
EnvironmentConfiguration._rushTempFolderOverride =
value && !options.doNotNormalizePaths
? EnvironmentConfiguration._normalizeDeepestParentFolderPath(value) || value
: value;
break;
}
case EnvironmentVariableNames.RUSH_ABSOLUTE_SYMLINKS: {
EnvironmentConfiguration._absoluteSymlinks =
EnvironmentConfiguration.parseBooleanEnvironmentVariable(
EnvironmentVariableNames.RUSH_ABSOLUTE_SYMLINKS,
value
) ?? false;
break;
}
case EnvironmentVariableNames.RUSH_ALLOW_UNSUPPORTED_NODEJS: {
if (value === 'true' || value === 'false') {
// Small, undocumented acceptance of old "true" and "false" values for
// users of RUSH_ALLOW_UNSUPPORTED_NODEJS in rush pre-v5.46.
EnvironmentConfiguration._allowUnsupportedNodeVersion = value === 'true';
} else {
EnvironmentConfiguration._allowUnsupportedNodeVersion =
EnvironmentConfiguration.parseBooleanEnvironmentVariable(
EnvironmentVariableNames.RUSH_ALLOW_UNSUPPORTED_NODEJS,
value
) ?? false;
}
break;
}
case EnvironmentVariableNames.RUSH_ALLOW_WARNINGS_IN_SUCCESSFUL_BUILD: {
EnvironmentConfiguration._allowWarningsInSuccessfulBuild =
EnvironmentConfiguration.parseBooleanEnvironmentVariable(
EnvironmentVariableNames.RUSH_ALLOW_WARNINGS_IN_SUCCESSFUL_BUILD,
value
) ?? false;
break;
}
case EnvironmentVariableNames.RUSH_PNPM_STORE_PATH: {
EnvironmentConfiguration._pnpmStorePathOverride =
value && !options.doNotNormalizePaths
? EnvironmentConfiguration._normalizeDeepestParentFolderPath(value) || value
: value;
break;
}
case EnvironmentVariableNames.RUSH_GLOBAL_FOLDER: {
// Handled specially below
break;
}
case EnvironmentVariableNames.RUSH_BUILD_CACHE_CREDENTIAL: {
EnvironmentConfiguration._buildCacheCredential = value;
break;
}
case EnvironmentVariableNames.RUSH_BUILD_CACHE_ENABLED: {
EnvironmentConfiguration._buildCacheEnabled =
EnvironmentConfiguration.parseBooleanEnvironmentVariable(
EnvironmentVariableNames.RUSH_BUILD_CACHE_ENABLED,
value
);
break;
}
case EnvironmentVariableNames.RUSH_BUILD_CACHE_WRITE_ALLOWED: {
EnvironmentConfiguration._buildCacheWriteAllowed =
EnvironmentConfiguration.parseBooleanEnvironmentVariable(
EnvironmentVariableNames.RUSH_BUILD_CACHE_WRITE_ALLOWED,
value
);
break;
}
case EnvironmentVariableNames.RUSH_GIT_BINARY_PATH: {
EnvironmentConfiguration._gitBinaryPath = value;
break;
}
case EnvironmentVariableNames.RUSH_TAR_BINARY_PATH: {
EnvironmentConfiguration._tarBinaryPath = value;
break;
}
case EnvironmentVariableNames.RUSH_PARALLELISM:
case EnvironmentVariableNames.RUSH_PREVIEW_VERSION:
case EnvironmentVariableNames.RUSH_VARIANT:
case EnvironmentVariableNames.RUSH_DEPLOY_TARGET_FOLDER:
// Handled by @microsoft/rush front end
break;
case EnvironmentVariableNames.RUSH_INVOKED_FOLDER:
// Assigned by Rush itself
break;
default:
unknownEnvVariables.push(envVarName);
break;
}
}
}
// This strictness intends to catch mistakes where variables are misspelled or not used correctly.
if (unknownEnvVariables.length > 0) {
throw new Error(
'The following environment variables were found with the "RUSH_" prefix, but they are not ' +
`recognized by this version of Rush: ${unknownEnvVariables.join(', ')}`
);
}
// See doc comment for EnvironmentConfiguration._getRushGlobalFolderOverride().
EnvironmentConfiguration._rushGlobalFolderOverride =
EnvironmentConfiguration._getRushGlobalFolderOverride(process.env);
EnvironmentConfiguration._hasBeenValidated = true;
}