1# Copyright 2020 The Pigweed Authors 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); you may not 4# use this file except in compliance with the License. You may obtain a copy of 5# the License at 6# 7# https://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12# License for the specific language governing permissions and limitations under 13# the License. 14"""The env module defines the environment variables used by Pigweed.""" 15 16from pathlib import Path 17 18from pw_cli import envparse 19 20 21def pigweed_environment_parser() -> envparse.EnvironmentParser: 22 """Defines Pigweed's environment variables on an EnvironmentParser.""" 23 parser = envparse.EnvironmentParser(prefix='PW_') 24 25 parser.add_var('PW_BOOTSTRAP_PYTHON') 26 parser.add_var('PW_ENABLE_PRESUBMIT_HOOK_WARNING', default=False) 27 parser.add_var('PW_EMOJI', type=envparse.strict_bool, default=False) 28 parser.add_var('PW_ENVSETUP') 29 parser.add_var('PW_ENVSETUP_FULL') 30 parser.add_var( 31 'PW_ENVSETUP_NO_BANNER', type=envparse.strict_bool, default=False 32 ) 33 parser.add_var( 34 'PW_ENVSETUP_QUIET', type=envparse.strict_bool, default=False 35 ) 36 parser.add_var('PW_ENVIRONMENT_ROOT', type=Path) 37 parser.add_var('PW_PACKAGE_ROOT', type=Path) 38 parser.add_var('PW_PROJECT_ROOT', type=Path) 39 parser.add_var('PW_ROOT', type=Path) 40 parser.add_var( 41 'PW_DISABLE_ROOT_GIT_REPO_CHECK', 42 type=envparse.strict_bool, 43 default=False, 44 ) 45 parser.add_var('PW_SKIP_BOOTSTRAP') 46 parser.add_var('PW_SUBPROCESS', type=envparse.strict_bool, default=False) 47 parser.add_var('PW_USE_COLOR', type=envparse.strict_bool, default=True) 48 parser.add_var('PW_USE_GCS_ENVSETUP', type=envparse.strict_bool) 49 50 parser.add_allowed_suffix('_CIPD_INSTALL_DIR') 51 52 parser.add_var( 53 'PW_ENVSETUP_DISABLE_SPINNER', type=envparse.strict_bool, default=False 54 ) 55 parser.add_var('PW_DOCTOR_SKIP_CIPD_CHECKS') 56 parser.add_var( 57 'PW_ACTIVATE_SKIP_CHECKS', type=envparse.strict_bool, default=False 58 ) 59 60 parser.add_var('PW_BANNER_FUNC') 61 parser.add_var('PW_BRANDING_BANNER') 62 parser.add_var('PW_BRANDING_BANNER_COLOR', default='magenta') 63 64 parser.add_var( 65 'PW_PRESUBMIT_DISABLE_SUBPROCESS_CAPTURE', type=envparse.strict_bool 66 ) 67 68 parser.add_var('PW_CONSOLE_CONFIG_FILE') 69 parser.add_var('PW_ENVIRONMENT_NO_ERROR_ON_UNRECOGNIZED') 70 71 parser.add_var('PW_NO_CIPD_CACHE_DIR') 72 parser.add_var('PW_CIPD_SERVICE_ACCOUNT_JSON') 73 74 # RBE environment variables 75 parser.add_var('PW_USE_RBE', default=False) 76 parser.add_var('PW_RBE_DEBUG', default=False) 77 parser.add_var('PW_RBE_CLANG_CONFIG', default='') 78 parser.add_var('PW_RBE_ARM_GCC_CONFIG', default='') 79 80 return parser 81 82 83# Internal: memoize environment parsing to avoid unnecessary computation in 84# multiple calls to pigweed_environment(). 85_memoized_environment: envparse.EnvNamespace | None = None 86 87 88def pigweed_environment() -> envparse.EnvNamespace: 89 """Returns Pigweed's parsed environment.""" 90 global _memoized_environment # pylint: disable=global-statement 91 92 if _memoized_environment is None: 93 _memoized_environment = pigweed_environment_parser().parse_env() 94 95 return _memoized_environment 96