]> granicus.if.org Git - esp-idf/blob - .gitlab-ci.yml
Merge branch 'feature/esptool_v23' into 'master'
[esp-idf] / .gitlab-ci.yml
1 stages:
2   - build
3   - assign_test
4   - unit_test
5   - test
6   - test_report
7   - deploy
8
9 variables:
10 # System environment
11
12   # Common parameters for the 'make' during CI tests
13   MAKEFLAGS: "-j5 --no-keep-going"
14
15 # GitLab-CI environment
16
17   # more attempts for more robust
18   GET_SOURCES_ATTEMPTS: "10"
19   ARTIFACT_DOWNLOAD_ATTEMPTS: "10"
20
21   # We use get_sources.sh script to fetch the submodules and/or re-fetch the repo
22   # if it was corrupted (if submodule update fails this can happen)
23   GIT_STRATEGY: fetch
24   GIT_SUBMODULE_STRATEGY: none
25
26 # IDF environment
27
28   IDF_PATH: "$CI_PROJECT_DIR"
29   APPLY_BOT_FILTER_SCRIPT: "$CI_PROJECT_DIR/tools/ci/apply_bot_filter.py"
30   CHECKOUT_REF_SCRIPT: "$CI_PROJECT_DIR/tools/ci/checkout_project_ref.py"
31
32 # before each job, we need to check if this job is filtered by bot stage/job filter
33 .apply_bot_filter: &apply_bot_filter
34   python $APPLY_BOT_FILTER_SCRIPT || exit 0
35
36 before_script:
37   # apply bot filter in before script
38   - *apply_bot_filter
39   # add gitlab ssh key
40   - mkdir -p ~/.ssh
41   - chmod 700 ~/.ssh
42   - echo -n $GITLAB_KEY > ~/.ssh/id_rsa_base64
43   - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
44   - chmod 600 ~/.ssh/id_rsa
45   - echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
46
47   # Set IS_PRIVATE or IS_PUBLIC depending on if our branch is public or not
48   #
49   # (the same regular expressions are used to set these are used in 'only:' sections below
50   - source tools/ci/configure_ci_environment.sh
51
52   # fetch the submodules (& if necessary re-fetch repo) from gitlab
53   - time ./tools/ci/get-full-sources.sh
54
55 .do_nothing_before:
56   before_script: &do_nothing_before
57     # apply bot filter in before script
58     - *apply_bot_filter
59     - echo "Not setting up GitLab key, not fetching submodules"
60     - source tools/ci/configure_ci_environment.sh
61
62 .add_gitlab_key_before:
63   before_script: &add_gitlab_key_before
64     # apply bot filter in before script
65     - *apply_bot_filter
66     - echo "Not fetching submodules"
67     - source tools/ci/configure_ci_environment.sh
68     # add gitlab ssh key
69     - mkdir -p ~/.ssh
70     - chmod 700 ~/.ssh
71     - echo -n $GITLAB_KEY > ~/.ssh/id_rsa_base64
72     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
73     - chmod 600 ~/.ssh/id_rsa
74     - echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
75
76 build_template_app:
77   stage: build
78   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
79   tags:
80     - build
81   variables:
82     BATCH_BUILD: "1"
83     IDF_CI_BUILD: "1"
84   script:
85     - git clone https://github.com/espressif/esp-idf-template.git
86     - cd esp-idf-template
87     # Try to use the same branch name for esp-idf-template that we're
88     # using on esp-idf. If it doesn't exist then just stick to the default
89     # branch
90     - python $CHECKOUT_REF_SCRIPT esp-idf-template
91     # Test debug build (default)
92     - make all V=1
93     # Now test release build
94     - make clean
95     - sed -i.bak -e's/CONFIG_OPTIMIZATION_LEVEL_DEBUG\=y/CONFIG_OPTIMIZATION_LEVEL_RELEASE=y/' sdkconfig
96     - make all V=1
97     # Check if there are any stray printf/ets_printf references in WiFi libs
98     - cd ../components/esp32/lib
99     - test $(xtensa-esp32-elf-nm *.a | grep -w printf | wc -l) -eq 0
100     - test $(xtensa-esp32-elf-nm *.a | grep -w ets_printf | wc -l) -eq 0
101
102
103 .build_template: &build_template
104   stage: build
105   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
106   tags:
107     - build
108   variables:
109     BATCH_BUILD: "1"
110     V: "0"
111
112 build_ssc:
113   <<: *build_template
114   artifacts:
115     paths:
116       - SSC/ssc_bin
117     expire_in: 6 mos
118   script:
119     - git clone $SSC_REPOSITORY
120     - cd SSC
121     - python $CHECKOUT_REF_SCRIPT SSC
122     - MAKEFLAGS= ./gen_misc_ng.sh
123
124 build_esp_idf_tests:
125   <<: *build_template
126   artifacts:
127     paths:
128       - tools/unit-test-app/output
129       - components/idf_test/unit_test/TestCaseAll.yml
130       - components/idf_test/unit_test/CIConfigs/*.yml
131     expire_in: 6 mos
132   script:
133     - cd tools/unit-test-app
134     - make help # make sure kconfig tools are built in single process
135     - make ut-clean-all-configs
136     - export EXTRA_CFLAGS="-Werror -Werror=deprecated-declarations"
137     - export EXTRA_CXXFLAGS=${EXTRA_CFLAGS}
138     - make ut-build-all-configs TESTS_ALL=1
139     - python tools/UnitTestParser.py
140
141 .build_examples_template: &build_examples_template
142   <<: *build_template
143   artifacts:
144     when: always
145     paths:
146       - build_examples/*/*/*/build/*.bin
147       - build_examples/*/*/*/build/*.elf
148       - build_examples/*/*/*/build/*.map
149       - build_examples/*/*/*/build/download.config
150       - build_examples/*/*/*/build/bootloader/*.bin
151       - $LOG_PATH
152     expire_in: 1 week
153   variables:
154     IDF_CI_BUILD: "1"
155     LOG_PATH: "$CI_PROJECT_DIR/log_examples"
156   script:
157     # it's not possible to build 100% out-of-tree and have the "artifacts"
158     # mechanism work, but this is the next best thing
159     - rm -rf build_examples
160     - mkdir build_examples
161     - cd build_examples
162     # build some of examples
163     - mkdir -p ${LOG_PATH}
164     - ${IDF_PATH}/tools/ci/build_examples.sh "${CI_JOB_NAME}"
165
166 build_examples_00:
167   <<: *build_examples_template
168
169 build_examples_01:
170   <<: *build_examples_template
171
172 build_examples_02:
173   <<: *build_examples_template
174
175 build_examples_03:
176   <<: *build_examples_template
177
178 build_examples_04:
179   <<: *build_examples_template
180
181 build_examples_05:
182   <<: *build_examples_template
183
184 build_examples_06:
185   <<: *build_examples_template
186
187 build_examples_07:
188   <<: *build_examples_template
189
190
191 build_docs:
192   stage: build
193   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
194   tags:
195     - build_docs
196   artifacts:
197     when: always
198     paths:
199       # English version of documentation
200       - docs/en/doxygen-warning-log.txt
201       - docs/en/sphinx-warning-log.txt
202       - docs/en/sphinx-warning-log-sanitized.txt
203       - docs/en/_build/html
204       # Chinese version of documentation
205       - docs/zh_CN/doxygen-warning-log.txt
206       - docs/zh_CN/sphinx-warning-log.txt
207       - docs/zh_CN/sphinx-warning-log-sanitized.txt
208       - docs/zh_CN/_build/html
209     expire_in: 1 mos
210   script:
211     - cd docs/en
212     - make gh-linkcheck
213     - make html
214     - ../check_doc_warnings.sh
215     - cd ../zh_CN
216     - make gh-linkcheck
217     - make html
218     - ../check_doc_warnings.sh
219
220 test_nvs_on_host:
221   stage: test
222   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
223   tags:
224     - nvs_host_test
225   dependencies: []
226   script:
227     - cd components/nvs_flash/test_nvs_host
228     - make test
229
230 test_partition_table_on_host:
231   stage: test
232   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
233   tags:
234     - build
235   dependencies: []
236   script:
237     - cd components/partition_table/test_gen_esp32part_host
238     - ./gen_esp32part_tests.py
239
240 test_wl_on_host:
241   stage: test
242   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
243   tags:
244     - wl_host_test
245   artifacts:
246     paths:
247       - components/wear_levelling/test_wl_host/coverage_report.zip
248   dependencies: []
249   script:
250     - cd components/wear_levelling/test_wl_host
251     - make test
252
253 test_multi_heap_on_host:
254   stage: test
255   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
256   tags:
257     - wl_host_test
258   script:
259     - cd components/heap/test_multi_heap_host
260     - make test
261
262 test_build_system:
263   stage: test
264   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
265   tags:
266     - build_test
267   dependencies: []
268   script:
269     - ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
270     - rm -rf test_build_system
271     - mkdir test_build_system
272     - cd test_build_system
273     - ${IDF_PATH}/tools/ci/test_build_system.sh
274
275 test_report:
276   stage: test_report
277   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
278   tags:
279     - report
280   only:
281     - master
282     - triggers
283     - /^release\/v/
284     - /^v\d+\.\d+(\.\d+)?($|-)/
285   variables:
286     LOG_PATH: "$CI_PROJECT_DIR/$CI_COMMIT_SHA"
287     TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test"
288     REPORT_PATH: "$CI_PROJECT_DIR/CI_Test_Report"
289     MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/tools/unit-test-app/tools/ModuleDefinition.yml"
290   #dependencies:
291   #We need all UT* and IT* artifacts except for only a few other
292   artifacts:
293     when: always
294     paths:
295       - $REPORT_PATH
296       - $LOG_PATH
297     expire_in: 12 mos
298   script:
299     # calc log path
300     - VER_NUM=`git rev-list HEAD | wc -l | awk '{print $1}'`
301     - SHA_ID=`echo $CI_COMMIT_SHA | cut -c 1-7`
302     - REVISION="${VER_NUM}_${SHA_ID}"
303     # replace / to _ in branch name
304     - ESCAPED_BRANCH_NAME=`echo $CI_COMMIT_REF_NAME | sed 's/\//___/g'`
305     # result path and artifacts path
306     - RESULT_PATH="$CI_PROJECT_NAME/$ESCAPED_BRANCH_NAME/$REVISION"
307     - ARTIFACTS_PATH="$GITLAB_HTTP_SERVER/idf/esp-idf/builds/$CI_JOB_ID/artifacts/browse/$CI_COMMIT_SHA"
308     # clone test bench
309     - git clone $GITLAB_SSH_SERVER/yinling/auto_test_script.git
310     - cd auto_test_script
311     - python $CHECKOUT_REF_SCRIPT auto_test_script
312     # generate report
313     - TEST_RESULT=Pass
314     - 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
315     # commit to CI-test-result project
316     - git clone $GITLAB_SSH_SERVER/qa/CI-test-result.git
317     - rm -rf "CI-test-result/RawData/$RESULT_PATH"
318     - cp -R $CI_PROJECT_NAME CI-test-result/RawData
319     - cd CI-test-result
320     # config git user
321     - git config --global user.email "ci-test-result@espressif.com"
322     - git config --global user.name "ci-test-result"
323     # commit test result
324     - git add .
325     - git commit . -m "update test result for $CI_PROJECT_NAME/$CI_COMMIT_REF_NAME/$CI_COMMIT_SHA, pipeline ID $CI_PIPELINE_ID" || exit 0
326     - git push origin master
327     - test "${TEST_RESULT}" = "Pass" || exit 1
328
329 test_esp_err_to_name_on_host:
330   stage: test
331   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
332   tags:
333     - build
334   dependencies: []
335   script:
336     - cd tools/
337     - ./gen_esp_err_to_name.py
338     - git diff --exit-code -- ../components/esp32/esp_err_to_name.c || (echo 'Differences found. Please run gen_esp_err_to_name.py and commit the changes.'; exit 1)
339
340 push_master_to_github:
341   stage: deploy
342   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
343   tags:
344     - deploy
345   only:
346     - master
347     - /^release\/v/
348     - /^v\d+\.\d+(\.\d+)?($|-)/
349   when: on_success
350   dependencies: []
351   variables:
352     GITHUB_PUSH_REFS: refs/remotes/origin/release refs/remotes/origin/master
353   before_script: *do_nothing_before
354   script:
355     - mkdir -p ~/.ssh
356     - chmod 700 ~/.ssh
357     - echo -n $GH_PUSH_KEY > ~/.ssh/id_rsa_base64
358     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
359     - chmod 600 ~/.ssh/id_rsa
360     - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
361     - git remote remove github &>/dev/null || true
362     - git remote add github git@github.com:espressif/esp-idf.git
363     # What the next line of script does: goes through the list of refs for all branches we push to github,
364     # generates a snippet of shell which is evaluated. The snippet checks CI_COMMIT_SHA against the SHA
365     # (aka objectname) at tip of each branch, and if any SHAs match then it checks out the local branch
366     # and then pushes that ref to a corresponding github branch
367     - eval $(git for-each-ref --shell bash --format 'if [ $CI_COMMIT_SHA == %(objectname) ]; then git checkout -B %(refname:strip=3); git push --follow-tags github %(refname:strip=3); fi;' $GITHUB_PUSH_REFS)
368
369
370 deploy_docs:
371   stage: assign_test
372   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
373   tags:
374     - deploy
375   only:
376    - master
377    - /^release\/v/
378    - /^v\d+\.\d+(\.\d+)?($|-)/
379    - triggers
380   dependencies:
381     - build_docs
382   before_script: *do_nothing_before
383   script:
384     - mkdir -p ~/.ssh
385     - chmod 700 ~/.ssh
386     - echo -n $DOCS_DEPLOY_KEY > ~/.ssh/id_rsa_base64
387     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
388     - chmod 600 ~/.ssh/id_rsa
389     - echo -e "Host $DOCS_SERVER\n\tStrictHostKeyChecking no\n\tUser $DOCS_SERVER_USER\n" >> ~/.ssh/config
390     - export GIT_VER=$(git describe --always)
391     - cd docs/en/_build/
392     - mv html $GIT_VER
393     - tar czvf $GIT_VER.tar.gz $GIT_VER
394     - scp $GIT_VER.tar.gz $DOCS_SERVER:$DOCS_PATH/en
395     - ssh $DOCS_SERVER -x "cd $DOCS_PATH/en && tar xzvf $GIT_VER.tar.gz && rm -f latest && ln -s $GIT_VER latest"
396     - cd ../../zh_CN/_build/
397     - mv html $GIT_VER
398     - tar czvf $GIT_VER.tar.gz $GIT_VER
399     - scp $GIT_VER.tar.gz $DOCS_SERVER:$DOCS_PATH/zh_CN
400     - ssh $DOCS_SERVER -x "cd $DOCS_PATH/zh_CN && tar xzvf $GIT_VER.tar.gz && rm -f latest && ln -s $GIT_VER latest"
401     # add link to preview doc
402     - echo "[document preview][en] $CI_DOCKER_REGISTRY/docs/esp-idf/en/${GIT_VER}/index.html"
403     - echo "[document preview][zh_CN] $CI_DOCKER_REGISTRY/docs/esp-idf/zh_CN/${GIT_VER}/index.html"
404
405 check_doc_links:
406   stage: test
407   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
408   tags:
409     - check_doc_links
410   only:
411     # can only be triggered
412     - triggers
413   artifacts:
414     paths:
415       - docs/_build/linkcheck
416     expire_in: 1 mos
417   script:
418     # must be triggered with CHECK_LINKS=Yes, otherwise exit without test
419     - test "$CHECK_LINKS" = "Yes" || exit 0
420     # can only run on master branch (otherwise the commit is not on Github yet)
421     - test "${CI_COMMIT_REF_NAME}" = "master" || exit 0
422     - cd docs
423     - make linkcheck
424
425 check_commit_msg:
426   stage: deploy
427   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
428   tags:
429     - build
430   except:
431     - master
432     - /^release\/v/
433     - /^v\d+\.\d+(\.\d+)?($|-)/
434   dependencies: []
435   before_script: *do_nothing_before
436   script:
437     - git status
438     - git log -n10 --oneline
439     # commit start with "WIP: " need to be squashed before merge
440     - 'git log --pretty=%s master.. -- | grep "^WIP: " && exit 1 || exit 0'
441
442 check_submodule_sync:
443   stage: deploy
444   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
445   tags:
446     - build
447   except:
448     - master
449     - /^release\/v/
450     - /^v\d+\.\d+(\.\d+)?($|-)/
451   dependencies: []
452   variables:
453     GIT_STRATEGY: clone
454   before_script: *do_nothing_before
455   script:
456     # check if all submodules are correctly synced to public repostory
457     - git submodule update --init --recursive
458
459 assign_test:
460   <<: *build_template
461   stage: assign_test
462   # gitlab ci do not support match job with RegEx or wildcard now in dependencies.
463   # we have a lot build example jobs. now we don't use dependencies, just download all artificats of build stage.
464   variables:
465     UT_BIN_PATH: "tools/unit-test-app/output"
466     OUTPUT_BIN_PATH: "test_bins/ESP32_IDF"
467     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
468     EXAMPLE_CONFIG_OUTPUT_PATH: "$CI_PROJECT_DIR/examples/test_configs"
469   artifacts:
470     paths:
471       - test_bins
472       - components/idf_test/*/CIConfigs
473       - components/idf_test/*/TC.sqlite
474       - $EXAMPLE_CONFIG_OUTPUT_PATH
475       - tools/unit-test-app/output
476     expire_in: 1 mos
477   before_script: *add_gitlab_key_before
478   script:
479     # first move test bins together: test_bins/CHIP_SDK/TestApp/bin_files
480     - mkdir -p $OUTPUT_BIN_PATH
481     - cp -r SSC/ssc_bin/* $OUTPUT_BIN_PATH
482     # assign example tests
483     - python $TEST_FW_PATH/CIAssignExampleTest.py $IDF_PATH/examples $IDF_PATH/.gitlab-ci.yml $EXAMPLE_CONFIG_OUTPUT_PATH
484     # assign unit test cases
485     - python $TEST_FW_PATH/CIAssignUnitTest.py $IDF_PATH/components/idf_test/unit_test/TestCaseAll.yml $IDF_PATH/.gitlab-ci.yml $IDF_PATH/components/idf_test/unit_test/CIConfigs
486     # clone test script to assign tests
487     - git clone $TEST_SCRIPT_REPOSITORY
488     - cd auto_test_script
489     - python $CHECKOUT_REF_SCRIPT auto_test_script
490     # assgin integration test cases
491     - python CIAssignTestCases.py -t $IDF_PATH/components/idf_test/integration_test -c $IDF_PATH/.gitlab-ci.yml -b $IDF_PATH/test_bins
492
493 .example_test_template: &example_test_template
494   stage: test
495   when: on_success
496   only:
497     - master
498     - /^release\/v/
499     - /^v\d+\.\d+(\.\d+)?($|-)/
500     - triggers
501   # gitlab ci do not support match job with RegEx or wildcard now in dependencies.
502   # we have a lot build example jobs and the binaries them exceed the limitation of artifacts.
503   # we can't artifact them in one job. For example test jobs, download all artifacts from previous stages.
504   artifacts:
505     when: always
506     paths:
507       - $LOG_PATH
508     expire_in: 6 mos
509   variables:
510     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
511     TEST_CASE_PATH: "$CI_PROJECT_DIR/examples"
512     CONFIG_FILE: "$CI_PROJECT_DIR/examples/test_configs/$CI_JOB_NAME.yml"
513     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
514   script:
515     # first test if config file exists, if not exist, exit 0
516     - test -e $CONFIG_FILE || exit 0
517     - cd $TEST_FW_PATH
518     # run test
519     - python Runner.py $TEST_CASE_PATH -c $CONFIG_FILE
520
521 .unit_test_template: &unit_test_template
522   <<: *example_test_template
523   stage: unit_test
524   dependencies:
525     - assign_test
526   variables:
527     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
528     TEST_CASE_PATH: "$CI_PROJECT_DIR/tools/unit-test-app"
529     CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/unit_test/CIConfigs/$CI_JOB_NAME.yml"
530     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
531
532 .test_template: &test_template
533   stage: test
534   when: on_success
535   only:
536     - master
537     - /^release\/v/
538     - /^v\d+\.\d+(\.\d+)?($|-)/
539     - triggers
540   allow_failure: true
541   dependencies:
542     - assign_test
543   artifacts:
544     when: always
545     paths:
546       - $LOG_PATH
547     expire_in: 6 mos
548   variables:
549     LOCAL_ENV_CONFIG_PATH: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/ESP32_IDF"
550     LOG_PATH: "$CI_PROJECT_DIR/$CI_COMMIT_SHA"
551     TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test/integration_test"
552     MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/components/idf_test/ModuleDefinition.yml"
553     CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/integration_test/CIConfigs/$CI_JOB_NAME.yml"
554   before_script: *add_gitlab_key_before
555   script:
556     # first test if config file exists, if not exist, exit 0
557     - test -e $CONFIG_FILE || exit 0
558     # clone local test env configs
559     - git clone $TEST_ENV_CONFIG_REPOSITORY
560     - cd ci-test-runner-configs
561     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
562     # clone test bench
563     - git clone $TEST_SCRIPT_REPOSITORY
564     - cd auto_test_script
565     - python $CHECKOUT_REF_SCRIPT auto_test_script
566     # run test
567     - python CIRunner.py -l "$LOG_PATH/$CI_JOB_NAME" -c $CONFIG_FILE -e $LOCAL_ENV_CONFIG_PATH -t $TEST_CASE_FILE_PATH -m $MODULE_UPDATE_FILE
568
569 nvs_compatible_test:
570   <<: *test_template
571   artifacts:
572     when: always
573     paths:
574       - $LOG_PATH
575       - nvs_wifi.bin
576     expire_in: 6 mos
577   tags:
578     - ESP32_IDF
579     - NVS_Compatible
580   script:
581     # clone local test env configs
582     - git clone $TEST_ENV_CONFIG_REPOSITORY
583     - cd ci-test-runner-configs
584     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
585     # clone test bench
586     - git clone $TEST_SCRIPT_REPOSITORY
587     - cd auto_test_script
588     - git checkout ${CI_COMMIT_REF_NAME} || echo "Using default branch..."
589     # prepare nvs bins
590     - ./Tools/prepare_nvs_bin.sh
591     # run test
592     - python CIRunner.py -l "$LOG_PATH/$CI_JOB_NAME" -c $CONFIG_FILE -e $LOCAL_ENV_CONFIG_PATH -t $TEST_CASE_FILE_PATH -m $MODULE_UPDATE_FILE
593
594 example_test_001_01:
595   <<: *example_test_template
596   tags:
597     - ESP32
598     - Example_WIFI
599
600 UT_001_01:
601   <<: *unit_test_template
602   tags:
603     - ESP32_IDF
604     - UT_T1_1
605     - UT_default
606
607 UT_001_02:
608   <<: *unit_test_template
609   tags:
610     - ESP32_IDF
611     - UT_T1_1
612     - UT_default
613
614 UT_001_03:
615   <<: *unit_test_template
616   tags:
617     - ESP32_IDF
618     - UT_T1_1
619     - UT_default
620
621 UT_001_04:
622   <<: *unit_test_template
623   tags:
624     - ESP32_IDF
625     - UT_T1_1
626     - UT_default
627
628 UT_001_05:
629   <<: *unit_test_template
630   tags:
631     - ESP32_IDF
632     - UT_T1_SDMODE
633     - UT_default
634
635 UT_001_06:
636   <<: *unit_test_template
637   tags:
638     - ESP32_IDF
639     - UT_T1_SPIMODE
640     - UT_default
641
642 UT_001_07:
643   <<: *unit_test_template
644   tags:
645     - ESP32_IDF
646     - UT_T1_1
647     - UT_default
648
649 UT_001_08:
650   <<: *unit_test_template
651   tags:
652     - ESP32_IDF
653     - UT_T1_1
654     - UT_default
655
656 UT_001_09:
657   <<: *unit_test_template
658   tags:
659     - ESP32_IDF
660     - UT_T1_1
661     - UT_default
662
663 UT_002_01:
664   <<: *unit_test_template
665   tags:
666     - ESP32_IDF
667     - UT_T1_1
668     - UT_release
669
670 UT_002_02:
671   <<: *unit_test_template
672   tags:
673     - ESP32_IDF
674     - UT_T1_1
675     - UT_release
676
677 UT_002_03:
678   <<: *unit_test_template
679   tags:
680     - ESP32_IDF
681     - UT_T1_1
682     - UT_release
683
684 UT_002_04:
685   <<: *unit_test_template
686   tags:
687     - ESP32_IDF
688     - UT_T1_1
689     - UT_release
690
691 UT_002_05:
692   <<: *unit_test_template
693   tags:
694     - ESP32_IDF
695     - UT_T1_SDMODE
696     - UT_release
697
698 UT_002_06:
699   <<: *unit_test_template
700   tags:
701     - ESP32_IDF
702     - UT_T1_SPIMODE
703     - UT_release
704
705 UT_002_07:
706   <<: *unit_test_template
707   tags:
708     - ESP32_IDF
709     - UT_T1_1
710     - UT_release
711
712 UT_002_08:
713   <<: *unit_test_template
714   tags:
715     - ESP32_IDF
716     - UT_T1_1
717     - UT_release
718
719 UT_002_09:
720   <<: *unit_test_template
721   tags:
722     - ESP32_IDF
723     - UT_T1_1
724     - UT_release
725
726 UT_003_01:
727   <<: *unit_test_template
728   tags:
729     - ESP32_IDF
730     - UT_T1_1
731     - UT_single_core
732
733 UT_003_02:
734   <<: *unit_test_template
735   tags:
736     - ESP32_IDF
737     - UT_T1_1
738     - UT_single_core
739
740 UT_003_03:
741   <<: *unit_test_template
742   tags:
743     - ESP32_IDF
744     - UT_T1_1
745     - UT_single_core
746
747 UT_003_04:
748   <<: *unit_test_template
749   tags:
750     - ESP32_IDF
751     - UT_T1_1
752     - UT_single_core
753
754 UT_003_05:
755   <<: *unit_test_template
756   tags:
757     - ESP32_IDF
758     - UT_T1_SDMODE
759     - UT_single_core
760
761 UT_003_06:
762   <<: *unit_test_template
763   tags:
764     - ESP32_IDF
765     - UT_T1_SPIMODE
766     - UT_single_core
767
768 UT_003_07:
769   <<: *unit_test_template
770   tags:
771     - ESP32_IDF
772     - UT_T1_1
773     - UT_single_core
774
775 UT_003_08:
776   <<: *unit_test_template
777   tags:
778     - ESP32_IDF
779     - UT_T1_1
780     - UT_single_core
781
782 UT_003_09:
783   <<: *unit_test_template
784   tags:
785     - ESP32_IDF
786     - UT_T1_1
787     - UT_single_core
788
789 UT_004_01:
790   <<: *unit_test_template
791   tags:
792     - ESP32_IDF
793     - UT_T1_1
794     - UT_psram
795
796 UT_004_02:
797   <<: *unit_test_template
798   tags:
799     - ESP32_IDF
800     - UT_T1_1
801     - UT_psram
802
803 UT_004_03:
804   <<: *unit_test_template
805   tags:
806     - ESP32_IDF
807     - UT_T1_1
808     - UT_psram
809
810 UT_004_04:
811   <<: *unit_test_template
812   tags:
813     - ESP32_IDF
814     - UT_T1_1
815     - UT_psram
816
817 UT_004_05:
818   <<: *unit_test_template
819   tags:
820     - ESP32_IDF
821     - UT_T1_SDMODE
822     - UT_psram
823
824 UT_004_06:
825   <<: *unit_test_template
826   tags:
827     - ESP32_IDF
828     - UT_T1_SPIMODE
829     - UT_psram
830
831 UT_004_07:
832   <<: *unit_test_template
833   tags:
834     - ESP32_IDF
835     - UT_T1_1
836     - UT_psram
837
838 UT_004_08:
839   <<: *unit_test_template
840   tags:
841     - ESP32_IDF
842     - UT_T1_1
843     - UT_psram
844
845 UT_004_09:
846   <<: *unit_test_template
847   tags:
848     - ESP32_IDF
849     - UT_T1_1
850     - UT_psram
851
852 IT_001_01:
853   <<: *test_template
854   tags:
855     - ESP32_IDF
856     - SSC_T1_1
857
858 IT_001_02:
859   <<: *test_template
860   tags:
861     - ESP32_IDF
862     - SSC_T1_1
863
864 IT_001_03:
865   <<: *test_template
866   tags:
867     - ESP32_IDF
868     - SSC_T1_1
869
870 IT_001_04:
871   <<: *test_template
872   tags:
873     - ESP32_IDF
874     - SSC_T1_1
875
876 IT_001_05:
877   <<: *test_template
878   tags:
879     - ESP32_IDF
880     - SSC_T1_1
881
882 IT_001_06:
883   <<: *test_template
884   tags:
885     - ESP32_IDF
886     - SSC_T1_1
887
888 IT_001_07:
889   <<: *test_template
890   tags:
891     - ESP32_IDF
892     - SSC_T1_1
893
894 IT_001_08:
895   <<: *test_template
896   tags:
897     - ESP32_IDF
898     - SSC_T1_1
899
900 IT_001_09:
901   <<: *test_template
902   tags:
903     - ESP32_IDF
904     - SSC_T1_1
905
906 IT_002_01:
907   <<: *test_template
908   tags:
909     - ESP32_IDF
910     - SSC_T1_2
911
912 IT_003_01:
913   <<: *test_template
914   tags:
915     - ESP32_IDF
916     - SSC_T2_1
917
918 IT_003_02:
919   <<: *test_template
920   tags:
921     - ESP32_IDF
922     - SSC_T2_1
923
924 IT_003_03:
925   <<: *test_template
926   tags:
927     - ESP32_IDF
928     - SSC_T2_1
929
930 IT_003_04:
931   <<: *test_template
932   tags:
933     - ESP32_IDF
934     - SSC_T2_1
935
936 IT_003_05:
937   <<: *test_template
938   tags:
939     - ESP32_IDF
940     - SSC_T2_1
941
942 IT_003_06:
943   <<: *test_template
944   tags:
945     - ESP32_IDF
946     - SSC_T2_1
947
948 IT_003_07:
949   <<: *test_template
950   tags:
951     - ESP32_IDF
952     - SSC_T2_1
953
954 IT_004_01:
955   <<: *test_template
956   tags:
957     - ESP32_IDF
958     - SSC_T1_APC
959
960 IT_005_01:
961   <<: *test_template
962   tags:
963     - ESP32_IDF
964     - SSC_T1_WEP
965
966 IT_006_01:
967   <<: *test_template
968   tags:
969     - ESP32_IDF
970     - SSC_T3_PhyMode
971
972 IT_007_01:
973   <<: *test_template
974   tags:
975     - ESP32_IDF
976     - SSC_T2_PhyMode
977
978 IT_008_01:
979   <<: *test_template
980   tags:
981     - ESP32_IDF
982     - SSC_T2_PhyMode
983
984 IT_009_01:
985   <<: *test_template
986   tags:
987     - ESP32_IDF
988     - SSC_T1_3
989
990 IT_501_01:
991   <<: *test_template
992   tags:
993     - ESP32_IDF
994     - SSC_T1_1
995     - stress_test
996
997 IT_501_02:
998   <<: *test_template
999   tags:
1000     - ESP32_IDF
1001     - SSC_T1_1
1002     - stress_test
1003
1004 IT_501_03:
1005   <<: *test_template
1006   tags:
1007     - ESP32_IDF
1008     - SSC_T1_1
1009     - stress_test
1010
1011 IT_502_01:
1012   <<: *test_template
1013   tags:
1014     - ESP32_IDF
1015     - SSC_T2_1
1016     - stress_test
1017
1018 IT_502_02:
1019   <<: *test_template
1020   tags:
1021     - ESP32_IDF
1022     - SSC_T2_1
1023     - stress_test
1024
1025 IT_503_01:
1026   <<: *test_template
1027   tags:
1028     - ESP32_IDF
1029     - SSC_T5_1
1030     - stress_test
1031
1032 IT_503_02:
1033   <<: *test_template
1034   tags:
1035     - ESP32_IDF
1036     - SSC_T5_1
1037     - stress_test
1038
1039 IT_503_03:
1040   <<: *test_template
1041   tags:
1042     - ESP32_IDF
1043     - SSC_T5_1
1044     - stress_test