From 7ecdb1bb27a09b048e7b888700e75072a4cab8f9 Mon Sep 17 00:00:00 2001 From: Ivan Grokhotkov Date: Mon, 10 Dec 2018 13:26:40 +0800 Subject: [PATCH] ci, examples: use sdkconfig.ci as an extra defaults file, if present - Allows placing CI-specific settings into sdkconfig.ci file - Allows substituting environment variables in sdkconfig.ci --- examples/protocols/mqtt/tcp/sdkconfig | 1 - examples/protocols/mqtt/tcp/sdkconfig.ci | 2 ++ .../protocols/mqtt/tcp/sdkconfig.defaults | 7 ----- tools/ci/build_examples.sh | 11 ++++++++ tools/ci/build_examples_cmake.sh | 13 ++++++++- tools/ci/envsubst.py | 27 +++++++++++++++++++ tools/ci/executable-list.txt | 1 + tools/cmake/kconfig.cmake | 4 +-- 8 files changed, 55 insertions(+), 11 deletions(-) delete mode 100644 examples/protocols/mqtt/tcp/sdkconfig create mode 100644 examples/protocols/mqtt/tcp/sdkconfig.ci delete mode 100644 examples/protocols/mqtt/tcp/sdkconfig.defaults create mode 100755 tools/ci/envsubst.py diff --git a/examples/protocols/mqtt/tcp/sdkconfig b/examples/protocols/mqtt/tcp/sdkconfig deleted file mode 100644 index 8b1378917..000000000 --- a/examples/protocols/mqtt/tcp/sdkconfig +++ /dev/null @@ -1 +0,0 @@ - diff --git a/examples/protocols/mqtt/tcp/sdkconfig.ci b/examples/protocols/mqtt/tcp/sdkconfig.ci new file mode 100644 index 000000000..09ca8f37c --- /dev/null +++ b/examples/protocols/mqtt/tcp/sdkconfig.ci @@ -0,0 +1,2 @@ +CONFIG_LOG_DEFAULT_LEVEL_DEBUG=y +CONFIG_BROKER_URL="FROM_STDIN" diff --git a/examples/protocols/mqtt/tcp/sdkconfig.defaults b/examples/protocols/mqtt/tcp/sdkconfig.defaults deleted file mode 100644 index 51c813913..000000000 --- a/examples/protocols/mqtt/tcp/sdkconfig.defaults +++ /dev/null @@ -1,7 +0,0 @@ -CONFIG_BROKER_URL="FROM_STDIN" -CONFIG_LOG_DEFAULT_LEVEL_NONE= -CONFIG_LOG_DEFAULT_LEVEL_ERROR= -CONFIG_LOG_DEFAULT_LEVEL_WARN= -CONFIG_LOG_DEFAULT_LEVEL_INFO= -CONFIG_LOG_DEFAULT_LEVEL_DEBUG=y -CONFIG_LOG_DEFAULT_LEVEL_VERBOSE= diff --git a/tools/ci/build_examples.sh b/tools/ci/build_examples.sh index eb8a5993a..ab2b3213a 100755 --- a/tools/ci/build_examples.sh +++ b/tools/ci/build_examples.sh @@ -61,6 +61,7 @@ FAILED_EXAMPLES="" RESULT_ISSUES=22 # magic number result code for issues found LOG_SUSPECTED=${LOG_PATH}/common_log.txt touch ${LOG_SUSPECTED} +SDKCONFIG_DEFAULTS_CI=sdkconfig.ci EXAMPLE_PATHS=$( find ${IDF_PATH}/examples/ -type f -name Makefile | grep -v "/build_system/cmake/" | sort ) @@ -132,6 +133,16 @@ build_example () { export EXTRA_CFLAGS=${PEDANTIC_CFLAGS} export EXTRA_CXXFLAGS=${EXTRA_CFLAGS} + # sdkconfig files are normally not checked into git, but may be present when + # a developer runs this script locally + rm -f sdkconfig + + # If sdkconfig.ci file is present, append it to sdkconfig.defaults, + # replacing environment variables + if [[ -f "$SDKCONFIG_DEFAULTS_CI" ]]; then + cat $SDKCONFIG_DEFAULTS_CI | $IDF_PATH/tools/ci/envsubst.py >> sdkconfig.defaults + fi + # build non-verbose first local BUILDLOG=${LOG_PATH}/ex_${ID}_log.txt touch ${BUILDLOG} diff --git a/tools/ci/build_examples_cmake.sh b/tools/ci/build_examples_cmake.sh index 009cc2205..b0039f9a9 100755 --- a/tools/ci/build_examples_cmake.sh +++ b/tools/ci/build_examples_cmake.sh @@ -64,6 +64,7 @@ FAILED_EXAMPLES="" RESULT_ISSUES=22 # magic number result code for issues found LOG_SUSPECTED=${LOG_PATH}/common_log.txt touch ${LOG_SUSPECTED} +SDKCONFIG_DEFAULTS_CI=sdkconfig.ci EXAMPLE_PATHS=$( find ${IDF_PATH}/examples/ -type f -name CMakeLists.txt | grep -v "/components/" | grep -v "/main/" | sort ) @@ -122,6 +123,16 @@ build_example () { export EXTRA_CFLAGS=${PEDANTIC_CFLAGS} export EXTRA_CXXFLAGS=${EXTRA_CFLAGS} + # sdkconfig files are normally not checked into git, but may be present when + # a developer runs this script locally + rm -f sdkconfig + + # If sdkconfig.ci file is present, append it to sdkconfig.defaults, + # replacing environment variables + if [[ -f "$SDKCONFIG_DEFAULTS_CI" ]]; then + cat $SDKCONFIG_DEFAULTS_CI | $IDF_PATH/tools/ci/envsubst.py >> sdkconfig.defaults + fi + # build non-verbose first local BUILDLOG=${LOG_PATH}/ex_${ID}_log.txt touch ${BUILDLOG} @@ -130,7 +141,7 @@ build_example () { idf.py fullclean >>${BUILDLOG} 2>&1 && idf.py build >>${BUILDLOG} 2>&1 else - rm -rf build sdkconfig && + rm -rf build && ./build.sh >>${BUILDLOG} 2>&1 fi && cp build/flash_project_args build/download.config || # backwards compatible download.config filename diff --git a/tools/ci/envsubst.py b/tools/ci/envsubst.py new file mode 100755 index 000000000..9d410f9f3 --- /dev/null +++ b/tools/ci/envsubst.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python +# +# A script similar to GNU envsubst, but filters out +# some CI related variables. + +import os +import sys + + +def main(): + # Sanitize environment variables + vars_to_remove = [] + for var_name in os.environ.iterkeys(): + if var_name.startswith('CI_'): + vars_to_remove.append(var_name) + for var_name in vars_to_remove: + del os.environ[var_name] + + for line in sys.stdin: + if not line: + break + sys.stdout.write(os.path.expandvars(line)) + sys.stdout.flush() + + +if __name__ == '__main__': + main() diff --git a/tools/ci/executable-list.txt b/tools/ci/executable-list.txt index d021f0107..47a533758 100644 --- a/tools/ci/executable-list.txt +++ b/tools/ci/executable-list.txt @@ -21,6 +21,7 @@ tools/ci/build_examples_cmake.sh tools/ci/check-executable.sh tools/ci/check-line-endings.sh tools/ci/checkout_project_ref.py +tools/ci/envsubst.py tools/ci/get-full-sources.sh tools/ci/mirror-submodule-update.sh tools/ci/mirror-synchronize.sh diff --git a/tools/cmake/kconfig.cmake b/tools/cmake/kconfig.cmake index 05976aca6..84ac26fb6 100644 --- a/tools/cmake/kconfig.cmake +++ b/tools/cmake/kconfig.cmake @@ -96,8 +96,8 @@ function(kconfig_process_config) set(defaults_arg --defaults "${IDF_SDKCONFIG_DEFAULTS}") endif() - if(EXISTS "${SDKCONFIG_DEFAULTS}.${IDF_TARGET}") - list(APPEND defaults_arg --defaults "${SDKCONFIG_DEFAULTS}.${IDF_TARGET}") + if(EXISTS "${IDF_SDKCONFIG_DEFAULTS}.${IDF_TARGET}") + list(APPEND defaults_arg --defaults "${IDF_SDKCONFIG_DEFAULTS}.${IDF_TARGET}") endif() # Set these in the parent scope, so that they can be written to project_description.json