]> granicus.if.org Git - esp-idf/blob - .gitlab-ci.yml
Merge branch 'feature/nvs_part_gen_improvements' into 'master'
[esp-idf] / .gitlab-ci.yml
1 stages:
2   - build
3   - assign_test
4   - host_test
5   - unit_test
6   - integration_test
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   BATCH_BUILD: "1"
30   V: "0"
31   APPLY_BOT_FILTER_SCRIPT: "$CI_PROJECT_DIR/tools/ci/apply_bot_filter.py"
32   CHECKOUT_REF_SCRIPT: "$CI_PROJECT_DIR/tools/ci/checkout_project_ref.py"
33
34 # When 'fetch' strategy is used, Gitlab removes untracked files before checking out
35 # new revision. However if the new revision doesn't include some of the submodules
36 # which were present in the old revision, such submodule directories would not be
37 # removed by the checkout. This extra step ensures that these stale submodules
38 # are removed.
39 .git_clean_stale_submodules:  &git_clean_stale_submodules >
40   find . -name '.git' -not -path './.git' -printf '%P\n'
41   | sed 's|/.git||' 
42   | xargs -I {} sh -c '
43   grep -q {} .gitmodules 
44   ||  (echo "Removing {}, has .git directory but not in .gitmodules file" 
45   && rm -rf {});'
46
47 # before each job, we need to check if this job is filtered by bot stage/job filter
48 .apply_bot_filter: &apply_bot_filter
49   python $APPLY_BOT_FILTER_SCRIPT || exit 0
50
51 before_script:
52   - *git_clean_stale_submodules
53   # apply bot filter in before script
54   - *apply_bot_filter
55   # add gitlab ssh key
56   - mkdir -p ~/.ssh
57   - chmod 700 ~/.ssh
58   - echo -n $GITLAB_KEY > ~/.ssh/id_rsa_base64
59   - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
60   - chmod 600 ~/.ssh/id_rsa
61   - echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
62
63   # Set IS_PRIVATE or IS_PUBLIC depending on if our branch is public or not
64   #
65   # (the same regular expressions are used to set these are used in 'only:' sections below
66   - source tools/ci/configure_ci_environment.sh
67
68   # fetch the submodules (& if necessary re-fetch repo) from gitlab
69   - time ./tools/ci/get-full-sources.sh
70
71 .do_nothing_before:
72   before_script: &do_nothing_before
73     - *git_clean_stale_submodules
74     # apply bot filter in before script
75     - *apply_bot_filter
76     - echo "Not setting up GitLab key, not fetching submodules"
77     - source tools/ci/configure_ci_environment.sh
78
79 .add_gitlab_key_before:
80   before_script: &add_gitlab_key_before
81     - *git_clean_stale_submodules
82     # apply bot filter in before script
83     - *apply_bot_filter
84     - echo "Not fetching submodules"
85     - source tools/ci/configure_ci_environment.sh
86     # add gitlab ssh key
87     - mkdir -p ~/.ssh
88     - chmod 700 ~/.ssh
89     - echo -n $GITLAB_KEY > ~/.ssh/id_rsa_base64
90     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
91     - chmod 600 ~/.ssh/id_rsa
92     - echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
93
94 build_template_app:
95   stage: build
96   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
97   tags:
98     - build
99   variables:
100     BATCH_BUILD: "1"
101     IDF_CI_BUILD: "1"
102   script:
103     - git clone https://github.com/espressif/esp-idf-template.git
104     - cd esp-idf-template
105     # Try to use the same branch name for esp-idf-template that we're
106     # using on esp-idf. If it doesn't exist then just stick to the default
107     # branch
108     - python $CHECKOUT_REF_SCRIPT esp-idf-template
109     # Test debug build (default)
110     - make all V=1
111     # Now test release build
112     - make clean
113     - sed -i.bak -e's/CONFIG_OPTIMIZATION_LEVEL_DEBUG\=y/CONFIG_OPTIMIZATION_LEVEL_RELEASE=y/' sdkconfig
114     - make all V=1
115     # Check if there are any stray printf/ets_printf references in WiFi libs
116     - cd ../components/esp32/lib
117     - test $(xtensa-esp32-elf-nm *.a | grep -w printf | wc -l) -eq 0
118     - test $(xtensa-esp32-elf-nm *.a | grep -w ets_printf | wc -l) -eq 0
119
120
121 .build_template: &build_template
122   stage: build
123   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
124   tags:
125     - build
126   variables:
127     BATCH_BUILD: "1"
128     V: "0"
129
130 .build_ssc_template: &build_ssc_template
131   <<: *build_template
132   artifacts:
133     paths:
134       - SSC/ssc_bin
135     expire_in: 1 mos
136   variables:
137     SSC_CONFIG_FOLDER: "$CI_PROJECT_DIR/SSC/configs/ESP32_IDF"
138   script:
139     - git clone $SSC_REPOSITORY
140     - cd SSC
141     - python $CHECKOUT_REF_SCRIPT SSC
142     - MAKEFLAGS= ./ci_build_ssc.sh "${CI_JOB_NAME}" "${IDF_PATH}/.gitlab-ci.yml"
143
144 # don't forget to add to dependency to test_template when adding new build_ssc jobs
145 build_ssc_00:
146   <<: *build_ssc_template
147
148 build_ssc_01:
149   <<: *build_ssc_template
150
151 build_ssc_02:
152   <<: *build_ssc_template
153
154 # If you want to add new build ssc jobs, please add it into dependencies of `assign_test` and `.test_template`
155
156 build_esp_idf_tests:
157   <<: *build_template
158   artifacts:
159     paths:
160       - tools/unit-test-app/output
161       - components/idf_test/unit_test/TestCaseAll.yml
162       - components/idf_test/unit_test/CIConfigs/*.yml
163     expire_in: 1 mos
164   script:
165     - cd tools/unit-test-app
166     - MAKEFLAGS= make help # make sure kconfig tools are built in single process
167     - make ut-clean-all-configs
168     - export EXTRA_CFLAGS="-Werror -Werror=deprecated-declarations"
169     - export EXTRA_CXXFLAGS=${EXTRA_CFLAGS}
170     - make ut-build-all-configs
171     - python tools/UnitTestParser.py
172
173 .build_examples_template: &build_examples_template
174   <<: *build_template
175   retry: 1
176   artifacts:
177     when: always
178     paths:
179       - build_examples/*/*/*/build/*.bin
180       - build_examples/*/*/*/build/*.elf
181       - build_examples/*/*/*/build/*.map
182       - build_examples/*/*/*/build/download.config
183       - build_examples/*/*/*/build/bootloader/*.bin
184       - $LOG_PATH
185     expire_in: 1 week
186   variables:
187     IDF_CI_BUILD: "1"
188     LOG_PATH: "$CI_PROJECT_DIR/log_examples"
189   script:
190     # it's not possible to build 100% out-of-tree and have the "artifacts"
191     # mechanism work, but this is the next best thing
192     - rm -rf build_examples
193     - mkdir build_examples
194     - cd build_examples
195     # build some of examples
196     - mkdir -p ${LOG_PATH}
197     - ${IDF_PATH}/tools/ci/build_examples.sh "${CI_JOB_NAME}"
198
199 build_examples_00:
200   <<: *build_examples_template
201
202 build_examples_01:
203   <<: *build_examples_template
204
205 build_examples_02:
206   <<: *build_examples_template
207
208 build_examples_03:
209   <<: *build_examples_template
210
211 build_examples_04:
212   <<: *build_examples_template
213
214 build_examples_05:
215   <<: *build_examples_template
216
217 build_examples_06:
218   <<: *build_examples_template
219
220 build_examples_07:
221   <<: *build_examples_template
222
223 # If you want to add new build example jobs, please add it into dependencies of `.example_test_template`
224
225 build_docs:
226   stage: build
227   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
228   tags:
229     - build_docs
230   artifacts:
231     when: always
232     paths:
233       # English version of documentation
234       - docs/en/doxygen-warning-log.txt
235       - docs/en/sphinx-warning-log.txt
236       - docs/en/sphinx-warning-log-sanitized.txt
237       - docs/en/_build/html
238       # Chinese version of documentation
239       - docs/zh_CN/doxygen-warning-log.txt
240       - docs/zh_CN/sphinx-warning-log.txt
241       - docs/zh_CN/sphinx-warning-log-sanitized.txt
242       - docs/zh_CN/_build/html
243     expire_in: 1 mos
244   script:
245     - cd docs
246     - ./check_lang_folder_sync.sh
247     - cd en
248     - make gh-linkcheck
249     - make html
250     - ../check_doc_warnings.sh
251     - cd ../zh_CN
252     - make gh-linkcheck
253     - make html
254     - ../check_doc_warnings.sh
255
256 .host_test_template: &host_test_template
257   stage: host_test
258   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
259   tags:
260     - host_test
261   dependencies: []
262     
263 test_nvs_on_host:
264   <<: *host_test_template
265   script:
266     - cd components/nvs_flash/test_nvs_host
267     - make test
268
269 test_nvs_coverage:
270   <<: *host_test_template
271   artifacts:
272     paths:
273       - components/nvs_flash/test_nvs_host/coverage_report
274   only:
275     - triggers
276   # This job takes a few hours to finish, so only run it on demand
277   variables:
278     BOT_NEEDS_TRIGGER_BY_NAME: 1
279   script:
280     - cd components/nvs_flash/test_nvs_host
281     - make coverage_report
282
283 test_partition_table_on_host:
284   <<: *host_test_template
285   tags:
286     - build
287   script:
288     - cd components/partition_table/test_gen_esp32part_host
289     - ./gen_esp32part_tests.py
290
291 test_wl_on_host:
292   <<: *host_test_template
293   artifacts:
294     paths:
295       - components/wear_levelling/test_wl_host/coverage_report.zip
296   script:
297     - cd components/wear_levelling/test_wl_host
298     - make test
299
300 test_fatfs_on_host:
301   <<: *host_test_template
302   tags:
303     - wl_host_test
304   script:
305     - cd components/fatfs/test_fatfs_host/
306     - make test
307
308 test_spiffs_on_host:
309   <<: *host_test_template
310   tags:
311     - wl_host_test
312   script:
313     - cd components/spiffs/test_spiffs_host/
314     - make test
315
316 test_multi_heap_on_host:
317   <<: *host_test_template
318   script:
319     - cd components/heap/test_multi_heap_host
320     - ./test_all_configs.sh
321
322 test_build_system:
323   <<: *host_test_template
324   script:
325     - ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
326     - rm -rf test_build_system
327     - mkdir test_build_system
328     - cd test_build_system
329     - ${IDF_PATH}/tools/ci/test_build_system.sh
330
331 test_esp_err_to_name_on_host:
332   <<: *host_test_template
333   script:
334     - cd tools/
335     - ./gen_esp_err_to_name.py
336     - 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)
337
338 push_master_to_github:
339   stage: deploy
340   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
341   tags:
342     - deploy
343   only:
344     - master
345     - /^release\/v/
346     - /^v\d+\.\d+(\.\d+)?($|-)/
347   when: on_success
348   dependencies: []
349   variables:
350     GITHUB_PUSH_REFS: refs/remotes/origin/release refs/remotes/origin/master
351   before_script: *do_nothing_before
352   script:
353     - mkdir -p ~/.ssh
354     - chmod 700 ~/.ssh
355     - echo -n $GH_PUSH_KEY > ~/.ssh/id_rsa_base64
356     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
357     - chmod 600 ~/.ssh/id_rsa
358     - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
359     - git remote remove github &>/dev/null || true
360     - git remote add github git@github.com:espressif/esp-idf.git
361     # What the next line of script does: goes through the list of refs for all branches we push to github,
362     # generates a snippet of shell which is evaluated. The snippet checks CI_COMMIT_SHA against the SHA
363     # (aka objectname) at tip of each branch, and if any SHAs match then it checks out the local branch
364     # and then pushes that ref to a corresponding github branch
365     - 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)
366
367
368 deploy_docs:
369   stage: host_test
370   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
371   tags:
372     - deploy
373   only:
374    - master
375    - /^release\/v/
376    - /^v\d+\.\d+(\.\d+)?($|-)/
377    - triggers
378   dependencies:
379     - build_docs
380   before_script: *do_nothing_before
381   script:
382     - mkdir -p ~/.ssh
383     - chmod 700 ~/.ssh
384     - echo -n $DOCS_DEPLOY_KEY > ~/.ssh/id_rsa_base64
385     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
386     - chmod 600 ~/.ssh/id_rsa
387     - echo -e "Host $DOCS_SERVER\n\tStrictHostKeyChecking no\n\tUser $DOCS_SERVER_USER\n" >> ~/.ssh/config
388     - export GIT_VER=$(git describe --always)
389     - cd docs/en/_build/
390     - mv html $GIT_VER
391     - tar czvf $GIT_VER.tar.gz $GIT_VER
392     - scp $GIT_VER.tar.gz $DOCS_SERVER:$DOCS_PATH/en
393     - ssh $DOCS_SERVER -x "cd $DOCS_PATH/en && tar xzvf $GIT_VER.tar.gz && rm -f latest && ln -s $GIT_VER latest"
394     - cd ../../zh_CN/_build/
395     - mv html $GIT_VER
396     - tar czvf $GIT_VER.tar.gz $GIT_VER
397     - scp $GIT_VER.tar.gz $DOCS_SERVER:$DOCS_PATH/zh_CN
398     - ssh $DOCS_SERVER -x "cd $DOCS_PATH/zh_CN && tar xzvf $GIT_VER.tar.gz && rm -f latest && ln -s $GIT_VER latest"
399     # add link to preview doc
400     - echo "[document preview][en] $CI_DOCKER_REGISTRY/docs/esp-idf/en/${GIT_VER}/index.html"
401     - echo "[document preview][zh_CN] $CI_DOCKER_REGISTRY/docs/esp-idf/zh_CN/${GIT_VER}/index.html"
402
403 check_doc_links:
404   stage: host_test
405   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
406   tags:
407     - check_doc_links
408   only:
409     # can only be triggered
410     - triggers
411   artifacts:
412     paths:
413       - docs/_build/linkcheck
414     expire_in: 1 mos
415   script:
416     # must be triggered with CHECK_LINKS=Yes, otherwise exit without test
417     - test "$CHECK_LINKS" = "Yes" || exit 0
418     # can only run on master branch (otherwise the commit is not on Github yet)
419     - test "${CI_COMMIT_REF_NAME}" = "master" || exit 0
420     - cd docs
421     - make linkcheck
422
423 check_commit_msg:
424   stage: deploy
425   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
426   tags:
427     - build
428   except:
429     - master
430     - /^release\/v/
431     - /^v\d+\.\d+(\.\d+)?($|-)/
432   dependencies: []
433   before_script: *do_nothing_before
434   script:
435     - git status
436     - git log -n10 --oneline
437     # commit start with "WIP: " need to be squashed before merge
438     - 'git log --pretty=%s master.. -- | grep "^WIP: " && exit 1 || exit 0'
439
440 check_permissions:
441   stage: deploy
442   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
443   tags:
444     - build
445   except:
446     - master
447     - /^release\/v/
448     - /^v\d+\.\d+(\.\d+)?($|-)/
449   dependencies: []
450   before_script: *do_nothing_before
451   script:
452     - tools/ci/check-executable.sh
453
454 check_submodule_sync:
455   stage: deploy
456   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
457   tags:
458     - build
459   except:
460     - master
461     - /^release\/v/
462     - /^v\d+\.\d+(\.\d+)?($|-)/
463   dependencies: []
464   variables:
465     GIT_STRATEGY: clone
466   before_script: *do_nothing_before
467   script:
468     # check if all submodules are correctly synced to public repostory
469     - git submodule update --init --recursive
470
471 assign_test:
472   tags:
473     - assign_test
474   image: $CI_DOCKER_REGISTRY/ubuntu-test-env$BOT_DOCKER_IMAGE_TAG
475   stage: assign_test
476   # gitlab ci do not support match job with RegEx or wildcard now in dependencies.
477   # we have a lot build example jobs. now we don't use dependencies, just download all artificats of build stage.
478   dependencies:
479     - build_ssc_00
480     - build_ssc_01
481     - build_ssc_02
482     - build_esp_idf_tests
483   variables:
484     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
485     EXAMPLE_CONFIG_OUTPUT_PATH: "$CI_PROJECT_DIR/examples/test_configs"
486   artifacts:
487     paths:
488       - components/idf_test/*/CIConfigs
489       - components/idf_test/*/TC.sqlite
490       - $EXAMPLE_CONFIG_OUTPUT_PATH
491     expire_in: 1 mos
492   before_script: *add_gitlab_key_before
493   script:
494     # assign example tests
495     - python $TEST_FW_PATH/CIAssignExampleTest.py $IDF_PATH/examples $IDF_PATH/.gitlab-ci.yml $EXAMPLE_CONFIG_OUTPUT_PATH
496     # assign unit test cases
497     - 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
498     # clone test script to assign tests
499     - git clone $TEST_SCRIPT_REPOSITORY
500     - cd auto_test_script
501     - python $CHECKOUT_REF_SCRIPT auto_test_script
502     # assgin integration test cases
503     - python CIAssignTestCases.py -t $IDF_PATH/components/idf_test/integration_test -c $IDF_PATH/.gitlab-ci.yml -b $IDF_PATH/SSC/ssc_bin
504
505 .example_test_template: &example_test_template
506   stage: integration_test
507   when: on_success
508   only:
509     - master
510     - /^release\/v/
511     - /^v\d+\.\d+(\.\d+)?($|-)/
512     - triggers
513     - schedules
514   dependencies:
515     - assign_test
516     - build_examples_00
517     - build_examples_01
518     - build_examples_02
519     - build_examples_03
520     - build_examples_04
521     - build_examples_05
522     - build_examples_06
523     - build_examples_07
524   artifacts:
525     when: always
526     paths:
527       - $LOG_PATH
528     expire_in: 1 mos
529   variables:
530     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
531     TEST_CASE_PATH: "$CI_PROJECT_DIR/examples"
532     CONFIG_FILE: "$CI_PROJECT_DIR/examples/test_configs/$CI_JOB_NAME.yml"
533     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
534     ENV_FILE: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/EnvConfig.yml"
535   script:
536     # first test if config file exists, if not exist, exit 0
537     - test -e $CONFIG_FILE || exit 0
538     # clone test env configs
539     - git clone $TEST_ENV_CONFIG_REPOSITORY
540     - cd ci-test-runner-configs
541     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
542     - cd $TEST_FW_PATH
543     # run test
544     - python Runner.py $TEST_CASE_PATH -c $CONFIG_FILE -e $ENV_FILE
545
546 .unit_test_template: &unit_test_template
547   <<: *example_test_template
548   stage: unit_test
549   dependencies:
550     - assign_test
551     - build_esp_idf_tests
552   variables:
553     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
554     TEST_CASE_PATH: "$CI_PROJECT_DIR/tools/unit-test-app"
555     CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/unit_test/CIConfigs/$CI_JOB_NAME.yml"
556     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
557     ENV_FILE: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/EnvConfig.yml"
558
559 .test_template: &test_template
560   stage: integration_test
561   when: on_success
562   only:
563     - master
564     - /^release\/v/
565     - /^v\d+\.\d+(\.\d+)?($|-)/
566     - triggers
567     - schedules
568   dependencies:
569     - assign_test
570     - build_ssc_00
571     - build_ssc_01
572     - build_ssc_02
573   artifacts:
574     when: always
575     paths:
576       - $LOG_PATH
577     expire_in: 1 mos
578   variables:
579     LOCAL_ENV_CONFIG_PATH: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/ESP32_IDF"
580     LOG_PATH: "$CI_PROJECT_DIR/$CI_COMMIT_SHA"
581     TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test/integration_test"
582     MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/components/idf_test/ModuleDefinition.yml"
583     CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/integration_test/CIConfigs/$CI_JOB_NAME.yml"
584   before_script: *add_gitlab_key_before
585   script:
586     # first test if config file exists, if not exist, exit 0
587     - test -e $CONFIG_FILE || exit 0
588     # clone local test env configs
589     - git clone $TEST_ENV_CONFIG_REPOSITORY
590     - cd ci-test-runner-configs
591     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
592     # clone test bench
593     - git clone $TEST_SCRIPT_REPOSITORY
594     - cd auto_test_script
595     - python $CHECKOUT_REF_SCRIPT auto_test_script
596     # run test
597     - 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
598
599 nvs_compatible_test:
600   <<: *test_template
601   artifacts:
602     when: always
603     paths:
604       - $LOG_PATH
605       - nvs_wifi.bin
606     expire_in: 1 mos
607   tags:
608     - ESP32_IDF
609     - NVS_Compatible
610   script:
611     # clone local test env configs
612     - git clone $TEST_ENV_CONFIG_REPOSITORY
613     - cd ci-test-runner-configs
614     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
615     # clone test bench
616     - git clone $TEST_SCRIPT_REPOSITORY
617     - cd auto_test_script
618     - git checkout ${CI_COMMIT_REF_NAME} || echo "Using default branch..."
619     # prepare nvs bins
620     - ./Tools/prepare_nvs_bin.sh
621     # run test
622     - 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
623
624 example_test_001_01:
625   <<: *example_test_template
626   tags:
627     - ESP32
628     - Example_WIFI
629
630 example_test_002_01:
631   <<: *example_test_template
632   tags:
633     - ESP32
634     - Example_ShieldBox
635
636 example_test_003_01:
637   <<: *example_test_template
638   tags:
639     - ESP32
640     - Example_SDIO
641
642 UT_001_01:
643   <<: *unit_test_template
644   tags:
645     - ESP32_IDF
646     - UT_T1_1
647
648 UT_001_02:
649   <<: *unit_test_template
650   tags:
651     - ESP32_IDF
652     - UT_T1_1
653
654 UT_001_03:
655   <<: *unit_test_template
656   tags:
657     - ESP32_IDF
658     - UT_T1_1
659
660 UT_001_04:
661   <<: *unit_test_template
662   tags:
663     - ESP32_IDF
664     - UT_T1_1
665
666 UT_001_05:
667   <<: *unit_test_template
668   tags:
669     - ESP32_IDF
670     - UT_T1_1
671
672 UT_001_06:
673   <<: *unit_test_template
674   tags:
675     - ESP32_IDF
676     - UT_T1_1
677
678 UT_001_07:
679   <<: *unit_test_template
680   tags:
681     - ESP32_IDF
682     - UT_T1_1
683
684 UT_001_08:
685   <<: *unit_test_template
686   tags:
687     - ESP32_IDF
688     - UT_T1_1
689
690 UT_001_09:
691   <<: *unit_test_template
692   tags:
693     - ESP32_IDF
694     - UT_T1_1
695
696 UT_001_10:
697   <<: *unit_test_template
698   tags:
699     - ESP32_IDF
700     - UT_T1_1
701
702 UT_001_11:
703   <<: *unit_test_template
704   tags:
705     - ESP32_IDF
706     - UT_T1_1
707
708 UT_001_12:
709   <<: *unit_test_template
710   tags:
711     - ESP32_IDF
712     - UT_T1_1
713
714 UT_001_13:
715   <<: *unit_test_template
716   tags:
717     - ESP32_IDF
718     - UT_T1_1
719
720 UT_001_14:
721   <<: *unit_test_template
722   tags:
723     - ESP32_IDF
724     - UT_T1_1
725
726 UT_001_15:
727   <<: *unit_test_template
728   tags:
729     - ESP32_IDF
730     - UT_T1_1
731
732 UT_001_16:
733   <<: *unit_test_template
734   tags:
735     - ESP32_IDF
736     - UT_T1_1
737
738 UT_001_17:
739   <<: *unit_test_template
740   tags:
741     - ESP32_IDF
742     - UT_T1_1
743
744 UT_001_18:
745   <<: *unit_test_template
746   tags:
747     - ESP32_IDF
748     - UT_T1_1
749
750 UT_001_19:
751   <<: *unit_test_template
752   tags:
753     - ESP32_IDF
754     - UT_T1_1
755
756 UT_001_20:
757   <<: *unit_test_template
758   tags:
759     - ESP32_IDF
760     - UT_T1_1
761
762 UT_001_21:
763   <<: *unit_test_template
764   tags:
765     - ESP32_IDF
766     - UT_T1_1
767
768 UT_001_22:
769   <<: *unit_test_template
770   tags:
771     - ESP32_IDF
772     - UT_T1_1
773
774 UT_001_23:
775   <<: *unit_test_template
776   tags:
777     - ESP32_IDF
778     - UT_T1_1
779
780 UT_001_24:
781   <<: *unit_test_template
782   tags:
783     - ESP32_IDF
784     - UT_T1_1
785
786 UT_001_25:
787   <<: *unit_test_template
788   tags:
789     - ESP32_IDF
790     - UT_T1_1
791     
792 UT_001_26:
793   <<: *unit_test_template
794   tags:
795     - ESP32_IDF
796     - UT_T1_1
797
798 UT_001_27:
799   <<: *unit_test_template
800   tags:
801     - ESP32_IDF
802     - UT_T1_1
803
804 UT_001_28:
805   <<: *unit_test_template
806   tags:
807     - ESP32_IDF
808     - UT_T1_1
809
810 UT_001_29:
811   <<: *unit_test_template
812   tags:
813     - ESP32_IDF
814     - UT_T1_1
815
816 UT_001_30:
817   <<: *unit_test_template
818   tags:
819     - ESP32_IDF
820     - UT_T1_1
821
822 UT_001_31:
823   <<: *unit_test_template
824   tags:
825     - ESP32_IDF
826     - UT_T1_1
827     
828 UT_001_32:
829   <<: *unit_test_template
830   tags:
831     - ESP32_IDF
832     - UT_T1_1
833
834 UT_001_33:
835   <<: *unit_test_template
836   tags:
837     - ESP32_IDF
838     - UT_T1_1
839     
840 UT_001_34:
841   <<: *unit_test_template
842   tags:
843     - ESP32_IDF
844     - UT_T1_1
845
846 UT_002_01:
847   <<: *unit_test_template
848   tags:
849     - ESP32_IDF
850     - UT_T1_SDMODE
851
852 UT_002_02:
853   <<: *unit_test_template
854   tags:
855     - ESP32_IDF
856     - UT_T1_SDMODE
857
858 UT_002_03:
859   <<: *unit_test_template
860   tags:
861     - ESP32_IDF
862     - UT_T1_SDMODE
863
864 UT_003_01:
865   <<: *unit_test_template
866   tags:
867     - ESP32_IDF
868     - UT_T1_SPIMODE
869
870 UT_003_02:
871   <<: *unit_test_template
872   tags:
873     - ESP32_IDF
874     - UT_T1_SPIMODE
875
876 UT_003_03:
877   <<: *unit_test_template
878   tags:
879     - ESP32_IDF
880     - UT_T1_SPIMODE
881
882 UT_004_01:
883   <<: *unit_test_template
884   tags:
885     - ESP32_IDF
886     - UT_T1_1
887     - psram
888
889 UT_004_02:
890   <<: *unit_test_template
891   tags:
892     - ESP32_IDF
893     - UT_T1_1
894     - psram
895
896 UT_004_03:
897   <<: *unit_test_template
898   tags:
899     - ESP32_IDF
900     - UT_T1_1
901     - psram
902
903 UT_004_04:
904   <<: *unit_test_template
905   tags:
906     - ESP32_IDF
907     - UT_T1_1
908     - psram
909
910 UT_004_05:
911   <<: *unit_test_template
912   tags:
913     - ESP32_IDF
914     - UT_T1_1
915     - psram
916
917 UT_004_06:
918   <<: *unit_test_template
919   tags:
920     - ESP32_IDF
921     - UT_T1_1
922     - psram
923
924 UT_004_07:
925   <<: *unit_test_template
926   tags:
927     - ESP32_IDF
928     - UT_T1_1
929     - psram
930
931 UT_004_08:
932   <<: *unit_test_template
933   tags:
934     - ESP32_IDF
935     - UT_T1_1
936     - psram
937
938 UT_004_09:
939   <<: *unit_test_template
940   tags:
941     - ESP32_IDF
942     - UT_T1_1
943     - psram
944
945 UT_004_10:
946   <<: *unit_test_template
947   tags:
948     - ESP32_IDF
949     - UT_T1_1
950     - psram
951     
952 UT_004_11:
953   <<: *unit_test_template
954   tags:
955     - ESP32_IDF
956     - UT_T1_1
957     - psram
958     
959 UT_005_01:
960   <<: *unit_test_template
961   tags:
962     - ESP32_IDF
963     - UT_T1_SDMODE
964     - psram
965
966 UT_005_02:
967   <<: *unit_test_template
968   tags:
969     - ESP32_IDF
970     - UT_T1_SPIMODE
971     - psram
972
973 UT_006_01:
974   <<: *unit_test_template
975   tags:
976     - ESP32_IDF
977     - UT_T1_GPIO
978
979 UT_006_02:
980   <<: *unit_test_template
981   tags:
982     - ESP32_IDF
983     - UT_T1_GPIO
984
985 UT_006_03:
986   <<: *unit_test_template
987   tags:
988     - ESP32_IDF
989     - UT_T1_GPIO
990
991 UT_006_04:
992   <<: *unit_test_template
993   tags:
994     - ESP32_IDF
995     - UT_T1_GPIO
996     - psram
997
998 UT_007_01:
999   <<: *unit_test_template
1000   tags:
1001     - ESP32_IDF
1002     - UT_T1_PCNT
1003
1004 UT_007_02:
1005   <<: *unit_test_template
1006   tags:
1007     - ESP32_IDF
1008     - UT_T1_PCNT
1009
1010 UT_007_03:
1011   <<: *unit_test_template
1012   tags:
1013     - ESP32_IDF
1014     - UT_T1_PCNT
1015
1016 UT_007_04:
1017   <<: *unit_test_template
1018   tags:
1019     - ESP32_IDF
1020     - UT_T1_PCNT
1021     - psram
1022
1023 UT_008_01:
1024   <<: *unit_test_template
1025   tags:
1026     - ESP32_IDF
1027     - UT_T1_LEDC
1028
1029 UT_008_02:
1030   <<: *unit_test_template
1031   tags:
1032     - ESP32_IDF
1033     - UT_T1_LEDC
1034
1035 UT_008_03:
1036   <<: *unit_test_template
1037   tags:
1038     - ESP32_IDF
1039     - UT_T1_LEDC
1040
1041 UT_008_04:
1042   <<: *unit_test_template
1043   tags:
1044     - ESP32_IDF
1045     - UT_T1_LEDC
1046     - psram
1047
1048 UT_010_01:
1049   <<: *unit_test_template
1050   tags:
1051     - ESP32_IDF
1052     - UT_T1_RMT
1053
1054 UT_010_02:
1055   <<: *unit_test_template
1056   tags:
1057     - ESP32_IDF
1058     - UT_T1_RMT
1059
1060 UT_010_03:
1061   <<: *unit_test_template
1062   tags:
1063     - ESP32_IDF
1064     - UT_T1_RMT
1065
1066 UT_010_04:
1067   <<: *unit_test_template
1068   tags:
1069     - ESP32_IDF
1070     - UT_T1_RMT
1071     - psram
1072
1073 IT_001_01:
1074   <<: *test_template
1075   tags:
1076     - ESP32_IDF
1077     - SSC_T1_1
1078
1079 IT_001_02:
1080   <<: *test_template
1081   tags:
1082     - ESP32_IDF
1083     - SSC_T1_1
1084
1085 IT_001_03:
1086   <<: *test_template
1087   tags:
1088     - ESP32_IDF
1089     - SSC_T1_1
1090
1091 IT_001_04:
1092   <<: *test_template
1093   tags:
1094     - ESP32_IDF
1095     - SSC_T1_1
1096
1097 IT_001_05:
1098   <<: *test_template
1099   tags:
1100     - ESP32_IDF
1101     - SSC_T1_1
1102
1103 IT_001_06:
1104   <<: *test_template
1105   tags:
1106     - ESP32_IDF
1107     - SSC_T1_1
1108
1109 IT_001_07:
1110   <<: *test_template
1111   tags:
1112     - ESP32_IDF
1113     - SSC_T1_1
1114
1115 IT_001_08:
1116   <<: *test_template
1117   tags:
1118     - ESP32_IDF
1119     - SSC_T1_1
1120
1121 IT_001_09:
1122   <<: *test_template
1123   tags:
1124     - ESP32_IDF
1125     - SSC_T1_1
1126
1127 IT_002_01:
1128   <<: *test_template
1129   tags:
1130     - ESP32_IDF
1131     - SSC_T1_2
1132
1133 IT_003_01:
1134   <<: *test_template
1135   tags:
1136     - ESP32_IDF
1137     - SSC_T2_1
1138
1139 IT_003_02:
1140   <<: *test_template
1141   tags:
1142     - ESP32_IDF
1143     - SSC_T2_1
1144
1145 IT_003_03:
1146   <<: *test_template
1147   tags:
1148     - ESP32_IDF
1149     - SSC_T2_1
1150
1151 IT_003_04:
1152   <<: *test_template
1153   tags:
1154     - ESP32_IDF
1155     - SSC_T2_1
1156
1157 IT_003_05:
1158   <<: *test_template
1159   tags:
1160     - ESP32_IDF
1161     - SSC_T2_1
1162
1163 IT_003_06:
1164   <<: *test_template
1165   tags:
1166     - ESP32_IDF
1167     - SSC_T2_1
1168
1169 IT_003_07:
1170   <<: *test_template
1171   tags:
1172     - ESP32_IDF
1173     - SSC_T2_1
1174
1175 IT_003_08:
1176   <<: *test_template
1177   tags:
1178     - ESP32_IDF
1179     - SSC_T2_1
1180
1181 IT_003_09:
1182   <<: *test_template
1183   tags:
1184     - ESP32_IDF
1185     - SSC_T2_1
1186
1187 IT_003_10:
1188   <<: *test_template
1189   tags:
1190     - ESP32_IDF
1191     - SSC_T2_1
1192
1193 IT_003_11:
1194   <<: *test_template
1195   tags:
1196     - ESP32_IDF
1197     - SSC_T2_1
1198
1199 IT_003_12:
1200   <<: *test_template
1201   tags:
1202     - ESP32_IDF
1203     - SSC_T2_1
1204
1205 IT_003_13:
1206   <<: *test_template
1207   tags:
1208     - ESP32_IDF
1209     - SSC_T2_1
1210
1211 IT_003_14:
1212   <<: *test_template
1213   tags:
1214     - ESP32_IDF
1215     - SSC_T2_1
1216
1217 IT_004_01:
1218   <<: *test_template
1219   tags:
1220     - ESP32_IDF
1221     - SSC_T1_APC
1222
1223 IT_005_01:
1224   <<: *test_template
1225   tags:
1226     - ESP32_IDF
1227     - SSC_T1_WEP
1228
1229 IT_009_01:
1230   <<: *test_template
1231   tags:
1232     - ESP32_IDF
1233     - SSC_T1_3
1234
1235 IT_010_01:
1236   <<: *test_template
1237   tags:
1238     - ESP32_IDF
1239     - SSC_T5_1
1240
1241 IT_011_01:
1242   <<: *test_template
1243   tags:
1244     - ESP32_IDF
1245     - SSC_T50_1
1246
1247 IT_501_01:
1248   <<: *test_template
1249   tags:
1250     - ESP32_IDF
1251     - SSC_T1_1
1252     - stress_test
1253
1254 IT_501_02:
1255   <<: *test_template
1256   tags:
1257     - ESP32_IDF
1258     - SSC_T1_1
1259     - stress_test
1260
1261 IT_501_03:
1262   <<: *test_template
1263   tags:
1264     - ESP32_IDF
1265     - SSC_T1_1
1266     - stress_test
1267
1268 IT_502_01:
1269   <<: *test_template
1270   tags:
1271     - ESP32_IDF
1272     - SSC_T2_1
1273     - stress_test
1274
1275 IT_502_02:
1276   <<: *test_template
1277   tags:
1278     - ESP32_IDF
1279     - SSC_T2_1
1280     - stress_test
1281
1282 IT_503_01:
1283   <<: *test_template
1284   tags:
1285     - ESP32_IDF
1286     - SSC_T5_1
1287     - stress_test
1288
1289 IT_503_02:
1290   <<: *test_template
1291   tags:
1292     - ESP32_IDF
1293     - SSC_T5_1
1294     - stress_test
1295
1296 IT_503_03:
1297   <<: *test_template
1298   tags:
1299     - ESP32_IDF
1300     - SSC_T5_1
1301     - stress_test