]> granicus.if.org Git - esp-idf/blob - .gitlab-ci.yml
Merge branch 'feature/mbedtls_mem_alloc_options' into 'master'
[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 mos
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: 1 mos
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: 1 week
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: 1 week
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 mos
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   only:
342     - triggers
343   # This job takes a few hours to finish, so only run it on demand
344   variables:
345     BOT_NEEDS_TRIGGER_BY_NAME: 1
346   script:
347     - cd components/nvs_flash/test_nvs_host
348     - make coverage_report
349
350 test_partition_table_on_host:
351   <<: *host_test_template
352   tags:
353     - build
354   script:
355     - cd components/partition_table/test_gen_esp32part_host
356     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh ./gen_esp32part_tests.py
357
358 test_wl_on_host:
359   <<: *host_test_template
360   artifacts:
361     paths:
362       - components/wear_levelling/test_wl_host/coverage_report.zip
363   script:
364     - cd components/wear_levelling/test_wl_host
365     - make test
366
367 test_fatfs_on_host:
368   <<: *host_test_template
369   script:
370     - cd components/fatfs/test_fatfs_host/
371     - make test
372
373 .host_fuzzer_test_template: &host_fuzzer_test_template
374   stage: host_test
375   image: $CI_DOCKER_REGISTRY/afl-fuzzer-test
376   tags:
377     - host_test
378   dependencies: []
379   artifacts:
380     when: always
381     paths:
382       - ${FUZZER_TEST_DIR}/out/crashes
383       - ${FUZZER_TEST_DIR}/fuzz_output.log
384     expire_in: 1 mos
385   only:
386     # can only be triggered
387     - triggers
388   script:
389     - export AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1 && export AFL_SKIP_CPUFREQ=1
390     - cd ${FUZZER_TEST_DIR}
391     # run AFL fuzzer for one hour
392     - ( ( make ${FUZZER_PARAMS} fuzz | tee fuzz_output.log | grep -v '\(Fuzzing test case\|Entering queue cycle\)' ) || pkill sleep ) &
393     - ( sleep 3600 || mkdir -p out/crashes/env_failed ) && pkill afl-fuz
394     # check no crashes found
395     - test -z "$(ls out/crashes/)" || exit 1
396
397 test_mdns_fuzzer_on_host:
398   <<: *host_fuzzer_test_template
399   variables:
400     BOT_NEEDS_TRIGGER_BY_NAME: 1
401     FUZZER_TEST_DIR: components/mdns/test_afl_fuzz_host
402
403 test_lwip_dns_fuzzer_on_host:
404   <<: *host_fuzzer_test_template
405   variables:
406     BOT_NEEDS_TRIGGER_BY_NAME: 1
407     FUZZER_TEST_DIR: components/lwip/test_afl_host
408     FUZZER_PARAMS: MODE=dns
409
410 test_lwip_dhcp_fuzzer_on_host:
411   <<: *host_fuzzer_test_template
412   variables:
413     BOT_NEEDS_TRIGGER_BY_NAME: 1
414     FUZZER_TEST_DIR: components/lwip/test_afl_host
415     FUZZER_PARAMS: MODE=dhcp_client
416
417 test_lwip_dhcps_fuzzer_on_host:
418   <<: *host_fuzzer_test_template
419   variables:
420     BOT_NEEDS_TRIGGER_BY_NAME: 1
421     FUZZER_TEST_DIR: components/lwip/test_afl_host
422     FUZZER_PARAMS: MODE=dhcp_server
423
424 test_spiffs_on_host:
425   <<: *host_test_template
426   script:
427     - cd components/spiffs/test_spiffs_host/
428     - make test
429
430 test_multi_heap_on_host:
431   <<: *host_test_template
432   script:
433     - cd components/heap/test_multi_heap_host
434     - ./test_all_configs.sh
435
436 test_confserver:
437   <<: *host_test_template
438   script:
439     - cd tools/kconfig_new/test
440     - ./test_confserver.py
441
442 test_build_system:
443   <<: *host_test_template
444   script:
445     - ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
446     - rm -rf test_build_system
447     - mkdir test_build_system
448     - cd test_build_system
449     - ${IDF_PATH}/tools/ci/test_build_system.sh
450
451 test_build_system_cmake:
452   <<: *host_test_template
453   script:
454     - ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
455     - rm -rf test_build_system
456     - mkdir test_build_system
457     - cd test_build_system
458     - ${IDF_PATH}/tools/ci/test_build_system_cmake.sh
459
460 test_idf_monitor:
461   <<: *host_test_template
462   artifacts:
463     when: on_failure
464     paths:
465       - tools/test_idf_monitor/outputs/*
466     expire_in: 1 week
467   script:
468     - cd ${IDF_PATH}/tools/test_idf_monitor
469     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh ./run_test_idf_monitor.py
470
471 test_idf_size:
472   <<: *host_test_template
473   artifacts:
474     when: on_failure
475     paths:
476       - tools/test_idf_size/output
477       - tools/test_idf_size/.coverage
478     expire_in: 1 week
479   script:
480     - cd ${IDF_PATH}/tools/test_idf_size
481     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh ./test.sh
482
483 test_esp_err_to_name_on_host:
484   <<: *host_test_template
485   artifacts:
486     when: on_failure
487     paths:
488       - components/esp32/esp_err_to_name.c
489     expire_in: 1 week
490   script:
491     - cd ${IDF_PATH}/tools/
492     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 2.7.15 ./gen_esp_err_to_name.py
493     - 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)
494     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.4.8 ./gen_esp_err_to_name.py
495     - git diff --exit-code -- ../components/esp32/esp_err_to_name.c || (echo 'Differences found between running under Python 2 and 3.'; exit 1)
496
497 test_espcoredump:
498   <<: *host_test_template
499   artifacts:
500     when: always
501     paths:
502       - components/espcoredump/test/.coverage
503       - components/espcoredump/test/output
504     expire_in: 1 week
505   script:
506     - cd components/espcoredump/test/
507     - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh ./test_espcoredump.sh
508
509 push_to_github:
510   stage: deploy
511   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
512   tags:
513     - deploy
514   only:
515     - master
516     - /^release\/v/
517     - /^v\d+\.\d+(\.\d+)?($|-)/
518   when: on_success
519   dependencies: []
520   before_script: *do_nothing_before
521   script:
522     - mkdir -p ~/.ssh
523     - chmod 700 ~/.ssh
524     - echo -n $GH_PUSH_KEY > ~/.ssh/id_rsa_base64
525     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
526     - chmod 600 ~/.ssh/id_rsa
527     - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
528     - git remote remove github &>/dev/null || true
529     - git remote add github git@github.com:espressif/esp-idf.git
530     - tools/ci/push_to_github.sh
531
532 deploy_docs:
533   stage: host_test
534   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
535   tags:
536     - deploy
537   only:
538    - master
539    - /^release\/v/
540    - /^v\d+\.\d+(\.\d+)?($|-)/
541    - triggers
542   dependencies:
543     - build_docs
544   before_script: *do_nothing_before
545   script:
546     - mkdir -p ~/.ssh
547     - chmod 700 ~/.ssh
548     - echo -n $DOCS_DEPLOY_KEY > ~/.ssh/id_rsa_base64
549     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
550     - chmod 600 ~/.ssh/id_rsa
551     - echo -e "Host $DOCS_SERVER\n\tStrictHostKeyChecking no\n\tUser $DOCS_SERVER_USER\n" >> ~/.ssh/config
552     - export GIT_VER=$(git describe --always)
553     - cd docs/en/_build/
554     - mv html $GIT_VER
555     - tar czvf $GIT_VER.tar.gz $GIT_VER
556     - scp $GIT_VER.tar.gz $DOCS_SERVER:$DOCS_PATH/en
557     - ssh $DOCS_SERVER -x "cd $DOCS_PATH/en && tar xzvf $GIT_VER.tar.gz && rm -f latest && ln -s $GIT_VER latest"
558     - cd ../../zh_CN/_build/
559     - mv html $GIT_VER
560     - tar czvf $GIT_VER.tar.gz $GIT_VER
561     - scp $GIT_VER.tar.gz $DOCS_SERVER:$DOCS_PATH/zh_CN
562     - ssh $DOCS_SERVER -x "cd $DOCS_PATH/zh_CN && tar xzvf $GIT_VER.tar.gz && rm -f latest && ln -s $GIT_VER latest"
563     # add link to preview doc
564     - echo "[document preview][en] $CI_DOCKER_REGISTRY/docs/esp-idf/en/${GIT_VER}/index.html"
565     - echo "[document preview][zh_CN] $CI_DOCKER_REGISTRY/docs/esp-idf/zh_CN/${GIT_VER}/index.html"
566
567 check_doc_links:
568   stage: host_test
569   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
570   tags:
571     - check_doc_links
572   only:
573     # can only be triggered
574     - triggers
575   artifacts:
576     paths:
577       - docs/_build/linkcheck
578     expire_in: 1 mos
579   script:
580     # must be triggered with CHECK_LINKS=Yes, otherwise exit without test
581     - test "$CHECK_LINKS" = "Yes" || exit 0
582     # can only run on master branch (otherwise the commit is not on Github yet)
583     - test "${CI_COMMIT_REF_NAME}" = "master" || exit 0
584     - cd docs
585     - make linkcheck
586
587 check_line_endings:
588   stage: check
589   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
590   tags:
591     - build
592   dependencies: []
593   before_script: *do_nothing_before_no_filter
594   script:
595     - tools/ci/check-line-endings.sh ${IDF_PATH}
596
597 check_commit_msg:
598   stage: check
599   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
600   tags:
601     - build
602   dependencies: []
603   before_script: *do_nothing_before_no_filter
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   stage: check
612   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
613   tags:
614     - build
615   dependencies: []
616   before_script: *do_nothing_before_no_filter
617   script:
618     - tools/ci/check-executable.sh
619
620 check_examples_cmake_make:
621   stage: check
622   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
623   tags:
624     - build
625   except:
626     - master
627     - /^release\/v/
628     - /^v\d+\.\d+(\.\d+)?($|-)/
629   dependencies: []
630   before_script: *do_nothing_before
631   script:
632     - tools/ci/check_examples_cmake_make.sh
633
634 check_submodule_sync:
635   stage: check
636   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
637   tags:
638     - build
639   dependencies: []
640   variables:
641     GIT_STRATEGY: clone
642   before_script: *do_nothing_before_no_filter
643   script:
644     # check if all submodules are correctly synced to public repostory
645     - git submodule update --init --recursive
646
647 assign_test:
648   tags:
649     - assign_test
650   image: $CI_DOCKER_REGISTRY/ubuntu-test-env$BOT_DOCKER_IMAGE_TAG
651   stage: assign_test
652   # gitlab ci do not support match job with RegEx or wildcard now in dependencies.
653   # we have a lot build example jobs. now we don't use dependencies, just download all artificats of build stage.
654   dependencies:
655     - build_ssc_00
656     - build_ssc_01
657     - build_ssc_02
658     - build_esp_idf_tests
659   variables:
660     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
661     EXAMPLE_CONFIG_OUTPUT_PATH: "$CI_PROJECT_DIR/examples/test_configs"
662   artifacts:
663     paths:
664       - components/idf_test/*/CIConfigs
665       - components/idf_test/*/TC.sqlite
666       - $EXAMPLE_CONFIG_OUTPUT_PATH
667     expire_in: 1 mos
668   before_script: *add_gitlab_key_before
669   script:
670     # assign example tests
671     - python $TEST_FW_PATH/CIAssignExampleTest.py $IDF_PATH/examples $IDF_PATH/.gitlab-ci.yml $EXAMPLE_CONFIG_OUTPUT_PATH
672     # assign unit test cases
673     - 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
674     # clone test script to assign tests
675     - git clone $TEST_SCRIPT_REPOSITORY
676     - cd auto_test_script
677     - python $CHECKOUT_REF_SCRIPT auto_test_script
678     # assgin integration test cases
679     - python CIAssignTestCases.py -t $IDF_PATH/components/idf_test/integration_test -c $IDF_PATH/.gitlab-ci.yml -b $IDF_PATH/SSC/ssc_bin
680
681 .example_test_template: &example_test_template
682   stage: integration_test
683   when: on_success
684   only:
685     - master
686     - /^release\/v/
687     - /^v\d+\.\d+(\.\d+)?($|-)/
688     - triggers
689     - schedules
690   dependencies:
691     - assign_test
692     - build_examples_make_00
693     - build_examples_make_01
694     - build_examples_make_02
695     - build_examples_make_03
696     - build_examples_make_04
697     - build_examples_make_05
698     - build_examples_make_06
699     - build_examples_make_07
700     - build_examples_cmake_00
701     - build_examples_cmake_01
702     - build_examples_cmake_02
703     - build_examples_cmake_03
704     - build_examples_cmake_04
705     - build_examples_cmake_05
706     - build_examples_cmake_06
707     - build_examples_cmake_07
708   artifacts:
709     when: always
710     paths:
711       - $LOG_PATH
712     expire_in: 1 mos
713   variables:
714     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
715     TEST_CASE_PATH: "$CI_PROJECT_DIR/examples"
716     CONFIG_FILE: "$CI_PROJECT_DIR/examples/test_configs/$CI_JOB_NAME.yml"
717     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
718     ENV_FILE: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/EnvConfig.yml"
719   script:
720     # first test if config file exists, if not exist, exit 0
721     - test -e $CONFIG_FILE || exit 0
722     # clone test env configs
723     - git clone $TEST_ENV_CONFIG_REPOSITORY
724     - cd ci-test-runner-configs
725     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
726     - cd $TEST_FW_PATH
727     # run test
728     - python Runner.py $TEST_CASE_PATH -c $CONFIG_FILE -e $ENV_FILE
729
730 .unit_test_template: &unit_test_template
731   <<: *example_test_template
732   stage: unit_test
733   dependencies:
734     - assign_test
735     - build_esp_idf_tests
736   variables:
737     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
738     TEST_CASE_PATH: "$CI_PROJECT_DIR/tools/unit-test-app"
739     CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/unit_test/CIConfigs/$CI_JOB_NAME.yml"
740     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
741     ENV_FILE: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/EnvConfig.yml"
742
743 .test_template: &test_template
744   stage: integration_test
745   when: on_success
746   only:
747     - master
748     - /^release\/v/
749     - /^v\d+\.\d+(\.\d+)?($|-)/
750     - triggers
751     - schedules
752   dependencies:
753     - assign_test
754     - build_ssc_00
755     - build_ssc_01
756     - build_ssc_02
757   artifacts:
758     when: always
759     paths:
760       - $LOG_PATH
761     expire_in: 1 mos
762   variables:
763     LOCAL_ENV_CONFIG_PATH: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/ESP32_IDF"
764     LOG_PATH: "$CI_PROJECT_DIR/$CI_COMMIT_SHA"
765     TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test/integration_test"
766     MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/components/idf_test/ModuleDefinition.yml"
767     CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/integration_test/CIConfigs/$CI_JOB_NAME.yml"
768   before_script: *add_gitlab_key_before
769   script:
770     # first test if config file exists, if not exist, exit 0
771     - test -e $CONFIG_FILE || exit 0
772     # clone local test env configs
773     - git clone $TEST_ENV_CONFIG_REPOSITORY
774     - cd ci-test-runner-configs
775     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
776     # clone test bench
777     - git clone $TEST_SCRIPT_REPOSITORY
778     - cd auto_test_script
779     - python $CHECKOUT_REF_SCRIPT auto_test_script
780     # run test
781     - 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
782
783 nvs_compatible_test:
784   <<: *test_template
785   artifacts:
786     when: always
787     paths:
788       - $LOG_PATH
789       - nvs_wifi.bin
790     expire_in: 1 mos
791   tags:
792     - ESP32_IDF
793     - NVS_Compatible
794   script:
795     # clone local test env configs
796     - git clone $TEST_ENV_CONFIG_REPOSITORY
797     - cd ci-test-runner-configs
798     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
799     # clone test bench
800     - git clone $TEST_SCRIPT_REPOSITORY
801     - cd auto_test_script
802     - git checkout ${CI_COMMIT_REF_NAME} || echo "Using default branch..."
803     # prepare nvs bins
804     - ./Tools/prepare_nvs_bin.sh
805     # run test
806     - 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
807
808 example_test_001_01:
809   <<: *example_test_template
810   tags:
811     - ESP32
812     - Example_WIFI
813
814 example_test_002_01:
815   <<: *example_test_template
816   image: $CI_DOCKER_REGISTRY/ubuntu-test-env$BOT_DOCKER_IMAGE_TAG
817   tags:
818     - ESP32
819     - Example_ShieldBox
820
821 example_test_003_01:
822   <<: *example_test_template
823   tags:
824     - ESP32
825     - Example_SDIO
826
827 example_test_004_01:
828   <<: *example_test_template
829   tags:
830     - ESP32
831     - Example_CAN
832
833 UT_001_01:
834   <<: *unit_test_template
835   tags:
836     - ESP32_IDF
837     - UT_T1_1
838
839 UT_001_02:
840   <<: *unit_test_template
841   tags:
842     - ESP32_IDF
843     - UT_T1_1
844
845 UT_001_03:
846   <<: *unit_test_template
847   tags:
848     - ESP32_IDF
849     - UT_T1_1
850
851 UT_001_04:
852   <<: *unit_test_template
853   tags:
854     - ESP32_IDF
855     - UT_T1_1
856
857 UT_001_05:
858   <<: *unit_test_template
859   tags:
860     - ESP32_IDF
861     - UT_T1_1
862
863 UT_001_06:
864   <<: *unit_test_template
865   tags:
866     - ESP32_IDF
867     - UT_T1_1
868
869 UT_001_07:
870   <<: *unit_test_template
871   tags:
872     - ESP32_IDF
873     - UT_T1_1
874
875 UT_001_08:
876   <<: *unit_test_template
877   tags:
878     - ESP32_IDF
879     - UT_T1_1
880
881 UT_001_09:
882   <<: *unit_test_template
883   tags:
884     - ESP32_IDF
885     - UT_T1_1
886
887 UT_001_10:
888   <<: *unit_test_template
889   tags:
890     - ESP32_IDF
891     - UT_T1_1
892
893 UT_001_11:
894   <<: *unit_test_template
895   tags:
896     - ESP32_IDF
897     - UT_T1_1
898
899 UT_001_12:
900   <<: *unit_test_template
901   tags:
902     - ESP32_IDF
903     - UT_T1_1
904
905 UT_001_13:
906   <<: *unit_test_template
907   tags:
908     - ESP32_IDF
909     - UT_T1_1
910
911 UT_001_14:
912   <<: *unit_test_template
913   tags:
914     - ESP32_IDF
915     - UT_T1_1
916
917 UT_001_15:
918   <<: *unit_test_template
919   tags:
920     - ESP32_IDF
921     - UT_T1_1
922
923 UT_001_16:
924   <<: *unit_test_template
925   tags:
926     - ESP32_IDF
927     - UT_T1_1
928
929 UT_001_17:
930   <<: *unit_test_template
931   tags:
932     - ESP32_IDF
933     - UT_T1_1
934
935 UT_001_18:
936   <<: *unit_test_template
937   tags:
938     - ESP32_IDF
939     - UT_T1_1
940
941 UT_001_19:
942   <<: *unit_test_template
943   tags:
944     - ESP32_IDF
945     - UT_T1_1
946
947 UT_001_20:
948   <<: *unit_test_template
949   tags:
950     - ESP32_IDF
951     - UT_T1_1
952
953 UT_001_21:
954   <<: *unit_test_template
955   tags:
956     - ESP32_IDF
957     - UT_T1_1
958
959 UT_001_22:
960   <<: *unit_test_template
961   tags:
962     - ESP32_IDF
963     - UT_T1_1
964
965 UT_001_23:
966   <<: *unit_test_template
967   tags:
968     - ESP32_IDF
969     - UT_T1_1
970
971 UT_001_24:
972   <<: *unit_test_template
973   tags:
974     - ESP32_IDF
975     - UT_T1_1
976
977 UT_001_25:
978   <<: *unit_test_template
979   tags:
980     - ESP32_IDF
981     - UT_T1_1
982
983 UT_001_26:
984   <<: *unit_test_template
985   tags:
986     - ESP32_IDF
987     - UT_T1_1
988
989 UT_001_27:
990   <<: *unit_test_template
991   tags:
992     - ESP32_IDF
993     - UT_T1_1
994
995 UT_001_28:
996   <<: *unit_test_template
997   tags:
998     - ESP32_IDF
999     - UT_T1_1
1000
1001 UT_001_29:
1002   <<: *unit_test_template
1003   tags:
1004     - ESP32_IDF
1005     - UT_T1_1
1006
1007 UT_001_30:
1008   <<: *unit_test_template
1009   tags:
1010     - ESP32_IDF
1011     - UT_T1_1
1012
1013 UT_001_31:
1014   <<: *unit_test_template
1015   tags:
1016     - ESP32_IDF
1017     - UT_T1_1
1018
1019 UT_001_32:
1020   <<: *unit_test_template
1021   tags:
1022     - ESP32_IDF
1023     - UT_T1_1
1024
1025 UT_001_33:
1026   <<: *unit_test_template
1027   tags:
1028     - ESP32_IDF
1029     - UT_T1_1
1030
1031 UT_001_34:
1032   <<: *unit_test_template
1033   tags:
1034     - ESP32_IDF
1035     - UT_T1_1
1036
1037 UT_001_35:
1038   <<: *unit_test_template
1039   tags:
1040     - ESP32_IDF
1041     - UT_T1_1
1042
1043 UT_001_36:
1044   <<: *unit_test_template
1045   tags:
1046     - ESP32_IDF
1047     - UT_T1_1
1048
1049 UT_002_01:
1050   <<: *unit_test_template
1051   tags:
1052     - ESP32_IDF
1053     - UT_T1_SDMODE
1054
1055 UT_002_02:
1056   <<: *unit_test_template
1057   tags:
1058     - ESP32_IDF
1059     - UT_T1_SDMODE
1060
1061 UT_002_03:
1062   <<: *unit_test_template
1063   tags:
1064     - ESP32_IDF
1065     - UT_T1_SDMODE
1066
1067 UT_003_01:
1068   <<: *unit_test_template
1069   tags:
1070     - ESP32_IDF
1071     - UT_T1_SPIMODE
1072
1073 UT_003_02:
1074   <<: *unit_test_template
1075   tags:
1076     - ESP32_IDF
1077     - UT_T1_SPIMODE
1078
1079 UT_003_03:
1080   <<: *unit_test_template
1081   tags:
1082     - ESP32_IDF
1083     - UT_T1_SPIMODE
1084
1085 UT_004_01:
1086   <<: *unit_test_template
1087   tags:
1088     - ESP32_IDF
1089     - UT_T1_1
1090     - psram
1091
1092 UT_004_02:
1093   <<: *unit_test_template
1094   tags:
1095     - ESP32_IDF
1096     - UT_T1_1
1097     - psram
1098
1099 UT_004_03:
1100   <<: *unit_test_template
1101   tags:
1102     - ESP32_IDF
1103     - UT_T1_1
1104     - psram
1105
1106 UT_004_04:
1107   <<: *unit_test_template
1108   tags:
1109     - ESP32_IDF
1110     - UT_T1_1
1111     - psram
1112
1113 UT_004_05:
1114   <<: *unit_test_template
1115   tags:
1116     - ESP32_IDF
1117     - UT_T1_1
1118     - psram
1119
1120 UT_004_06:
1121   <<: *unit_test_template
1122   tags:
1123     - ESP32_IDF
1124     - UT_T1_1
1125     - psram
1126
1127 UT_004_07:
1128   <<: *unit_test_template
1129   tags:
1130     - ESP32_IDF
1131     - UT_T1_1
1132     - psram
1133
1134 UT_004_08:
1135   <<: *unit_test_template
1136   tags:
1137     - ESP32_IDF
1138     - UT_T1_1
1139     - psram
1140
1141 UT_004_09:
1142   <<: *unit_test_template
1143   tags:
1144     - ESP32_IDF
1145     - UT_T1_1
1146     - psram
1147
1148 UT_004_10:
1149   <<: *unit_test_template
1150   tags:
1151     - ESP32_IDF
1152     - UT_T1_1
1153     - psram
1154
1155 UT_004_11:
1156   <<: *unit_test_template
1157   tags:
1158     - ESP32_IDF
1159     - UT_T1_1
1160     - psram
1161
1162 UT_005_01:
1163   <<: *unit_test_template
1164   tags:
1165     - ESP32_IDF
1166     - UT_T1_SDMODE
1167     - psram
1168
1169 UT_005_02:
1170   <<: *unit_test_template
1171   tags:
1172     - ESP32_IDF
1173     - UT_T1_SPIMODE
1174     - psram
1175
1176 UT_006_01:
1177   <<: *unit_test_template
1178   tags:
1179     - ESP32_IDF
1180     - UT_T1_GPIO
1181
1182 UT_006_02:
1183   <<: *unit_test_template
1184   tags:
1185     - ESP32_IDF
1186     - UT_T1_GPIO
1187
1188 UT_006_03:
1189   <<: *unit_test_template
1190   tags:
1191     - ESP32_IDF
1192     - UT_T1_GPIO
1193
1194 UT_006_04:
1195   <<: *unit_test_template
1196   tags:
1197     - ESP32_IDF
1198     - UT_T1_GPIO
1199     - psram
1200
1201 UT_007_01:
1202   <<: *unit_test_template
1203   tags:
1204     - ESP32_IDF
1205     - UT_T1_PCNT
1206
1207 UT_007_02:
1208   <<: *unit_test_template
1209   tags:
1210     - ESP32_IDF
1211     - UT_T1_PCNT
1212
1213 UT_007_03:
1214   <<: *unit_test_template
1215   tags:
1216     - ESP32_IDF
1217     - UT_T1_PCNT
1218
1219 UT_007_04:
1220   <<: *unit_test_template
1221   tags:
1222     - ESP32_IDF
1223     - UT_T1_PCNT
1224     - psram
1225
1226 UT_008_01:
1227   <<: *unit_test_template
1228   tags:
1229     - ESP32_IDF
1230     - UT_T1_LEDC
1231
1232 UT_008_02:
1233   <<: *unit_test_template
1234   tags:
1235     - ESP32_IDF
1236     - UT_T1_LEDC
1237
1238 UT_008_03:
1239   <<: *unit_test_template
1240   tags:
1241     - ESP32_IDF
1242     - UT_T1_LEDC
1243
1244 UT_008_04:
1245   <<: *unit_test_template
1246   tags:
1247     - ESP32_IDF
1248     - UT_T1_LEDC
1249     - psram
1250
1251 UT_010_01:
1252   <<: *unit_test_template
1253   tags:
1254     - ESP32_IDF
1255     - UT_T1_RMT
1256
1257 UT_010_02:
1258   <<: *unit_test_template
1259   tags:
1260     - ESP32_IDF
1261     - UT_T1_RMT
1262
1263 UT_010_03:
1264   <<: *unit_test_template
1265   tags:
1266     - ESP32_IDF
1267     - UT_T1_RMT
1268
1269 UT_010_04:
1270   <<: *unit_test_template
1271   tags:
1272     - ESP32_IDF
1273     - UT_T1_RMT
1274     - psram
1275
1276 UT_011_01:
1277   <<: *unit_test_template
1278   tags:
1279     - ESP32_IDF
1280     - EMMC
1281
1282 UT_011_02:
1283   <<: *unit_test_template
1284   tags:
1285     - ESP32_IDF
1286     - EMMC
1287
1288 UT_011_03:
1289   <<: *unit_test_template
1290   tags:
1291     - ESP32_IDF
1292     - EMMC
1293
1294 UT_601_01:
1295   <<: *unit_test_template
1296   tags:
1297     - ESP32_IDF
1298     - UT_T1_1
1299
1300 IT_001_01:
1301   <<: *test_template
1302   tags:
1303     - ESP32_IDF
1304     - SSC_T1_4
1305
1306 IT_001_02:
1307   <<: *test_template
1308   tags:
1309     - ESP32_IDF
1310     - SSC_T1_4
1311
1312 IT_001_03:
1313   <<: *test_template
1314   tags:
1315     - ESP32_IDF
1316     - SSC_T1_4
1317
1318 IT_002_01:
1319   <<: *test_template
1320   tags:
1321     - ESP32_IDF
1322     - SSC_T1_2
1323
1324 IT_003_01:
1325   <<: *test_template
1326   tags:
1327     - ESP32_IDF
1328     - SSC_T2_5
1329
1330 IT_003_02:
1331   <<: *test_template
1332   tags:
1333     - ESP32_IDF
1334     - SSC_T2_5
1335
1336 IT_003_03:
1337   <<: *test_template
1338   tags:
1339     - ESP32_IDF
1340     - SSC_T2_5
1341
1342 IT_003_04:
1343   <<: *test_template
1344   tags:
1345     - ESP32_IDF
1346     - SSC_T2_5
1347
1348 IT_003_05:
1349   <<: *test_template
1350   tags:
1351     - ESP32_IDF
1352     - SSC_T2_5
1353
1354 IT_003_06:
1355   <<: *test_template
1356   tags:
1357     - ESP32_IDF
1358     - SSC_T2_5
1359
1360 IT_003_07:
1361   <<: *test_template
1362   tags:
1363     - ESP32_IDF
1364     - SSC_T2_5
1365
1366 IT_003_08:
1367   <<: *test_template
1368   tags:
1369     - ESP32_IDF
1370     - SSC_T2_5
1371
1372 IT_003_09:
1373   <<: *test_template
1374   tags:
1375     - ESP32_IDF
1376     - SSC_T2_5
1377
1378 IT_003_10:
1379   <<: *test_template
1380   tags:
1381     - ESP32_IDF
1382     - SSC_T2_5
1383
1384 IT_003_11:
1385   <<: *test_template
1386   tags:
1387     - ESP32_IDF
1388     - SSC_T2_5
1389
1390 IT_003_12:
1391   <<: *test_template
1392   tags:
1393     - ESP32_IDF
1394     - SSC_T2_5
1395
1396 IT_003_13:
1397   <<: *test_template
1398   tags:
1399     - ESP32_IDF
1400     - SSC_T2_5
1401
1402 IT_004_01:
1403   <<: *test_template
1404   tags:
1405     - ESP32_IDF
1406     - SSC_T1_APC
1407
1408 IT_005_01:
1409   <<: *test_template
1410   tags:
1411     - ESP32_IDF
1412     - SSC_T1_5
1413
1414 IT_005_02:
1415   <<: *test_template
1416   tags:
1417     - ESP32_IDF
1418     - SSC_T1_5
1419
1420 IT_006_01:
1421   <<: *test_template
1422   tags:
1423     - ESP32_IDF
1424     - SSC_T1_6
1425
1426 IT_006_02:
1427   <<: *test_template
1428   tags:
1429     - ESP32_IDF
1430     - SSC_T1_6
1431
1432 IT_006_03:
1433   <<: *test_template
1434   tags:
1435     - ESP32_IDF
1436     - SSC_T1_6
1437
1438 IT_006_04:
1439   <<: *test_template
1440   tags:
1441     - ESP32_IDF
1442     - SSC_T1_6
1443
1444 IT_006_05:
1445   <<: *test_template
1446   tags:
1447     - ESP32_IDF
1448     - SSC_T1_6
1449
1450 IT_007_01:
1451   <<: *test_template
1452   tags:
1453     - ESP32_IDF
1454     - SSC_T1_7
1455
1456 IT_007_02:
1457   <<: *test_template
1458   tags:
1459     - ESP32_IDF
1460     - SSC_T1_7
1461
1462 IT_008_01:
1463   <<: *test_template
1464   tags:
1465     - ESP32_IDF
1466     - SSC_T1_8
1467
1468 IT_009_01:
1469   <<: *test_template
1470   tags:
1471     - ESP32_IDF
1472     - SSC_T1_3
1473
1474 IT_010_01:
1475   <<: *test_template
1476   tags:
1477     - ESP32_IDF
1478     - SSC_T5_1
1479
1480 IT_011_01:
1481   <<: *test_template
1482   tags:
1483     - ESP32_IDF
1484     - SSC_T50_1
1485
1486 IT_012_01:
1487   <<: *test_template
1488   tags:
1489     - ESP32_IDF
1490     - SSC_T1_9
1491
1492 IT_013_01:
1493   <<: *test_template
1494   tags:
1495     - ESP32_IDF
1496     - SSC_T2_2
1497
1498 IT_013_02:
1499   <<: *test_template
1500   tags:
1501     - ESP32_IDF
1502     - SSC_T2_2
1503
1504 IT_014_01:
1505   <<: *test_template
1506   tags:
1507     - ESP32_IDF
1508     - SSC_T2_3
1509
1510 IT_015_01:
1511   <<: *test_template
1512   tags:
1513     - ESP32_IDF
1514     - SSC_T2_4