From 3ae9ec5faf3e2d35902c8895e4a723c78b0d62b4 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Tue, 3 Jan 2023 14:14:17 +0800 Subject: [PATCH 1/2] ci: use ci build flags in ci_build_apps.py --- tools/ci/ci_build_apps.py | 49 ++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/tools/ci/ci_build_apps.py b/tools/ci/ci_build_apps.py index 4f37d7977b..a5d1110c94 100644 --- a/tools/ci/ci_build_apps.py +++ b/tools/ci/ci_build_apps.py @@ -17,6 +17,14 @@ from idf_build_apps import LOGGER, App, build_apps, find_apps, setup_logging from idf_build_apps.constants import SUPPORTED_TARGETS from idf_ci_utils import IDF_PATH, PytestApp, get_pytest_cases, get_ttfw_app_paths +CI_ENV_VARS = { + 'EXTRA_CFLAGS': '-Werror -Werror=deprecated-declarations -Werror=unused-variable ' + '-Werror=unused-but-set-variable -Werror=unused-function', + 'EXTRA_CXXFLAGS': '-Werror -Werror=deprecated-declarations -Werror=unused-variable ' + '-Werror=unused-but-set-variable -Werror=unused-function -Wstrict-prototypes', + 'LDGEN_CHECK_MAPPING': '1', +} + def get_pytest_apps( paths: List[str], @@ -157,22 +165,22 @@ def main(args: argparse.Namespace) -> None: if abs_extra_preserve_dir == abs_app_dir or abs_extra_preserve_dir in abs_app_dir.parents: app.preserve = True - ret_code = build_apps( - apps, - parallel_count=args.parallel_count, - parallel_index=args.parallel_index, - dry_run=False, - build_verbose=args.build_verbose, - keep_going=True, - collect_size_info=args.collect_size_info, - collect_app_info=args.collect_app_info, - ignore_warning_strs=args.ignore_warning_str, - ignore_warning_file=args.ignore_warning_file, - copy_sdkconfig=args.copy_sdkconfig, + sys.exit( + build_apps( + apps, + parallel_count=args.parallel_count, + parallel_index=args.parallel_index, + dry_run=False, + build_verbose=args.build_verbose, + keep_going=True, + collect_size_info=args.collect_size_info, + collect_app_info=args.collect_app_info, + ignore_warning_strs=args.ignore_warning_str, + ignore_warning_file=args.ignore_warning_file, + copy_sdkconfig=args.copy_sdkconfig, + ) ) - sys.exit(ret_code) - if __name__ == '__main__': parser = argparse.ArgumentParser( @@ -276,8 +284,21 @@ if __name__ == '__main__': default=os.path.join(IDF_PATH, '.gitlab', 'ci', 'default-build-test-rules.yml'), help='default build test rules config file', ) + 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.', + ) arguments = parser.parse_args() setup_logging(arguments.verbose) + + # 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(): + os.environ[_k] = _v + LOGGER.info(f'env var {_k} set to "{_v}"') + main(arguments) From 59304efa9ac72be5c59859984ffcf4e4395504f3 Mon Sep 17 00:00:00 2001 From: Fu Hanxi Date: Tue, 3 Jan 2023 14:14:49 +0800 Subject: [PATCH 2/2] test: add test to make sure the build flags are the same as the CI ones --- .gitlab/ci/pre_check.yml | 8 ++++++++ tools/ci/ci_build_apps.py | 15 +++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/.gitlab/ci/pre_check.yml b/.gitlab/ci/pre_check.yml index 55b2126141..1d12dc05af 100644 --- a/.gitlab/ci/pre_check.yml +++ b/.gitlab/ci/pre_check.yml @@ -168,3 +168,11 @@ check_test_scripts_build_test_rules: # required pytest related packages - run_cmd bash install.sh --enable-pytest - python tools/ci/check_build_test_rules.py check-test-scripts examples/ tools/test_apps components + +check_configure_ci_environment_parsing: + extends: + - .pre_check_template + - .before_script_build_jobs + script: + - cd tools/ci + - python -m unittest ci_build_apps.py diff --git a/tools/ci/ci_build_apps.py b/tools/ci/ci_build_apps.py index a5d1110c94..a012ca1327 100644 --- a/tools/ci/ci_build_apps.py +++ b/tools/ci/ci_build_apps.py @@ -8,6 +8,7 @@ This file is used in CI generate binary files for different kinds of apps import argparse import os import sys +import unittest from collections import defaultdict from pathlib import Path from typing import List, Optional, Set @@ -19,9 +20,9 @@ from idf_ci_utils import IDF_PATH, PytestApp, get_pytest_cases, get_ttfw_app_pat CI_ENV_VARS = { 'EXTRA_CFLAGS': '-Werror -Werror=deprecated-declarations -Werror=unused-variable ' - '-Werror=unused-but-set-variable -Werror=unused-function', + '-Werror=unused-but-set-variable -Werror=unused-function -Wstrict-prototypes', 'EXTRA_CXXFLAGS': '-Werror -Werror=deprecated-declarations -Werror=unused-variable ' - '-Werror=unused-but-set-variable -Werror=unused-function -Wstrict-prototypes', + '-Werror=unused-but-set-variable -Werror=unused-function', 'LDGEN_CHECK_MAPPING': '1', } @@ -302,3 +303,13 @@ if __name__ == '__main__': LOGGER.info(f'env var {_k} set to "{_v}"') main(arguments) + + +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)