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