| 
									
										
										
										
											2024-03-15 09:10:54 +01:00
										 |  |  | # SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  | # SPDX-License-Identifier: Apache-2.0 | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | This file is used in CI generate binary files for different kinds of apps | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | import argparse | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | import sys | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  | import typing as t | 
					
						
							| 
									
										
										
										
											2023-01-03 14:14:49 +08:00
										 |  |  | import unittest | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  | from pathlib import Path | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-06 14:58:16 +08:00
										 |  |  | import yaml | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  | from dynamic_pipelines.constants import DEFAULT_TEST_PATHS | 
					
						
							| 
									
										
										
										
											2024-03-15 09:10:54 +01:00
										 |  |  | from idf_build_apps import build_apps | 
					
						
							|  |  |  | from idf_build_apps import setup_logging | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  | from idf_build_apps.utils import semicolon_separated_str_to_list | 
					
						
							| 
									
										
										
										
											2024-03-15 09:10:54 +01:00
										 |  |  | from idf_pytest.constants import DEFAULT_BUILD_TEST_RULES_FILEPATH | 
					
						
							|  |  |  | from idf_pytest.constants import DEFAULT_CONFIG_RULES_STR | 
					
						
							|  |  |  | from idf_pytest.constants import DEFAULT_FULL_BUILD_TEST_FILEPATTERNS | 
					
						
							|  |  |  | from idf_pytest.constants import DEFAULT_IGNORE_WARNING_FILEPATH | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  | from idf_pytest.script import get_all_apps | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-03 14:14:17 +08:00
										 |  |  | CI_ENV_VARS = { | 
					
						
							|  |  |  |     'EXTRA_CFLAGS': '-Werror -Werror=deprecated-declarations -Werror=unused-variable ' | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  |     '-Werror=unused-but-set-variable -Werror=unused-function -Wstrict-prototypes', | 
					
						
							| 
									
										
										
										
											2023-01-03 14:14:17 +08:00
										 |  |  |     'EXTRA_CXXFLAGS': '-Werror -Werror=deprecated-declarations -Werror=unused-variable ' | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  |     '-Werror=unused-but-set-variable -Werror=unused-function', | 
					
						
							| 
									
										
										
										
											2023-01-03 14:14:17 +08:00
										 |  |  |     'LDGEN_CHECK_MAPPING': '1', | 
					
						
							| 
									
										
										
										
											2024-03-15 09:10:54 +01:00
										 |  |  |     'IDF_CI_BUILD': '1', | 
					
						
							| 
									
										
										
										
											2023-01-03 14:14:17 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | def main(args: argparse.Namespace) -> None: | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  |     extra_default_build_targets: t.List[str] = [] | 
					
						
							| 
									
										
										
										
											2022-09-06 14:58:16 +08:00
										 |  |  |     if args.default_build_test_rules: | 
					
						
							|  |  |  |         with open(args.default_build_test_rules) as fr: | 
					
						
							|  |  |  |             configs = yaml.safe_load(fr) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if configs: | 
					
						
							|  |  |  |             extra_default_build_targets = configs.get('extra_default_build_targets') or [] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |     test_related_apps, non_test_related_apps = get_all_apps( | 
					
						
							|  |  |  |         args.paths, | 
					
						
							|  |  |  |         args.target, | 
					
						
							|  |  |  |         config_rules_str=args.config, | 
					
						
							|  |  |  |         marker_expr=args.marker_expr, | 
					
						
							|  |  |  |         filter_expr=args.filter_expr, | 
					
						
							|  |  |  |         preserve_all=args.preserve_all, | 
					
						
							|  |  |  |         extra_default_build_targets=extra_default_build_targets, | 
					
						
							|  |  |  |         modified_files=args.modified_components, | 
					
						
							|  |  |  |         modified_components=args.modified_files, | 
					
						
							|  |  |  |         ignore_app_dependencies_filepatterns=args.ignore_app_dependencies_filepatterns, | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |     if args.pytest_apps: | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |         apps = test_related_apps | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |     else: | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |         apps = non_test_related_apps | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     if args.extra_preserve_dirs: | 
					
						
							|  |  |  |         for app in apps: | 
					
						
							|  |  |  |             if app.preserve: | 
					
						
							|  |  |  |                 continue | 
					
						
							|  |  |  |             for extra_preserve_dir in args.extra_preserve_dirs: | 
					
						
							| 
									
										
										
										
											2022-07-25 15:54:49 +08:00
										 |  |  |                 abs_extra_preserve_dir = Path(extra_preserve_dir).resolve() | 
					
						
							|  |  |  |                 abs_app_dir = Path(app.app_dir).resolve() | 
					
						
							| 
									
										
										
										
											2022-09-06 14:58:16 +08:00
										 |  |  |                 if abs_extra_preserve_dir == abs_app_dir or abs_extra_preserve_dir in abs_app_dir.parents: | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |                     app.preserve = True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  |     res = build_apps( | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |         sorted(apps), | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  |         parallel_count=args.parallel_count, | 
					
						
							|  |  |  |         parallel_index=args.parallel_index, | 
					
						
							|  |  |  |         dry_run=False, | 
					
						
							|  |  |  |         build_verbose=args.build_verbose, | 
					
						
							|  |  |  |         keep_going=True, | 
					
						
							|  |  |  |         collect_size_info='size_info.txt', | 
					
						
							| 
									
										
										
										
											2023-06-02 15:27:45 +08:00
										 |  |  |         collect_app_info=args.collect_app_info, | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  |         ignore_warning_strs=args.ignore_warning_str, | 
					
						
							|  |  |  |         ignore_warning_file=args.ignore_warning_file, | 
					
						
							|  |  |  |         copy_sdkconfig=args.copy_sdkconfig, | 
					
						
							|  |  |  |         modified_components=args.modified_components, | 
					
						
							|  |  |  |         modified_files=args.modified_files, | 
					
						
							|  |  |  |         ignore_app_dependencies_filepatterns=args.ignore_app_dependencies_filepatterns, | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |         junitxml=args.junitxml, | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |     sys.exit(res) | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     parser = argparse.ArgumentParser( | 
					
						
							|  |  |  |         description='Build all the apps for different test types. Will auto remove those non-test apps binaries', | 
					
						
							|  |  |  |         formatter_class=argparse.ArgumentDefaultsHelpFormatter, | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |     parser.add_argument('paths', nargs='*', help='Paths to the apps to build.') | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '-t', | 
					
						
							|  |  |  |         '--target', | 
					
						
							| 
									
										
										
										
											2022-11-29 16:14:26 +08:00
										 |  |  |         default='all', | 
					
						
							|  |  |  |         help='Build apps for given target', | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |     ) | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--config', | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |         default=DEFAULT_CONFIG_RULES_STR, | 
					
						
							| 
									
										
										
										
											2023-05-24 14:28:26 +08:00
										 |  |  |         nargs='+', | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |         help='Adds configurations (sdkconfig file names) to build. This can either be ' | 
					
						
							|  |  |  |         'FILENAME[=NAME] or FILEPATTERN. FILENAME is the name of the sdkconfig file, ' | 
					
						
							|  |  |  |         'relative to the project directory, to be used. Optional NAME can be specified, ' | 
					
						
							|  |  |  |         'which can be used as a name of this configuration. FILEPATTERN is the name of ' | 
					
						
							|  |  |  |         'the sdkconfig file, relative to the project directory, with at most one wildcard. ' | 
					
						
							|  |  |  |         'The part captured by the wildcard is used as the name of the configuration.', | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '-v', | 
					
						
							|  |  |  |         '--verbose', | 
					
						
							|  |  |  |         action='count', | 
					
						
							|  |  |  |         help='Increase the LOGGER level of the script. Can be specified multiple times.', | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--build-verbose', | 
					
						
							|  |  |  |         action='store_true', | 
					
						
							|  |  |  |         help='Enable verbose output from build system.', | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--preserve-all', | 
					
						
							|  |  |  |         action='store_true', | 
					
						
							|  |  |  |         help='Preserve the binaries for all apps when specified.', | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2022-09-06 14:58:16 +08:00
										 |  |  |     parser.add_argument('--parallel-count', default=1, type=int, help='Number of parallel build jobs.') | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--parallel-index', | 
					
						
							|  |  |  |         default=1, | 
					
						
							|  |  |  |         type=int, | 
					
						
							|  |  |  |         help='Index (1-based) of the job, out of the number specified by --parallel-count.', | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--collect-app-info', | 
					
						
							| 
									
										
										
										
											2023-06-02 15:27:45 +08:00
										 |  |  |         default='list_job_@p.txt', | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |         help='If specified, the test case name and app info json will be written to this file', | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--ignore-warning-str', | 
					
						
							| 
									
										
										
										
											2023-05-24 14:28:26 +08:00
										 |  |  |         nargs='+', | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  |         help='Ignore the warning string that match the specified regex in the build output. space-separated list', | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |     ) | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--ignore-warning-file', | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |         default=DEFAULT_IGNORE_WARNING_FILEPATH, | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |         type=argparse.FileType('r'), | 
					
						
							|  |  |  |         help='Ignore the warning strings in the specified file. Each line should be a regex string.', | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--copy-sdkconfig', | 
					
						
							|  |  |  |         action='store_true', | 
					
						
							|  |  |  |         help='Copy the sdkconfig file to the build directory.', | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							| 
									
										
										
										
											2022-07-25 15:54:49 +08:00
										 |  |  |         '--extra-preserve-dirs', | 
					
						
							|  |  |  |         nargs='+', | 
					
						
							|  |  |  |         help='also preserve binaries of the apps under the specified dirs', | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |     ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--pytest-apps', | 
					
						
							|  |  |  |         action='store_true', | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |         help='Only build apps required by pytest scripts. ' | 
					
						
							|  |  |  |         'Will build non-test-related apps if this flag is unspecified.', | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |     ) | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '-m', | 
					
						
							|  |  |  |         '--marker-expr', | 
					
						
							|  |  |  |         default='not host_test',  # host_test apps would be built and tested under the same job | 
					
						
							|  |  |  |         help='only build tests matching given mark expression. For example: -m "host_test and generic". Works only' | 
					
						
							|  |  |  |         'for pytest', | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2022-11-29 16:14:26 +08:00
										 |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '-k', | 
					
						
							|  |  |  |         '--filter-expr', | 
					
						
							|  |  |  |         help='only build tests matching given filter expression. For example: -k "test_hello_world". Works only' | 
					
						
							|  |  |  |         'for pytest', | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2022-09-06 14:58:16 +08:00
										 |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--default-build-test-rules', | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |         default=DEFAULT_BUILD_TEST_RULES_FILEPATH, | 
					
						
							| 
									
										
										
										
											2022-09-06 14:58:16 +08:00
										 |  |  |         help='default build test rules config file', | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2023-01-03 14:14:17 +08:00
										 |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--skip-setting-flags', | 
					
						
							|  |  |  |         action='store_true', | 
					
						
							|  |  |  |         help='by default this script would set the build flags exactly the same as the CI ones. ' | 
					
						
							|  |  |  |         'Set this flag to use your local build flags.', | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--modified-components', | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |         type=semicolon_separated_str_to_list, | 
					
						
							|  |  |  |         help='semicolon-separated string which specifies the modified components. ' | 
					
						
							|  |  |  |         'app with `depends_components` set in the corresponding manifest files would only be built ' | 
					
						
							|  |  |  |         'if depends on any of the specified components. ' | 
					
						
							|  |  |  |         'If set to "", the value would be considered as None. ' | 
					
						
							|  |  |  |         'If set to ";", the value would be considered as an empty list', | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  |     ) | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--modified-files', | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |         type=semicolon_separated_str_to_list, | 
					
						
							|  |  |  |         help='semicolon-separated string which specifies the modified files. ' | 
					
						
							|  |  |  |         'app with `depends_filepatterns` set in the corresponding manifest files would only be built ' | 
					
						
							|  |  |  |         'if any of the specified file pattern matches any of the specified modified files. ' | 
					
						
							|  |  |  |         'If set to "", the value would be considered as None. ' | 
					
						
							|  |  |  |         'If set to ";", the value would be considered as an empty list', | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  |     ) | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '-if', | 
					
						
							|  |  |  |         '--ignore-app-dependencies-filepatterns', | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |         type=semicolon_separated_str_to_list, | 
					
						
							|  |  |  |         help='semicolon-separated string which specifies the file patterns used for ' | 
					
						
							|  |  |  |         'ignoring checking the app dependencies. ' | 
					
						
							|  |  |  |         'The `depends_components` and `depends_filepatterns` set in the manifest files ' | 
					
						
							|  |  |  |         'will be ignored when any of the specified file patterns matches any of the modified files. ' | 
					
						
							|  |  |  |         'Must be used together with --modified-files. ' | 
					
						
							|  |  |  |         'If set to "", the value would be considered as None. ' | 
					
						
							|  |  |  |         'If set to ";", the value would be considered as an empty list', | 
					
						
							|  |  |  |     ) | 
					
						
							|  |  |  |     parser.add_argument( | 
					
						
							|  |  |  |         '--junitxml', | 
					
						
							|  |  |  |         default='build_summary_@p.xml', | 
					
						
							|  |  |  |         help='Path to the junitxml file. If specified, the junitxml file will be generated', | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  |     ) | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     arguments = parser.parse_args() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     setup_logging(arguments.verbose) | 
					
						
							| 
									
										
										
										
											2023-01-03 14:14:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |     # set default paths | 
					
						
							|  |  |  |     if not arguments.paths: | 
					
						
							|  |  |  |         arguments.paths = DEFAULT_TEST_PATHS | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-03 14:14:17 +08:00
										 |  |  |     # skip setting flags in CI | 
					
						
							|  |  |  |     if not arguments.skip_setting_flags and not os.getenv('CI_JOB_ID'): | 
					
						
							|  |  |  |         for _k, _v in CI_ENV_VARS.items(): | 
					
						
							| 
									
										
										
										
											2024-03-15 09:10:54 +01:00
										 |  |  |             os.environ[_k] = _v  # type: ignore | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |             print(f'env var {_k} set to "{_v}"') | 
					
						
							| 
									
										
										
										
											2023-01-03 14:14:17 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  |     if os.getenv('IS_MR_PIPELINE') == '0' or os.getenv('BUILD_AND_TEST_ALL_APPS') == '1': | 
					
						
							|  |  |  |         # if it's not MR pipeline or env var BUILD_AND_TEST_ALL_APPS=1, | 
					
						
							|  |  |  |         # remove component dependency related arguments | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |         arguments.modified_components = None | 
					
						
							|  |  |  |         arguments.modified_files = None | 
					
						
							|  |  |  |         arguments.ignore_app_dependencies_filepatterns = None | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-12-18 15:29:58 +01:00
										 |  |  |     # default file patterns to tigger full build | 
					
						
							|  |  |  |     if arguments.modified_files is not None and arguments.ignore_app_dependencies_filepatterns is None: | 
					
						
							|  |  |  |         arguments.ignore_app_dependencies_filepatterns = DEFAULT_FULL_BUILD_TEST_FILEPATTERNS | 
					
						
							| 
									
										
										
										
											2023-05-24 10:53:57 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-13 10:34:02 +08:00
										 |  |  |     main(arguments) | 
					
						
							| 
									
										
										
										
											2023-01-03 14:14:49 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class TestParsingShellScript(unittest.TestCase): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     This test case is run in CI jobs to make sure the CI build flags is the same as the ones recorded in CI_ENV_VARS | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_parse_result(self) -> None: | 
					
						
							|  |  |  |         for k, v in CI_ENV_VARS.items(): | 
					
						
							|  |  |  |             self.assertEqual(os.getenv(k), v) |