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