]> granicus.if.org Git - esp-idf/blob - .gitlab-ci.yml
coexist : fix coexist bugs related to coex hw blocking
[esp-idf] / .gitlab-ci.yml
1 stages:
2   - build
3   - assign_test
4   - host_test
5   - unit_test
6   - integration_test
7   - check
8   - deploy
9
10 variables:
11 # System environment
12
13   # Common parameters for the 'make' during CI tests
14   MAKEFLAGS: "-j5 --no-keep-going"
15
16 # GitLab-CI environment
17
18   # more attempts for more robust
19   GET_SOURCES_ATTEMPTS: "10"
20   ARTIFACT_DOWNLOAD_ATTEMPTS: "10"
21
22   # We use get_sources.sh script to fetch the submodules and/or re-fetch the repo
23   # if it was corrupted (if submodule update fails this can happen)
24   GIT_STRATEGY: fetch
25   GIT_SUBMODULE_STRATEGY: none
26
27 # IDF environment
28
29   IDF_PATH: "$CI_PROJECT_DIR"
30   BATCH_BUILD: "1"
31   V: "0"
32   APPLY_BOT_FILTER_SCRIPT: "$CI_PROJECT_DIR/tools/ci/apply_bot_filter.py"
33   CHECKOUT_REF_SCRIPT: "$CI_PROJECT_DIR/tools/ci/checkout_project_ref.py"
34
35 # Docker images
36   BOT_DOCKER_IMAGE_TAG: ":latest"
37
38 # When 'fetch' strategy is used, Gitlab removes untracked files before checking out
39 # new revision. However if the new revision doesn't include some of the submodules
40 # which were present in the old revision, such submodule directories would not be
41 # removed by the checkout. This extra step ensures that these stale submodules
42 # are removed.
43 .git_clean_stale_submodules:  &git_clean_stale_submodules >
44   find . -name '.git' -not -path './.git' -printf '%P\n'
45   | sed 's|/.git||'
46   | xargs -I {} sh -c '
47   grep -q {} .gitmodules
48   ||  (echo "Removing {}, has .git directory but not in .gitmodules file"
49   && rm -rf {});'
50
51 # before each job, we need to check if this job is filtered by bot stage/job filter
52 .apply_bot_filter: &apply_bot_filter
53   python $APPLY_BOT_FILTER_SCRIPT || exit 0
54
55 before_script:
56   - *git_clean_stale_submodules
57   # apply bot filter in before script
58   - *apply_bot_filter
59   # add gitlab ssh key
60   - mkdir -p ~/.ssh
61   - chmod 700 ~/.ssh
62   - echo -n $GITLAB_KEY > ~/.ssh/id_rsa_base64
63   - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
64   - chmod 600 ~/.ssh/id_rsa
65   - echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
66
67   # Set IS_PRIVATE or IS_PUBLIC depending on if our branch is public or not
68   #
69   # (the same regular expressions are used to set these are used in 'only:' sections below
70   - source tools/ci/configure_ci_environment.sh
71
72   # fetch the submodules (& if necessary re-fetch repo) from gitlab
73   - time ./tools/ci/get-full-sources.sh
74
75 # used for check scripts which we want to run unconditionally
76 .do_nothing_before_no_filter:
77   before_script: &do_nothing_before_no_filter
78     - *git_clean_stale_submodules
79
80 # used for everything else where we want to do no prep, except for bot filter
81 .do_nothing_before:
82   before_script: &do_nothing_before
83     - *git_clean_stale_submodules
84     # apply bot filter in before script
85     - *apply_bot_filter
86     - echo "Not setting up GitLab key, not fetching submodules"
87     - source tools/ci/configure_ci_environment.sh
88
89 .add_gitlab_key_before:
90   before_script: &add_gitlab_key_before
91     - *git_clean_stale_submodules
92     # apply bot filter in before script
93     - *apply_bot_filter
94     - echo "Not fetching submodules"
95     - source tools/ci/configure_ci_environment.sh
96     # add gitlab ssh key
97     - mkdir -p ~/.ssh
98     - chmod 700 ~/.ssh
99     - echo -n $GITLAB_KEY > ~/.ssh/id_rsa_base64
100     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
101     - chmod 600 ~/.ssh/id_rsa
102     - echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
103
104 build_template_app:
105   stage: build
106   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
107   tags:
108     - build
109   variables:
110     BATCH_BUILD: "1"
111     IDF_CI_BUILD: "1"
112   script:
113     - git clone https://github.com/espressif/esp-idf-template.git
114     - cd esp-idf-template
115     # Try to use the same branch name for esp-idf-template that we're
116     # using on esp-idf. If it doesn't exist then just stick to the default
117     # branch
118     - python $CHECKOUT_REF_SCRIPT esp-idf-template
119     # Test debug build (default)
120     - make all V=1
121     # Now test release build
122     - make clean
123     - sed -i.bak -e's/CONFIG_OPTIMIZATION_LEVEL_DEBUG\=y/CONFIG_OPTIMIZATION_LEVEL_RELEASE=y/' sdkconfig
124     - make all V=1
125     # Check if there are any stray printf/ets_printf references in WiFi libs
126     - cd ../components/esp32/lib
127     - test $(xtensa-esp32-elf-nm *.a | grep -w printf | wc -l) -eq 0
128     - test $(xtensa-esp32-elf-nm *.a | grep -w ets_printf | wc -l) -eq 0
129
130
131 .build_template: &build_template
132   stage: build
133   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
134   tags:
135     - build
136   variables:
137     BATCH_BUILD: "1"
138     V: "0"
139
140 .build_ssc_template: &build_ssc_template
141   <<: *build_template
142   artifacts:
143     paths:
144       - SSC/ssc_bin
145     expire_in: 1 week
146   variables:
147     SSC_CONFIG_FOLDER: "$CI_PROJECT_DIR/SSC/configs/ESP32_IDF"
148   script:
149     - git clone $SSC_REPOSITORY
150     - cd SSC
151     - python $CHECKOUT_REF_SCRIPT SSC
152     - MAKEFLAGS= ./ci_build_ssc.sh "${CI_JOB_NAME}" "${IDF_PATH}/.gitlab-ci.yml"
153
154 # don't forget to add to dependency to test_template when adding new build_ssc jobs
155 build_ssc_00:
156   <<: *build_ssc_template
157
158 build_ssc_01:
159   <<: *build_ssc_template
160
161 build_ssc_02:
162   <<: *build_ssc_template
163
164 # If you want to add new build ssc jobs, please add it into dependencies of `assign_test` and `.test_template`
165
166 build_esp_idf_tests:
167   <<: *build_template
168   artifacts:
169     paths:
170       - tools/unit-test-app/output
171       - components/idf_test/unit_test/TestCaseAll.yml
172       - components/idf_test/unit_test/CIConfigs/*.yml
173     expire_in: 2 days
174   script:
175     - cd tools/unit-test-app
176     - MAKEFLAGS= make help # make sure kconfig tools are built in single process
177     - make ut-clean-all-configs
178     - export EXTRA_CFLAGS="-Werror -Werror=deprecated-declarations"
179     - export EXTRA_CXXFLAGS=${EXTRA_CFLAGS}
180     - make ut-build-all-configs
181     - python tools/UnitTestParser.py
182
183 .build_examples_make_template: &build_examples_make_template
184   <<: *build_template
185   retry: 1
186   artifacts:
187     when: always
188     paths:
189       - build_examples/*/*/*/build/*.bin
190       - build_examples/*/*/*/build/*.elf
191       - build_examples/*/*/*/build/*.map
192       - build_examples/*/*/*/build/download.config
193       - build_examples/*/*/*/build/bootloader/*.bin
194       - $LOG_PATH
195     expire_in: 2 days
196   variables:
197     IDF_CI_BUILD: "1"
198     LOG_PATH: "$CI_PROJECT_DIR/log_examples_make"
199   script:
200     # it's not possible to build 100% out-of-tree and have the "artifacts"
201     # mechanism work, but this is the next best thing
202     - rm -rf build_examples
203     - mkdir build_examples
204     - cd build_examples
205     # build some of examples
206     - mkdir -p ${LOG_PATH}
207     - ${IDF_PATH}/tools/ci/build_examples.sh "${CI_JOB_NAME}"
208
209 # same as above, but for CMake
210 .build_examples_cmake_template: &build_examples_cmake_template
211   <<: *build_template
212   retry: 1
213   artifacts:
214     when: always
215     paths:
216       - build_examples_cmake/*/*/*/build/*.bin
217       - build_examples_cmake/*/*/*/build/*.elf
218       - build_examples_cmake/*/*/*/build/*.map
219       - build_examples_cmake/*/*/*/build/download.config
220       - build_examples_cmake/*/*/*/build/bootloader/*.bin
221       - $LOG_PATH
222     expire_in: 2 days
223   variables:
224     IDF_CI_BUILD: "1"
225     LOG_PATH: "$CI_PROJECT_DIR/log_examples_cmake"
226   script:
227     # it's not possible to build 100% out-of-tree and have the "artifacts"
228     # mechanism work, but this is the next best thing
229     - rm -rf build_examples_cmake
230     - mkdir build_examples_cmake
231     - cd build_examples_cmake
232     # build some of examples
233     - mkdir -p ${LOG_PATH}
234     - ${IDF_PATH}/tools/ci/build_examples_cmake.sh "${CI_JOB_NAME}"
235
236 build_examples_make_00:
237   <<: *build_examples_make_template
238
239 build_examples_make_01:
240   <<: *build_examples_make_template
241
242 build_examples_make_02:
243   <<: *build_examples_make_template
244
245 build_examples_make_03:
246   <<: *build_examples_make_template
247
248 build_examples_make_04:
249   <<: *build_examples_make_template
250
251 build_examples_make_05:
252   <<: *build_examples_make_template
253
254 build_examples_make_06:
255   <<: *build_examples_make_template
256
257 build_examples_make_07:
258   <<: *build_examples_make_template
259
260 build_examples_cmake_00:
261   <<: *build_examples_cmake_template
262
263 build_examples_cmake_01:
264   <<: *build_examples_cmake_template
265
266 build_examples_cmake_02:
267   <<: *build_examples_cmake_template
268
269 build_examples_cmake_03:
270   <<: *build_examples_cmake_template
271
272 build_examples_cmake_04:
273   <<: *build_examples_cmake_template
274
275 build_examples_cmake_05:
276   <<: *build_examples_cmake_template
277
278 build_examples_cmake_06:
279   <<: *build_examples_cmake_template
280
281 build_examples_cmake_07:
282   <<: *build_examples_cmake_template
283
284 # If you want to add new build example jobs, please add it into dependencies of `.example_test_template`
285
286 build_docs:
287   stage: build
288   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
289   tags:
290     - build_docs
291   artifacts:
292     when: always
293     paths:
294       # English version of documentation
295       - docs/en/doxygen-warning-log.txt
296       - docs/en/sphinx-warning-log.txt
297       - docs/en/sphinx-warning-log-sanitized.txt
298       - docs/en/_build/html
299       # Chinese version of documentation
300       - docs/zh_CN/doxygen-warning-log.txt
301       - docs/zh_CN/sphinx-warning-log.txt
302       - docs/zh_CN/sphinx-warning-log-sanitized.txt
303       - docs/zh_CN/_build/html
304     expire_in: 1 day
305   script:
306     - cd docs
307     - ./check_lang_folder_sync.sh
308     - cd en
309     - make gh-linkcheck
310     - make html
311     - ../check_doc_warnings.sh
312     - cd ../zh_CN
313     - make gh-linkcheck
314     - make html
315     - ../check_doc_warnings.sh
316
317 verify_cmake_style:
318   stage: build
319   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
320   script:
321     tools/cmake/run_cmake_lint.sh
322
323 .host_test_template: &host_test_template
324   stage: host_test
325   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
326   tags:
327     - host_test
328   dependencies: []
329
330 test_nvs_on_host:
331   <<: *host_test_template
332   script:
333     - cd components/nvs_flash/test_nvs_host
334     - make test
335
336 test_nvs_coverage:
337   <<: *host_test_template
338   artifacts:
339     paths:
340       - components/nvs_flash/test_nvs_host/coverage_report
341     expire_in: 1 week
342   only:
343     - triggers
344   # This job takes a few hours to finish, so only run it on demand
345   variables:
346     BOT_NEEDS_TRIGGER_BY_NAME: 1
347   script:
348     - cd components/nvs_flash/test_nvs_host
349     - make coverage_report
350
351 test_partition_table_on_host:
352   <<: *host_test_template
353   tags:
354     - build
355   script:
356     - cd components/partition_table/test_gen_esp32part_host
357     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh ./gen_esp32part_tests.py
358
359 test_wl_on_host:
360   <<: *host_test_template
361   artifacts:
362     paths:
363       - components/wear_levelling/test_wl_host/coverage_report.zip
364     expire_in: 1 week
365   script:
366     - cd components/wear_levelling/test_wl_host
367     - make test
368
369 test_fatfs_on_host:
370   <<: *host_test_template
371   script:
372     - cd components/fatfs/test_fatfs_host/
373     - make test
374
375 .host_fuzzer_test_template: &host_fuzzer_test_template
376   stage: host_test
377   image: $CI_DOCKER_REGISTRY/afl-fuzzer-test
378   tags:
379     - host_test
380   dependencies: []
381   artifacts:
382     when: always
383     paths:
384       - ${FUZZER_TEST_DIR}/out/crashes
385       - ${FUZZER_TEST_DIR}/fuzz_output.log
386     expire_in: 1 week
387   only:
388     # can only be triggered
389     - triggers
390   script:
391     - export AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1 && export AFL_SKIP_CPUFREQ=1
392     - cd ${FUZZER_TEST_DIR}
393     # run AFL fuzzer for one hour
394     - ( ( make ${FUZZER_PARAMS} fuzz | tee fuzz_output.log | grep -v '\(Fuzzing test case\|Entering queue cycle\)' ) || pkill sleep ) &
395     - ( sleep 3600 || mkdir -p out/crashes/env_failed ) && pkill afl-fuz
396     # check no crashes found
397     - test -z "$(ls out/crashes/)" || exit 1
398
399 test_mdns_fuzzer_on_host:
400   <<: *host_fuzzer_test_template
401   variables:
402     BOT_NEEDS_TRIGGER_BY_NAME: 1
403     FUZZER_TEST_DIR: components/mdns/test_afl_fuzz_host
404
405 test_lwip_dns_fuzzer_on_host:
406   <<: *host_fuzzer_test_template
407   variables:
408     BOT_NEEDS_TRIGGER_BY_NAME: 1
409     FUZZER_TEST_DIR: components/lwip/test_afl_host
410     FUZZER_PARAMS: MODE=dns
411
412 test_lwip_dhcp_fuzzer_on_host:
413   <<: *host_fuzzer_test_template
414   variables:
415     BOT_NEEDS_TRIGGER_BY_NAME: 1
416     FUZZER_TEST_DIR: components/lwip/test_afl_host
417     FUZZER_PARAMS: MODE=dhcp_client
418
419 test_lwip_dhcps_fuzzer_on_host:
420   <<: *host_fuzzer_test_template
421   variables:
422     BOT_NEEDS_TRIGGER_BY_NAME: 1
423     FUZZER_TEST_DIR: components/lwip/test_afl_host
424     FUZZER_PARAMS: MODE=dhcp_server
425
426 test_spiffs_on_host:
427   <<: *host_test_template
428   script:
429     - cd components/spiffs/test_spiffs_host/
430     - make test
431
432 test_multi_heap_on_host:
433   <<: *host_test_template
434   script:
435     - cd components/heap/test_multi_heap_host
436     - ./test_all_configs.sh
437
438 test_confserver:
439   <<: *host_test_template
440   script:
441     - cd tools/kconfig_new/test
442     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh ./test_confserver.py
443
444 test_build_system:
445   <<: *host_test_template
446   script:
447     - ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
448     - rm -rf test_build_system
449     - mkdir test_build_system
450     - cd test_build_system
451     - ${IDF_PATH}/tools/ci/test_build_system.sh
452
453 test_build_system_cmake:
454   <<: *host_test_template
455   script:
456     - ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
457     - rm -rf test_build_system
458     - mkdir test_build_system
459     - cd test_build_system
460     - ${IDF_PATH}/tools/ci/test_build_system_cmake.sh
461
462 test_idf_monitor:
463   <<: *host_test_template
464   artifacts:
465     when: on_failure
466     paths:
467       - tools/test_idf_monitor/outputs/*
468     expire_in: 1 week
469   script:
470     - cd ${IDF_PATH}/tools/test_idf_monitor
471     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh ./run_test_idf_monitor.py
472
473 test_idf_size:
474   <<: *host_test_template
475   artifacts:
476     when: on_failure
477     paths:
478       - tools/test_idf_size/output
479       - tools/test_idf_size/.coverage
480     expire_in: 1 week
481   script:
482     - cd ${IDF_PATH}/tools/test_idf_size
483     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh ./test.sh
484
485 test_esp_err_to_name_on_host:
486   <<: *host_test_template
487   artifacts:
488     when: on_failure
489     paths:
490       - components/esp32/esp_err_to_name.c
491     expire_in: 1 week
492   script:
493     - cd ${IDF_PATH}/tools/
494     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 2.7.15 ./gen_esp_err_to_name.py
495     - 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)
496     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.4.8 ./gen_esp_err_to_name.py
497     - git diff --exit-code -- ../components/esp32/esp_err_to_name.c || (echo 'Differences found between running under Python 2 and 3.'; exit 1)
498
499 test_espcoredump:
500   <<: *host_test_template
501   artifacts:
502     when: always
503     paths:
504       - components/espcoredump/test/.coverage
505       - components/espcoredump/test/output
506     expire_in: 1 week
507   script:
508     - cd components/espcoredump/test/
509     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh ./test_espcoredump.sh
510
511 push_to_github:
512   stage: deploy
513   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
514   tags:
515     - deploy
516   only:
517     - master
518     - /^release\/v/
519     - /^v\d+\.\d+(\.\d+)?($|-)/
520   when: on_success
521   dependencies: []
522   before_script: *do_nothing_before
523   script:
524     - mkdir -p ~/.ssh
525     - chmod 700 ~/.ssh
526     - echo -n $GH_PUSH_KEY > ~/.ssh/id_rsa_base64
527     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
528     - chmod 600 ~/.ssh/id_rsa
529     - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
530     - git remote remove github &>/dev/null || true
531     - git remote add github git@github.com:espressif/esp-idf.git
532     - tools/ci/push_to_github.sh
533
534 deploy_docs:
535   stage: host_test
536   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
537   tags:
538     - deploy
539   only:
540    - master
541    - /^release\/v/
542    - /^v\d+\.\d+(\.\d+)?($|-)/
543    - triggers
544   dependencies:
545     - build_docs
546   before_script: *do_nothing_before
547   script:
548     - mkdir -p ~/.ssh
549     - chmod 700 ~/.ssh
550     - echo -n $DOCS_DEPLOY_KEY > ~/.ssh/id_rsa_base64
551     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
552     - chmod 600 ~/.ssh/id_rsa
553     - echo -e "Host $DOCS_SERVER\n\tStrictHostKeyChecking no\n\tUser $DOCS_SERVER_USER\n" >> ~/.ssh/config
554     - export GIT_VER=$(git describe --always)
555     - cd docs/en/_build/
556     - mv html $GIT_VER
557     - tar czvf $GIT_VER.tar.gz $GIT_VER
558     - scp $GIT_VER.tar.gz $DOCS_SERVER:$DOCS_PATH/en
559     - ssh $DOCS_SERVER -x "cd $DOCS_PATH/en && tar xzvf $GIT_VER.tar.gz && rm -f latest && ln -s $GIT_VER latest"
560     - cd ../../zh_CN/_build/
561     - mv html $GIT_VER
562     - tar czvf $GIT_VER.tar.gz $GIT_VER
563     - scp $GIT_VER.tar.gz $DOCS_SERVER:$DOCS_PATH/zh_CN
564     - ssh $DOCS_SERVER -x "cd $DOCS_PATH/zh_CN && tar xzvf $GIT_VER.tar.gz && rm -f latest && ln -s $GIT_VER latest"
565     # add link to preview doc
566     - echo "[document preview][en] $CI_DOCKER_REGISTRY/docs/esp-idf/en/${GIT_VER}/index.html"
567     - echo "[document preview][zh_CN] $CI_DOCKER_REGISTRY/docs/esp-idf/zh_CN/${GIT_VER}/index.html"
568
569 check_doc_links:
570   stage: host_test
571   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
572   tags:
573     - check_doc_links
574   only:
575     # can only be triggered
576     - triggers
577   artifacts:
578     paths:
579       - docs/_build/linkcheck
580     expire_in: 1 week
581   script:
582     # must be triggered with CHECK_LINKS=Yes, otherwise exit without test
583     - test "$CHECK_LINKS" = "Yes" || exit 0
584     # can only run on master branch (otherwise the commit is not on Github yet)
585     - test "${CI_COMMIT_REF_NAME}" = "master" || exit 0
586     - cd docs
587     - make linkcheck
588
589 .check_job_template: &check_job_template
590   stage: check
591   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
592   tags:
593     - build
594   dependencies: []
595   before_script: *do_nothing_before_no_filter
596
597 check_line_endings:
598   <<: *check_job_template
599   script:
600     - tools/ci/check-line-endings.sh ${IDF_PATH}
601
602 check_commit_msg:
603   <<: *check_job_template
604   script:
605     - git status
606     - git log -n10 --oneline
607     # commit start with "WIP: " need to be squashed before merge
608     - 'git log --pretty=%s master.. -- | grep "^WIP: " && exit 1 || exit 0'
609
610 check_permissions:
611   <<: *check_job_template
612   script:
613     - tools/ci/check-executable.sh
614
615 check_examples_cmake_make:
616   <<: *check_job_template
617   except:
618     - master
619     - /^release\/v/
620     - /^v\d+\.\d+(\.\d+)?($|-)/
621   before_script: *do_nothing_before
622   script:
623     - tools/ci/check_examples_cmake_make.sh
624
625 check_submodule_sync:
626   <<: *check_job_template
627   variables:
628     GIT_STRATEGY: clone
629   script:
630     # check if all submodules are correctly synced to public repostory
631     - git submodule update --init --recursive
632
633 check_artifacts_expire_time:
634   <<: *check_job_template
635   script:
636     # check if we have set expire time for all artifacts
637     - python tools/ci/check_artifacts_expire_time.py
638
639 assign_test:
640   tags:
641     - assign_test
642   image: $CI_DOCKER_REGISTRY/ubuntu-test-env$BOT_DOCKER_IMAGE_TAG
643   stage: assign_test
644   # gitlab ci do not support match job with RegEx or wildcard now in dependencies.
645   # we have a lot build example jobs. now we don't use dependencies, just download all artificats of build stage.
646   dependencies:
647     - build_ssc_00
648     - build_ssc_01
649     - build_ssc_02
650     - build_esp_idf_tests
651   variables:
652     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
653     EXAMPLE_CONFIG_OUTPUT_PATH: "$CI_PROJECT_DIR/examples/test_configs"
654   artifacts:
655     paths:
656       - components/idf_test/*/CIConfigs
657       - components/idf_test/*/TC.sqlite
658       - $EXAMPLE_CONFIG_OUTPUT_PATH
659     expire_in: 1 week
660   before_script: *add_gitlab_key_before
661   script:
662     # assign example tests
663     - python $TEST_FW_PATH/CIAssignExampleTest.py $IDF_PATH/examples $IDF_PATH/.gitlab-ci.yml $EXAMPLE_CONFIG_OUTPUT_PATH
664     # assign unit test cases
665     - 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
666     # clone test script to assign tests
667     - git clone $TEST_SCRIPT_REPOSITORY
668     - cd auto_test_script
669     - python $CHECKOUT_REF_SCRIPT auto_test_script
670     # assgin integration test cases
671     - python CIAssignTestCases.py -t $IDF_PATH/components/idf_test/integration_test -c $IDF_PATH/.gitlab-ci.yml -b $IDF_PATH/SSC/ssc_bin
672
673 .example_test_template: &example_test_template
674   stage: integration_test
675   when: on_success
676   only:
677     - master
678     - /^release\/v/
679     - /^v\d+\.\d+(\.\d+)?($|-)/
680     - triggers
681     - schedules
682   dependencies:
683     - assign_test
684     - build_examples_make_00
685     - build_examples_make_01
686     - build_examples_make_02
687     - build_examples_make_03
688     - build_examples_make_04
689     - build_examples_make_05
690     - build_examples_make_06
691     - build_examples_make_07
692     - build_examples_cmake_00
693     - build_examples_cmake_01
694     - build_examples_cmake_02
695     - build_examples_cmake_03
696     - build_examples_cmake_04
697     - build_examples_cmake_05
698     - build_examples_cmake_06
699     - build_examples_cmake_07
700   artifacts:
701     when: always
702     paths:
703       - $LOG_PATH
704     expire_in: 1 week
705   variables:
706     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
707     TEST_CASE_PATH: "$CI_PROJECT_DIR/examples"
708     CONFIG_FILE: "$CI_PROJECT_DIR/examples/test_configs/$CI_JOB_NAME.yml"
709     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
710     ENV_FILE: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/EnvConfig.yml"
711   script:
712     # first test if config file exists, if not exist, exit 0
713     - test -e $CONFIG_FILE || exit 0
714     # clone test env configs
715     - git clone $TEST_ENV_CONFIG_REPOSITORY
716     - cd ci-test-runner-configs
717     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
718     - cd $TEST_FW_PATH
719     # run test
720     - python Runner.py $TEST_CASE_PATH -c $CONFIG_FILE -e $ENV_FILE
721
722 .unit_test_template: &unit_test_template
723   <<: *example_test_template
724   stage: unit_test
725   dependencies:
726     - assign_test
727     - build_esp_idf_tests
728   variables:
729     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
730     TEST_CASE_PATH: "$CI_PROJECT_DIR/tools/unit-test-app"
731     CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/unit_test/CIConfigs/$CI_JOB_NAME.yml"
732     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
733     ENV_FILE: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/EnvConfig.yml"
734
735 .test_template: &test_template
736   stage: integration_test
737   when: on_success
738   only:
739     - master
740     - /^release\/v/
741     - /^v\d+\.\d+(\.\d+)?($|-)/
742     - triggers
743     - schedules
744   dependencies:
745     - assign_test
746     - build_ssc_00
747     - build_ssc_01
748     - build_ssc_02
749   artifacts:
750     when: always
751     paths:
752       - $LOG_PATH
753     expire_in: 1 week
754   variables:
755     LOCAL_ENV_CONFIG_PATH: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/ESP32_IDF"
756     LOG_PATH: "$CI_PROJECT_DIR/$CI_COMMIT_SHA"
757     TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test/integration_test"
758     MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/components/idf_test/ModuleDefinition.yml"
759     CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/integration_test/CIConfigs/$CI_JOB_NAME.yml"
760   before_script: *add_gitlab_key_before
761   script:
762     # first test if config file exists, if not exist, exit 0
763     - test -e $CONFIG_FILE || exit 0
764     # clone local test env configs
765     - git clone $TEST_ENV_CONFIG_REPOSITORY
766     - cd ci-test-runner-configs
767     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
768     # clone test bench
769     - git clone $TEST_SCRIPT_REPOSITORY
770     - cd auto_test_script
771     - python $CHECKOUT_REF_SCRIPT auto_test_script
772     # run test
773     - 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
774
775 nvs_compatible_test:
776   <<: *test_template
777   artifacts:
778     when: always
779     paths:
780       - $LOG_PATH
781       - nvs_wifi.bin
782     expire_in: 1 mos
783   tags:
784     - ESP32_IDF
785     - NVS_Compatible
786   script:
787     # clone local test env configs
788     - git clone $TEST_ENV_CONFIG_REPOSITORY
789     - cd ci-test-runner-configs
790     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
791     # clone test bench
792     - git clone $TEST_SCRIPT_REPOSITORY
793     - cd auto_test_script
794     - git checkout ${CI_COMMIT_REF_NAME} || echo "Using default branch..."
795     # prepare nvs bins
796     - ./Tools/prepare_nvs_bin.sh
797     # run test
798     - 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
799
800 example_test_001_01:
801   <<: *example_test_template
802   tags:
803     - ESP32
804     - Example_WIFI
805
806 example_test_002_01:
807   <<: *example_test_template
808   image: $CI_DOCKER_REGISTRY/ubuntu-test-env$BOT_DOCKER_IMAGE_TAG
809   tags:
810     - ESP32
811     - Example_ShieldBox
812
813 example_test_003_01:
814   <<: *example_test_template
815   tags:
816     - ESP32
817     - Example_SDIO
818
819 example_test_004_01:
820   <<: *example_test_template
821   tags:
822     - ESP32
823     - Example_CAN
824
825 example_test_005_01:
826   <<: *example_test_template
827   tags:
828     - ESP32
829     - Example_WIFI_BT
830
831 UT_001_01:
832   <<: *unit_test_template
833   tags:
834     - ESP32_IDF
835     - UT_T1_1
836
837 UT_001_02:
838   <<: *unit_test_template
839   tags:
840     - ESP32_IDF
841     - UT_T1_1
842
843 UT_001_03:
844   <<: *unit_test_template
845   tags:
846     - ESP32_IDF
847     - UT_T1_1
848
849 UT_001_04:
850   <<: *unit_test_template
851   tags:
852     - ESP32_IDF
853     - UT_T1_1
854
855 UT_001_05:
856   <<: *unit_test_template
857   tags:
858     - ESP32_IDF
859     - UT_T1_1
860
861 UT_001_06:
862   <<: *unit_test_template
863   tags:
864     - ESP32_IDF
865     - UT_T1_1
866
867 UT_001_07:
868   <<: *unit_test_template
869   tags:
870     - ESP32_IDF
871     - UT_T1_1
872
873 UT_001_08:
874   <<: *unit_test_template
875   tags:
876     - ESP32_IDF
877     - UT_T1_1
878
879 UT_001_09:
880   <<: *unit_test_template
881   tags:
882     - ESP32_IDF
883     - UT_T1_1
884
885 UT_001_10:
886   <<: *unit_test_template
887   tags:
888     - ESP32_IDF
889     - UT_T1_1
890
891 UT_001_11:
892   <<: *unit_test_template
893   tags:
894     - ESP32_IDF
895     - UT_T1_1
896
897 UT_001_12:
898   <<: *unit_test_template
899   tags:
900     - ESP32_IDF
901     - UT_T1_1
902
903 UT_001_13:
904   <<: *unit_test_template
905   tags:
906     - ESP32_IDF
907     - UT_T1_1
908
909 UT_001_14:
910   <<: *unit_test_template
911   tags:
912     - ESP32_IDF
913     - UT_T1_1
914
915 UT_001_15:
916   <<: *unit_test_template
917   tags:
918     - ESP32_IDF
919     - UT_T1_1
920
921 UT_001_16:
922   <<: *unit_test_template
923   tags:
924     - ESP32_IDF
925     - UT_T1_1
926
927 UT_001_17:
928   <<: *unit_test_template
929   tags:
930     - ESP32_IDF
931     - UT_T1_1
932
933 UT_001_18:
934   <<: *unit_test_template
935   tags:
936     - ESP32_IDF
937     - UT_T1_1
938
939 UT_001_19:
940   <<: *unit_test_template
941   tags:
942     - ESP32_IDF
943     - UT_T1_1
944
945 UT_001_20:
946   <<: *unit_test_template
947   tags:
948     - ESP32_IDF
949     - UT_T1_1
950
951 UT_001_21:
952   <<: *unit_test_template
953   tags:
954     - ESP32_IDF
955     - UT_T1_1
956
957 UT_001_22:
958   <<: *unit_test_template
959   tags:
960     - ESP32_IDF
961     - UT_T1_1
962
963 UT_001_23:
964   <<: *unit_test_template
965   tags:
966     - ESP32_IDF
967     - UT_T1_1
968
969 UT_001_24:
970   <<: *unit_test_template
971   tags:
972     - ESP32_IDF
973     - UT_T1_1
974
975 UT_001_25:
976   <<: *unit_test_template
977   tags:
978     - ESP32_IDF
979     - UT_T1_1
980
981 UT_001_26:
982   <<: *unit_test_template
983   tags:
984     - ESP32_IDF
985     - UT_T1_1
986
987 UT_001_27:
988   <<: *unit_test_template
989   tags:
990     - ESP32_IDF
991     - UT_T1_1
992
993 UT_001_28:
994   <<: *unit_test_template
995   tags:
996     - ESP32_IDF
997     - UT_T1_1
998
999 UT_001_29:
1000   <<: *unit_test_template
1001   tags:
1002     - ESP32_IDF
1003     - UT_T1_1
1004
1005 UT_001_30:
1006   <<: *unit_test_template
1007   tags:
1008     - ESP32_IDF
1009     - UT_T1_1
1010
1011 UT_001_31:
1012   <<: *unit_test_template
1013   tags:
1014     - ESP32_IDF
1015     - UT_T1_1
1016
1017 UT_001_32:
1018   <<: *unit_test_template
1019   tags:
1020     - ESP32_IDF
1021     - UT_T1_1
1022
1023 UT_001_33:
1024   <<: *unit_test_template
1025   tags:
1026     - ESP32_IDF
1027     - UT_T1_1
1028
1029 UT_001_34:
1030   <<: *unit_test_template
1031   tags:
1032     - ESP32_IDF
1033     - UT_T1_1
1034
1035 UT_001_35:
1036   <<: *unit_test_template
1037   tags:
1038     - ESP32_IDF
1039     - UT_T1_1
1040
1041 UT_001_36:
1042   <<: *unit_test_template
1043   tags:
1044     - ESP32_IDF
1045     - UT_T1_1
1046
1047 UT_002_01:
1048   <<: *unit_test_template
1049   tags:
1050     - ESP32_IDF
1051     - UT_T1_SDMODE
1052
1053 UT_002_02:
1054   <<: *unit_test_template
1055   tags:
1056     - ESP32_IDF
1057     - UT_T1_SDMODE
1058
1059 UT_002_03:
1060   <<: *unit_test_template
1061   tags:
1062     - ESP32_IDF
1063     - UT_T1_SDMODE
1064
1065 UT_003_01:
1066   <<: *unit_test_template
1067   tags:
1068     - ESP32_IDF
1069     - UT_T1_SPIMODE
1070
1071 UT_003_02:
1072   <<: *unit_test_template
1073   tags:
1074     - ESP32_IDF
1075     - UT_T1_SPIMODE
1076
1077 UT_003_03:
1078   <<: *unit_test_template
1079   tags:
1080     - ESP32_IDF
1081     - UT_T1_SPIMODE
1082
1083 UT_004_01:
1084   <<: *unit_test_template
1085   tags:
1086     - ESP32_IDF
1087     - UT_T1_1
1088     - psram
1089
1090 UT_004_02:
1091   <<: *unit_test_template
1092   tags:
1093     - ESP32_IDF
1094     - UT_T1_1
1095     - psram
1096
1097 UT_004_03:
1098   <<: *unit_test_template
1099   tags:
1100     - ESP32_IDF
1101     - UT_T1_1
1102     - psram
1103
1104 UT_004_04:
1105   <<: *unit_test_template
1106   tags:
1107     - ESP32_IDF
1108     - UT_T1_1
1109     - psram
1110
1111 UT_004_05:
1112   <<: *unit_test_template
1113   tags:
1114     - ESP32_IDF
1115     - UT_T1_1
1116     - psram
1117
1118 UT_004_06:
1119   <<: *unit_test_template
1120   tags:
1121     - ESP32_IDF
1122     - UT_T1_1
1123     - psram
1124
1125 UT_004_07:
1126   <<: *unit_test_template
1127   tags:
1128     - ESP32_IDF
1129     - UT_T1_1
1130     - psram
1131
1132 UT_004_08:
1133   <<: *unit_test_template
1134   tags:
1135     - ESP32_IDF
1136     - UT_T1_1
1137     - psram
1138
1139 UT_004_09:
1140   <<: *unit_test_template
1141   tags:
1142     - ESP32_IDF
1143     - UT_T1_1
1144     - psram
1145
1146 UT_004_10:
1147   <<: *unit_test_template
1148   tags:
1149     - ESP32_IDF
1150     - UT_T1_1
1151     - psram
1152
1153 UT_004_11:
1154   <<: *unit_test_template
1155   tags:
1156     - ESP32_IDF
1157     - UT_T1_1
1158     - psram
1159
1160 UT_004_12:
1161   <<: *unit_test_template
1162   tags:
1163     - ESP32_IDF
1164     - UT_T1_1
1165     - psram
1166
1167 UT_004_13:
1168   <<: *unit_test_template
1169   tags:
1170     - ESP32_IDF
1171     - UT_T1_1
1172     - psram
1173     
1174 UT_005_01:
1175   <<: *unit_test_template
1176   tags:
1177     - ESP32_IDF
1178     - UT_T1_SDMODE
1179     - psram
1180
1181 UT_005_02:
1182   <<: *unit_test_template
1183   tags:
1184     - ESP32_IDF
1185     - UT_T1_SPIMODE
1186     - psram
1187
1188 UT_005_03:
1189   <<: *unit_test_template
1190   tags:
1191     - ESP32_IDF
1192     - UT_T1_SPIMODE
1193     - psram
1194
1195 UT_006_01:
1196   <<: *unit_test_template
1197   tags:
1198     - ESP32_IDF
1199     - UT_T1_GPIO
1200
1201 UT_006_02:
1202   <<: *unit_test_template
1203   tags:
1204     - ESP32_IDF
1205     - UT_T1_GPIO
1206
1207 UT_006_03:
1208   <<: *unit_test_template
1209   tags:
1210     - ESP32_IDF
1211     - UT_T1_GPIO
1212
1213 UT_006_04:
1214   <<: *unit_test_template
1215   tags:
1216     - ESP32_IDF
1217     - UT_T1_GPIO
1218     - psram
1219
1220 UT_007_01:
1221   <<: *unit_test_template
1222   tags:
1223     - ESP32_IDF
1224     - UT_T1_PCNT
1225
1226 UT_007_02:
1227   <<: *unit_test_template
1228   tags:
1229     - ESP32_IDF
1230     - UT_T1_PCNT
1231
1232 UT_007_03:
1233   <<: *unit_test_template
1234   tags:
1235     - ESP32_IDF
1236     - UT_T1_PCNT
1237
1238 UT_007_04:
1239   <<: *unit_test_template
1240   tags:
1241     - ESP32_IDF
1242     - UT_T1_PCNT
1243     - psram
1244
1245 UT_008_01:
1246   <<: *unit_test_template
1247   tags:
1248     - ESP32_IDF
1249     - UT_T1_LEDC
1250
1251 UT_008_02:
1252   <<: *unit_test_template
1253   tags:
1254     - ESP32_IDF
1255     - UT_T1_LEDC
1256
1257 UT_008_03:
1258   <<: *unit_test_template
1259   tags:
1260     - ESP32_IDF
1261     - UT_T1_LEDC
1262
1263 UT_008_04:
1264   <<: *unit_test_template
1265   tags:
1266     - ESP32_IDF
1267     - UT_T1_LEDC
1268     - psram
1269
1270 UT_010_01:
1271   <<: *unit_test_template
1272   tags:
1273     - ESP32_IDF
1274     - UT_T1_RMT
1275
1276 UT_010_02:
1277   <<: *unit_test_template
1278   tags:
1279     - ESP32_IDF
1280     - UT_T1_RMT
1281
1282 UT_010_03:
1283   <<: *unit_test_template
1284   tags:
1285     - ESP32_IDF
1286     - UT_T1_RMT
1287
1288 UT_010_04:
1289   <<: *unit_test_template
1290   tags:
1291     - ESP32_IDF
1292     - UT_T1_RMT
1293     - psram
1294
1295 UT_011_01:
1296   <<: *unit_test_template
1297   tags:
1298     - ESP32_IDF
1299     - EMMC
1300
1301 UT_011_02:
1302   <<: *unit_test_template
1303   tags:
1304     - ESP32_IDF
1305     - EMMC
1306
1307 UT_011_03:
1308   <<: *unit_test_template
1309   tags:
1310     - ESP32_IDF
1311     - EMMC
1312
1313 UT_012_01:
1314   <<: *unit_test_template
1315   tags:
1316     - ESP32_IDF
1317     - UT_T1_1
1318     - 8Mpsram
1319
1320 UT_012_02:
1321   <<: *unit_test_template
1322   tags:
1323     - ESP32_IDF
1324     - UT_T1_1
1325     - 8Mpsram
1326
1327 UT_012_03:
1328   <<: *unit_test_template
1329   tags:
1330     - ESP32_IDF
1331     - UT_T1_1
1332     - 8Mpsram
1333
1334 UT_601_01:
1335   <<: *unit_test_template
1336   tags:
1337     - ESP32_IDF
1338     - UT_T1_1
1339
1340 IT_001_01:
1341   <<: *test_template
1342   tags:
1343     - ESP32_IDF
1344     - SSC_T1_4
1345
1346 IT_001_02:
1347   <<: *test_template
1348   tags:
1349     - ESP32_IDF
1350     - SSC_T1_4
1351
1352 IT_001_03:
1353   <<: *test_template
1354   tags:
1355     - ESP32_IDF
1356     - SSC_T1_4
1357
1358 IT_002_01:
1359   <<: *test_template
1360   tags:
1361     - ESP32_IDF
1362     - SSC_T1_2
1363
1364 IT_003_01:
1365   <<: *test_template
1366   tags:
1367     - ESP32_IDF
1368     - SSC_T2_5
1369
1370 IT_003_02:
1371   <<: *test_template
1372   tags:
1373     - ESP32_IDF
1374     - SSC_T2_5
1375
1376 IT_003_03:
1377   <<: *test_template
1378   tags:
1379     - ESP32_IDF
1380     - SSC_T2_5
1381
1382 IT_003_04:
1383   <<: *test_template
1384   tags:
1385     - ESP32_IDF
1386     - SSC_T2_5
1387
1388 IT_003_05:
1389   <<: *test_template
1390   tags:
1391     - ESP32_IDF
1392     - SSC_T2_5
1393
1394 IT_003_06:
1395   <<: *test_template
1396   tags:
1397     - ESP32_IDF
1398     - SSC_T2_5
1399
1400 IT_003_07:
1401   <<: *test_template
1402   tags:
1403     - ESP32_IDF
1404     - SSC_T2_5
1405
1406 IT_003_08:
1407   <<: *test_template
1408   tags:
1409     - ESP32_IDF
1410     - SSC_T2_5
1411
1412 IT_003_09:
1413   <<: *test_template
1414   tags:
1415     - ESP32_IDF
1416     - SSC_T2_5
1417
1418 IT_003_10:
1419   <<: *test_template
1420   tags:
1421     - ESP32_IDF
1422     - SSC_T2_5
1423
1424 IT_003_11:
1425   <<: *test_template
1426   tags:
1427     - ESP32_IDF
1428     - SSC_T2_5
1429
1430 IT_003_12:
1431   <<: *test_template
1432   tags:
1433     - ESP32_IDF
1434     - SSC_T2_5
1435
1436 IT_003_13:
1437   <<: *test_template
1438   tags:
1439     - ESP32_IDF
1440     - SSC_T2_5
1441
1442 IT_004_01:
1443   <<: *test_template
1444   tags:
1445     - ESP32_IDF
1446     - SSC_T1_APC
1447
1448 IT_005_01:
1449   <<: *test_template
1450   tags:
1451     - ESP32_IDF
1452     - SSC_T1_5
1453
1454 IT_005_02:
1455   <<: *test_template
1456   tags:
1457     - ESP32_IDF
1458     - SSC_T1_5
1459
1460 IT_006_01:
1461   <<: *test_template
1462   tags:
1463     - ESP32_IDF
1464     - SSC_T1_6
1465
1466 IT_006_02:
1467   <<: *test_template
1468   tags:
1469     - ESP32_IDF
1470     - SSC_T1_6
1471
1472 IT_006_03:
1473   <<: *test_template
1474   tags:
1475     - ESP32_IDF
1476     - SSC_T1_6
1477
1478 IT_006_04:
1479   <<: *test_template
1480   tags:
1481     - ESP32_IDF
1482     - SSC_T1_6
1483
1484 IT_006_05:
1485   <<: *test_template
1486   tags:
1487     - ESP32_IDF
1488     - SSC_T1_6
1489
1490 IT_007_01:
1491   <<: *test_template
1492   tags:
1493     - ESP32_IDF
1494     - SSC_T1_7
1495
1496 IT_007_02:
1497   <<: *test_template
1498   tags:
1499     - ESP32_IDF
1500     - SSC_T1_7
1501
1502 IT_008_01:
1503   <<: *test_template
1504   tags:
1505     - ESP32_IDF
1506     - SSC_T1_8
1507
1508 IT_009_01:
1509   <<: *test_template
1510   tags:
1511     - ESP32_IDF
1512     - SSC_T1_3
1513
1514 IT_010_01:
1515   <<: *test_template
1516   tags:
1517     - ESP32_IDF
1518     - SSC_T5_1
1519
1520 IT_011_01:
1521   <<: *test_template
1522   tags:
1523     - ESP32_IDF
1524     - SSC_T50_1
1525
1526 IT_012_01:
1527   <<: *test_template
1528   tags:
1529     - ESP32_IDF
1530     - SSC_T1_9
1531
1532 IT_013_01:
1533   <<: *test_template
1534   tags:
1535     - ESP32_IDF
1536     - SSC_T2_2
1537
1538 IT_013_02:
1539   <<: *test_template
1540   tags:
1541     - ESP32_IDF
1542     - SSC_T2_2
1543
1544 IT_014_01:
1545   <<: *test_template
1546   tags:
1547     - ESP32_IDF
1548     - SSC_T2_3
1549
1550 IT_015_01:
1551   <<: *test_template
1552   tags:
1553     - ESP32_IDF
1554     - SSC_T2_4