public static validate()

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;
  }