12 - echo -n $GITLAB_KEY > ~/.ssh/id_rsa_base64
13 - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
14 - chmod 600 ~/.ssh/id_rsa
15 - echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
17 # if testing master branch, use github wifi and bt libs.
18 # if testing other branches, use gitlab wifi and bt libs (as maybe changes aren't merged to master yet)
19 - test "${CI_BUILD_REF_NAME}" = "master" || sed -i "s%https://github.com/espressif/esp32-wifi-lib%${GITLAB_SSH_SERVER}/idf/esp32-wifi-lib%" .gitmodules
20 - test "${CI_BUILD_REF_NAME}" = "master" || sed -i "s%https://github.com/espressif/esp32-bt-lib%${GITLAB_SSH_SERVER}/idf/esp32-bt-lib%" .gitmodules
21 # fetch all submodules
22 - git submodule update --init --recursive
26 image: espressif/esp32-ci-env
31 SDK_PATH: "$CI_PROJECT_DIR"
32 IDF_PATH: "$CI_PROJECT_DIR"
38 - git clone https://github.com/espressif/esp-idf-template.git
40 # Try to use the same branch name for esp-idf-template that we're
41 # using on esp-idf. If it doesn't exist then just stick to the default
43 - git checkout ${CI_BUILD_REF_NAME} || echo "Using esp-idf-template default branch..."
44 # Test debug build (default)
46 # Now test release build
48 - sed -i.bak -e's/CONFIG_OPTIMIZATION_LEVEL_DEBUG\=y/CONFIG_OPTIMIZATION_LEVEL_RELEASE=y/' sdkconfig
50 # Check if there are any stray printf/ets_printf references in WiFi libs
51 - cd ../components/esp32/lib
52 - test $(xtensa-esp32-elf-nm *.a | grep -w printf | wc -l) -eq 0
53 - test $(xtensa-esp32-elf-nm *.a | grep -w ets_printf | wc -l) -eq 0
56 .build_gitlab: &build_template
60 image: espressif/esp32-ci-env
63 SDK_PATH: "$CI_PROJECT_DIR"
64 IDF_PATH: "$CI_PROJECT_DIR"
77 - git clone $GITLAB_SSH_SERVER/yinling/SSC.git
79 - git checkout ${CI_BUILD_REF_NAME} || echo "Using SSC default branch..."
81 - chmod +x gen_misc_ng.sh
87 - git clone $GITLAB_SSH_SERVER/application/esp-at.git
89 - git checkout ${CI_BUILD_REF_NAME} || echo "Using esp-at default branch..."
97 - ./tools/unit-test-app/build/*.bin
98 - ./tools/unit-test-app/build/*.elf
99 - ./tools/unit-test-app/build/*.map
100 - ./tools/unit-test-app/build/bootloader/*.bin
101 - ./components/idf_test/unit_test/TestCaseAll.yml
102 - ./components/idf_test/unit_test/CIConfigs/*.yml
106 - cd tools/unit-test-app
107 - git checkout ${CI_BUILD_REF_NAME} || echo "Using default branch..."
109 - python UnitTestParser.py
115 - build_examples/*/*/build/*.bin
116 - build_examples/*/*/build/*.elf
117 - build_examples/*/*/build/*.map
118 - build_examples/*/*/build/bootloader/*.bin
122 # it's not possible to build 100% out-of-tree and have the "artifacts"
123 # mechanism work, but this is the next best thing
124 - mkdir build_examples
126 - ${IDF_PATH}/make/build_examples.sh
130 image: espressif/esp32-ci-env
136 # If not building master branch, and there are Doxygen warnings, print them and bail out
137 - test "${CI_BUILD_REF_NAME}" = "master" || test $(cat doxygen-warning-log.txt | wc -l) -eq 0 || ( echo "Doxygen pass had some warnings:" && cat doxygen-warning-log.txt && false )
148 image: espressif/esp32-ci-env
152 - cd components/nvs_flash/test_nvs_host
157 image: espressif/esp32-ci-env
161 IDF_PATH: "$CI_PROJECT_DIR"
163 - ./make/test_build_system.sh
167 image: espressif/esp32-ci-env
175 LOG_PATH: "$CI_PROJECT_DIR/$CI_BUILD_REF"
176 TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test"
177 REPORT_PATH: "$CI_PROJECT_DIR/CI_Test_Report"
178 MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/tools/unit-test-app/ModuleDefinition.yml"
187 - VER_NUM=`git rev-list HEAD | wc -l | awk '{print $1}'`
188 - SHA_ID=`echo $CI_BUILD_REF | cut -c 1-7`
189 - REVISION="${VER_NUM}_${SHA_ID}"
190 # replace / to _ in branch name
191 - ESCAPED_BRANCH_NAME=`echo $CI_BUILD_REF_NAME | sed 's/\//___/g'`
192 # result path and artifacts path
193 - RESULT_PATH="$CI_PROJECT_NAME/$ESCAPED_BRANCH_NAME/$REVISION"
194 - ARTIFACTS_PATH="$GITLAB_HTTP_SERVER/idf/esp-idf/builds/$CI_BUILD_ID/artifacts/browse/$CI_BUILD_REF"
196 - git clone $GITLAB_SSH_SERVER/yinling/auto_test_script.git
197 - cd auto_test_script
200 - python CITestReport.py -l $LOG_PATH -t $TEST_CASE_FILE_PATH -p $REPORT_PATH -r $RESULT_PATH -a $ARTIFACTS_PATH -m $MODULE_UPDATE_FILE || TEST_RESULT=Fail
201 # commit to CI-test-result project
202 - git clone $GITLAB_SSH_SERVER/qa/CI-test-result.git
203 - rm -rf CI-test-result/RawData/$RESULT_PATH
204 - cp -R $CI_PROJECT_NAME CI-test-result/RawData
207 - git config --global user.email "ci-test-result@espressif.com"
208 - git config --global user.name "ci-test-result"
211 - git commit . -m "update test result for $CI_PROJECT_NAME/$CI_BUILD_REF_NAME/$CI_BUILD_REF, pipeline ID $CI_PIPELINE_ID" || exit 0
212 - git push origin master
213 - test "${TEST_RESULT}" = "Pass" || exit 1
215 push_master_to_github:
217 - echo "Not setting up GitLab key, not fetching submodules"
225 image: espressif/esp32-ci-env
231 - echo -n $GH_PUSH_KEY > ~/.ssh/id_rsa_base64
232 - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
233 - chmod 600 ~/.ssh/id_rsa
234 - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
235 - git remote add github git@github.com:espressif/esp-idf.git
236 - git push --follow-tags github HEAD
241 - echo "Not setting up GitLab key, not fetching submodules"
249 image: espressif/esp32-ci-env
253 - echo -n $DOCS_DEPLOY_KEY > ~/.ssh/id_rsa_base64
254 - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
255 - chmod 600 ~/.ssh/id_rsa
256 - echo -e "Host $DOCS_SERVER\n\tStrictHostKeyChecking no\n\tUser $DOCS_SERVER_USER\n" >> ~/.ssh/config
257 - export GIT_VER=$(git describe --always)
260 - tar czvf $GIT_VER.tar.gz $GIT_VER
261 - scp $GIT_VER.tar.gz $DOCS_SERVER:$DOCS_PATH
262 - ssh $DOCS_SERVER -x "cd $DOCS_PATH && tar xzvf $GIT_VER.tar.gz && rm -f latest && ln -s $GIT_VER latest"
266 image: espressif/esp32-ci-env
270 # can only be triggered
273 # must be triggered with CHECK_LINKS=Yes, otherwise exit without test
274 - test "$CHECK_LINKS" = "Yes" || exit 0
275 # can only run on master branch (otherwise the commit is not on Github yet)
276 - test "${CI_BUILD_REF_NAME}" = "master" || exit 0
281 - docs/_build/linkcheck
285 # AUTO GENERATED PART START, DO NOT MODIFY CONTENT BELOW
286 # template for test jobs
287 .test_template: &test_template
297 LOCAL_ENV_CONFIG_PATH: $CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/ESP32_IDF
298 BIN_PATH: "$CI_PROJECT_DIR/SSC/ssc_bin/SSC"
300 LOG_PATH: "$CI_PROJECT_DIR/$CI_BUILD_REF"
301 # append test level folder to TEST_CASE_FILE_PATH in before_script of test job
302 TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test/integration_test"
303 # jobs MUST set CONFIG_FILE in before_script, and overwrite the variables above if necessary
304 MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/components/idf_test/unit_test/ModuleDefinition.yml"
313 # remove artifacts from last stage (UT logs)
318 - echo -n $GITLAB_KEY > ~/.ssh/id_rsa_base64
319 - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
320 - chmod 600 ~/.ssh/id_rsa
321 - echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
322 # clone local test env configs
323 - git clone $GITLAB_SSH_SERVER/qa/ci-test-runner-configs.git
325 - git clone $GITLAB_SSH_SERVER/yinling/auto_test_script.git
326 - cd auto_test_script
328 - python CIRunner.py -l $LOG_PATH -c $CONFIG_FILE -e $LOCAL_ENV_CONFIG_PATH -t $TEST_CASE_FILE_PATH -m $MODULE_UPDATE_FILE bin_path $APP_NAME $BIN_PATH
331 # template for overnight test jobs
332 .test_template_night: &test_template_night
335 # can only be triggered
338 # remove artifacts from last stage (UT logs)
340 # must be night build triggers, otherwise exit without test
341 - test $NIGHT_BUILD = "Yes" || exit 0
345 - echo -n $GITLAB_KEY > ~/.ssh/id_rsa_base64
346 - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
347 - chmod 600 ~/.ssh/id_rsa
348 - echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
349 # clone local test env configs
350 - git clone $GITLAB_SSH_SERVER/qa/ci-test-runner-configs.git
352 - git clone $GITLAB_SSH_SERVER/yinling/auto_test_script.git
353 - cd auto_test_script
355 - python CIRunner.py -l $LOG_PATH -c $CONFIG_FILE -e $LOCAL_ENV_CONFIG_PATH -t $TEST_CASE_FILE_PATH -m $MODULE_UPDATE_FILE bin_path $APP_NAME $BIN_PATH
357 # template for unit test jobs
358 .unit_test_template: &unit_test_template
364 LOCAL_ENV_CONFIG_PATH: $CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/ESP32_IDF
365 BIN_PATH: "$CI_PROJECT_DIR/tools/unit-test-app/build/"
366 LOG_PATH: "$CI_PROJECT_DIR/$CI_BUILD_REF"
368 TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test/unit_test"
369 MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/tools/unit-test-app/ModuleDefinition.yml"
372 - build_esp_idf_tests
375 <<: *unit_test_template
380 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/UT_Function_SYS_01.yml
383 <<: *unit_test_template
388 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/UT_Function_SYS_02.yml
396 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_SYS_01.yml
405 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_WIFI_01.yml
414 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_WIFI_02.yml
416 IT_Function_TCPIP_01:
423 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_TCPIP_01.yml
425 IT_Function_TCPIP_02:
431 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_TCPIP_02.yml
433 IT_Function_TCPIP_03:
440 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_TCPIP_03.yml
442 IT_Function_TCPIP_04:
449 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_TCPIP_04.yml
451 IT_Function_TCPIP_05:
457 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_TCPIP_05.yml
460 <<: *test_template_night
465 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Stress_WIFI_01.yml
468 <<: *test_template_night
473 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Stress_TCPIP_01.yml
476 <<: *test_template_night
481 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Stress_TCPIP_02.yml
484 <<: *test_template_night
489 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Stress_TCPIP_03.yml
492 <<: *test_template_night
497 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Stress_TCPIP_04.yml
500 <<: *test_template_night
505 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Stable_TCPIP_01.yml
508 <<: *test_template_night
513 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Stable_TCPIP_02.yml
516 <<: *test_template_night
521 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Stable_TCPIP_03.yml
523 IT_Function_TCPIP_06:
524 <<: *test_template_night
529 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_TCPIP_06.yml
537 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_WIFI_03.yml
545 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_WIFI_04.yml
553 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_WIFI_05.yml
561 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_WIFI_06.yml
563 IT_Function_TCPIP_07:
570 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_TCPIP_07.yml
572 IT_Function_TCPIP_08:
579 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_TCPIP_08.yml
581 IT_Function_TCPIP_09:
588 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_TCPIP_09.yml
590 IT_Function_TCPIP_10:
597 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_TCPIP_10.yml
599 IT_Function_TCPIP_11:
605 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_TCPIP_11.yml
607 IT_Function_TCPIP_12:
613 - CONFIG_FILE=$TEST_CASE_FILE_PATH/CIConfigs/IT_Function_TCPIP_12.yml