]> granicus.if.org Git - esp-idf/blob - .gitlab-ci.yml
Modify the rmt_mem_num maximum limit value from 15 to 8.
[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_idf_monitor:
332   <<: *host_test_template
333   artifacts:
334     when: on_failure
335     paths:
336       - tools/test_idf_monitor/outputs/*
337     expire_in: 1 week
338   script:
339     - cd ${IDF_PATH}/tools/test_idf_monitor
340     - ./run_test_idf_monitor.py
341
342 test_esp_err_to_name_on_host:
343   <<: *host_test_template
344   script:
345     - cd tools/
346     - ./gen_esp_err_to_name.py
347     - 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)
348
349 push_master_to_github:
350   stage: deploy
351   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
352   tags:
353     - deploy
354   only:
355     - master
356     - /^release\/v/
357     - /^v\d+\.\d+(\.\d+)?($|-)/
358   when: on_success
359   dependencies: []
360   variables:
361     GITHUB_PUSH_REFS: refs/remotes/origin/release refs/remotes/origin/master
362   before_script: *do_nothing_before
363   script:
364     - mkdir -p ~/.ssh
365     - chmod 700 ~/.ssh
366     - echo -n $GH_PUSH_KEY > ~/.ssh/id_rsa_base64
367     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
368     - chmod 600 ~/.ssh/id_rsa
369     - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
370     - git remote remove github &>/dev/null || true
371     - git remote add github git@github.com:espressif/esp-idf.git
372     # What the next line of script does: goes through the list of refs for all branches we push to github,
373     # generates a snippet of shell which is evaluated. The snippet checks CI_COMMIT_SHA against the SHA
374     # (aka objectname) at tip of each branch, and if any SHAs match then it checks out the local branch
375     # and then pushes that ref to a corresponding github branch
376     - 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)
377
378
379 deploy_docs:
380   stage: host_test
381   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
382   tags:
383     - deploy
384   only:
385    - master
386    - /^release\/v/
387    - /^v\d+\.\d+(\.\d+)?($|-)/
388    - triggers
389   dependencies:
390     - build_docs
391   before_script: *do_nothing_before
392   script:
393     - mkdir -p ~/.ssh
394     - chmod 700 ~/.ssh
395     - echo -n $DOCS_DEPLOY_KEY > ~/.ssh/id_rsa_base64
396     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
397     - chmod 600 ~/.ssh/id_rsa
398     - echo -e "Host $DOCS_SERVER\n\tStrictHostKeyChecking no\n\tUser $DOCS_SERVER_USER\n" >> ~/.ssh/config
399     - export GIT_VER=$(git describe --always)
400     - cd docs/en/_build/
401     - mv html $GIT_VER
402     - tar czvf $GIT_VER.tar.gz $GIT_VER
403     - scp $GIT_VER.tar.gz $DOCS_SERVER:$DOCS_PATH/en
404     - ssh $DOCS_SERVER -x "cd $DOCS_PATH/en && tar xzvf $GIT_VER.tar.gz && rm -f latest && ln -s $GIT_VER latest"
405     - cd ../../zh_CN/_build/
406     - mv html $GIT_VER
407     - tar czvf $GIT_VER.tar.gz $GIT_VER
408     - scp $GIT_VER.tar.gz $DOCS_SERVER:$DOCS_PATH/zh_CN
409     - ssh $DOCS_SERVER -x "cd $DOCS_PATH/zh_CN && tar xzvf $GIT_VER.tar.gz && rm -f latest && ln -s $GIT_VER latest"
410     # add link to preview doc
411     - echo "[document preview][en] $CI_DOCKER_REGISTRY/docs/esp-idf/en/${GIT_VER}/index.html"
412     - echo "[document preview][zh_CN] $CI_DOCKER_REGISTRY/docs/esp-idf/zh_CN/${GIT_VER}/index.html"
413
414 check_doc_links:
415   stage: host_test
416   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
417   tags:
418     - check_doc_links
419   only:
420     # can only be triggered
421     - triggers
422   artifacts:
423     paths:
424       - docs/_build/linkcheck
425     expire_in: 1 mos
426   script:
427     # must be triggered with CHECK_LINKS=Yes, otherwise exit without test
428     - test "$CHECK_LINKS" = "Yes" || exit 0
429     # can only run on master branch (otherwise the commit is not on Github yet)
430     - test "${CI_COMMIT_REF_NAME}" = "master" || exit 0
431     - cd docs
432     - make linkcheck
433
434 check_line_endings:
435   stage: deploy
436   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
437   tags:
438     - build
439   except:
440     - master
441     - /^release\/v/
442     - /^v\d+\.\d+(\.\d+)?($|-)/
443   dependencies: []
444   before_script: *do_nothing_before
445   script:
446     - tools/ci/check-line-endings.sh ${IDF_PATH}
447
448 check_commit_msg:
449   stage: deploy
450   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
451   tags:
452     - build
453   except:
454     - master
455     - /^release\/v/
456     - /^v\d+\.\d+(\.\d+)?($|-)/
457   dependencies: []
458   before_script: *do_nothing_before
459   script:
460     - git status
461     - git log -n10 --oneline
462     # commit start with "WIP: " need to be squashed before merge
463     - 'git log --pretty=%s master.. -- | grep "^WIP: " && exit 1 || exit 0'
464
465 check_permissions:
466   stage: deploy
467   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
468   tags:
469     - build
470   except:
471     - master
472     - /^release\/v/
473     - /^v\d+\.\d+(\.\d+)?($|-)/
474   dependencies: []
475   before_script: *do_nothing_before
476   script:
477     - tools/ci/check-executable.sh
478
479 check_submodule_sync:
480   stage: deploy
481   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
482   tags:
483     - build
484   except:
485     - master
486     - /^release\/v/
487     - /^v\d+\.\d+(\.\d+)?($|-)/
488   dependencies: []
489   variables:
490     GIT_STRATEGY: clone
491   before_script: *do_nothing_before
492   script:
493     # check if all submodules are correctly synced to public repostory
494     - git submodule update --init --recursive
495
496 assign_test:
497   tags:
498     - assign_test
499   image: $CI_DOCKER_REGISTRY/ubuntu-test-env$BOT_DOCKER_IMAGE_TAG
500   stage: assign_test
501   # gitlab ci do not support match job with RegEx or wildcard now in dependencies.
502   # we have a lot build example jobs. now we don't use dependencies, just download all artificats of build stage.
503   dependencies:
504     - build_ssc_00
505     - build_ssc_01
506     - build_ssc_02
507     - build_esp_idf_tests
508   variables:
509     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
510     EXAMPLE_CONFIG_OUTPUT_PATH: "$CI_PROJECT_DIR/examples/test_configs"
511   artifacts:
512     paths:
513       - components/idf_test/*/CIConfigs
514       - components/idf_test/*/TC.sqlite
515       - $EXAMPLE_CONFIG_OUTPUT_PATH
516     expire_in: 1 mos
517   before_script: *add_gitlab_key_before
518   script:
519     # assign example tests
520     - python $TEST_FW_PATH/CIAssignExampleTest.py $IDF_PATH/examples $IDF_PATH/.gitlab-ci.yml $EXAMPLE_CONFIG_OUTPUT_PATH
521     # assign unit test cases
522     - 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
523     # clone test script to assign tests
524     - git clone $TEST_SCRIPT_REPOSITORY
525     - cd auto_test_script
526     - python $CHECKOUT_REF_SCRIPT auto_test_script
527     # assgin integration test cases
528     - python CIAssignTestCases.py -t $IDF_PATH/components/idf_test/integration_test -c $IDF_PATH/.gitlab-ci.yml -b $IDF_PATH/SSC/ssc_bin
529
530 .example_test_template: &example_test_template
531   stage: integration_test
532   when: on_success
533   only:
534     - master
535     - /^release\/v/
536     - /^v\d+\.\d+(\.\d+)?($|-)/
537     - triggers
538     - schedules
539   dependencies:
540     - assign_test
541     - build_examples_00
542     - build_examples_01
543     - build_examples_02
544     - build_examples_03
545     - build_examples_04
546     - build_examples_05
547     - build_examples_06
548     - build_examples_07
549   artifacts:
550     when: always
551     paths:
552       - $LOG_PATH
553     expire_in: 1 mos
554   variables:
555     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
556     TEST_CASE_PATH: "$CI_PROJECT_DIR/examples"
557     CONFIG_FILE: "$CI_PROJECT_DIR/examples/test_configs/$CI_JOB_NAME.yml"
558     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
559     ENV_FILE: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/EnvConfig.yml"
560   script:
561     # first test if config file exists, if not exist, exit 0
562     - test -e $CONFIG_FILE || exit 0
563     # clone test env configs
564     - git clone $TEST_ENV_CONFIG_REPOSITORY
565     - cd ci-test-runner-configs
566     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
567     - cd $TEST_FW_PATH
568     # run test
569     - python Runner.py $TEST_CASE_PATH -c $CONFIG_FILE -e $ENV_FILE
570
571 .unit_test_template: &unit_test_template
572   <<: *example_test_template
573   stage: unit_test
574   dependencies:
575     - assign_test
576     - build_esp_idf_tests
577   variables:
578     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
579     TEST_CASE_PATH: "$CI_PROJECT_DIR/tools/unit-test-app"
580     CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/unit_test/CIConfigs/$CI_JOB_NAME.yml"
581     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
582     ENV_FILE: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/EnvConfig.yml"
583
584 .test_template: &test_template
585   stage: integration_test
586   when: on_success
587   only:
588     - master
589     - /^release\/v/
590     - /^v\d+\.\d+(\.\d+)?($|-)/
591     - triggers
592     - schedules
593   dependencies:
594     - assign_test
595     - build_ssc_00
596     - build_ssc_01
597     - build_ssc_02
598   artifacts:
599     when: always
600     paths:
601       - $LOG_PATH
602     expire_in: 1 mos
603   variables:
604     LOCAL_ENV_CONFIG_PATH: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/ESP32_IDF"
605     LOG_PATH: "$CI_PROJECT_DIR/$CI_COMMIT_SHA"
606     TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test/integration_test"
607     MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/components/idf_test/ModuleDefinition.yml"
608     CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/integration_test/CIConfigs/$CI_JOB_NAME.yml"
609   before_script: *add_gitlab_key_before
610   script:
611     # first test if config file exists, if not exist, exit 0
612     - test -e $CONFIG_FILE || exit 0
613     # clone local test env configs
614     - git clone $TEST_ENV_CONFIG_REPOSITORY
615     - cd ci-test-runner-configs
616     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
617     # clone test bench
618     - git clone $TEST_SCRIPT_REPOSITORY
619     - cd auto_test_script
620     - python $CHECKOUT_REF_SCRIPT auto_test_script
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 nvs_compatible_test:
625   <<: *test_template
626   artifacts:
627     when: always
628     paths:
629       - $LOG_PATH
630       - nvs_wifi.bin
631     expire_in: 1 mos
632   tags:
633     - ESP32_IDF
634     - NVS_Compatible
635   script:
636     # clone local test env configs
637     - git clone $TEST_ENV_CONFIG_REPOSITORY
638     - cd ci-test-runner-configs
639     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
640     # clone test bench
641     - git clone $TEST_SCRIPT_REPOSITORY
642     - cd auto_test_script
643     - git checkout ${CI_COMMIT_REF_NAME} || echo "Using default branch..."
644     # prepare nvs bins
645     - ./Tools/prepare_nvs_bin.sh
646     # run test
647     - 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
648
649 example_test_001_01:
650   <<: *example_test_template
651   tags:
652     - ESP32
653     - Example_WIFI
654
655 example_test_002_01:
656   <<: *example_test_template
657   tags:
658     - ESP32
659     - Example_ShieldBox
660
661 example_test_003_01:
662   <<: *example_test_template
663   tags:
664     - ESP32
665     - Example_SDIO
666
667 example_test_004_01:
668   <<: *example_test_template
669   tags:
670     - ESP32
671     - Example_CAN
672
673 UT_001_01:
674   <<: *unit_test_template
675   tags:
676     - ESP32_IDF
677     - UT_T1_1
678
679 UT_001_02:
680   <<: *unit_test_template
681   tags:
682     - ESP32_IDF
683     - UT_T1_1
684
685 UT_001_03:
686   <<: *unit_test_template
687   tags:
688     - ESP32_IDF
689     - UT_T1_1
690
691 UT_001_04:
692   <<: *unit_test_template
693   tags:
694     - ESP32_IDF
695     - UT_T1_1
696
697 UT_001_05:
698   <<: *unit_test_template
699   tags:
700     - ESP32_IDF
701     - UT_T1_1
702
703 UT_001_06:
704   <<: *unit_test_template
705   tags:
706     - ESP32_IDF
707     - UT_T1_1
708
709 UT_001_07:
710   <<: *unit_test_template
711   tags:
712     - ESP32_IDF
713     - UT_T1_1
714
715 UT_001_08:
716   <<: *unit_test_template
717   tags:
718     - ESP32_IDF
719     - UT_T1_1
720
721 UT_001_09:
722   <<: *unit_test_template
723   tags:
724     - ESP32_IDF
725     - UT_T1_1
726
727 UT_001_10:
728   <<: *unit_test_template
729   tags:
730     - ESP32_IDF
731     - UT_T1_1
732
733 UT_001_11:
734   <<: *unit_test_template
735   tags:
736     - ESP32_IDF
737     - UT_T1_1
738
739 UT_001_12:
740   <<: *unit_test_template
741   tags:
742     - ESP32_IDF
743     - UT_T1_1
744
745 UT_001_13:
746   <<: *unit_test_template
747   tags:
748     - ESP32_IDF
749     - UT_T1_1
750
751 UT_001_14:
752   <<: *unit_test_template
753   tags:
754     - ESP32_IDF
755     - UT_T1_1
756
757 UT_001_15:
758   <<: *unit_test_template
759   tags:
760     - ESP32_IDF
761     - UT_T1_1
762
763 UT_001_16:
764   <<: *unit_test_template
765   tags:
766     - ESP32_IDF
767     - UT_T1_1
768
769 UT_001_17:
770   <<: *unit_test_template
771   tags:
772     - ESP32_IDF
773     - UT_T1_1
774
775 UT_001_18:
776   <<: *unit_test_template
777   tags:
778     - ESP32_IDF
779     - UT_T1_1
780
781 UT_001_19:
782   <<: *unit_test_template
783   tags:
784     - ESP32_IDF
785     - UT_T1_1
786
787 UT_001_20:
788   <<: *unit_test_template
789   tags:
790     - ESP32_IDF
791     - UT_T1_1
792
793 UT_001_21:
794   <<: *unit_test_template
795   tags:
796     - ESP32_IDF
797     - UT_T1_1
798
799 UT_001_22:
800   <<: *unit_test_template
801   tags:
802     - ESP32_IDF
803     - UT_T1_1
804
805 UT_001_23:
806   <<: *unit_test_template
807   tags:
808     - ESP32_IDF
809     - UT_T1_1
810
811 UT_001_24:
812   <<: *unit_test_template
813   tags:
814     - ESP32_IDF
815     - UT_T1_1
816
817 UT_001_25:
818   <<: *unit_test_template
819   tags:
820     - ESP32_IDF
821     - UT_T1_1
822     
823 UT_001_26:
824   <<: *unit_test_template
825   tags:
826     - ESP32_IDF
827     - UT_T1_1
828
829 UT_001_27:
830   <<: *unit_test_template
831   tags:
832     - ESP32_IDF
833     - UT_T1_1
834
835 UT_001_28:
836   <<: *unit_test_template
837   tags:
838     - ESP32_IDF
839     - UT_T1_1
840
841 UT_001_29:
842   <<: *unit_test_template
843   tags:
844     - ESP32_IDF
845     - UT_T1_1
846
847 UT_001_30:
848   <<: *unit_test_template
849   tags:
850     - ESP32_IDF
851     - UT_T1_1
852
853 UT_001_31:
854   <<: *unit_test_template
855   tags:
856     - ESP32_IDF
857     - UT_T1_1
858     
859 UT_001_32:
860   <<: *unit_test_template
861   tags:
862     - ESP32_IDF
863     - UT_T1_1
864
865 UT_001_33:
866   <<: *unit_test_template
867   tags:
868     - ESP32_IDF
869     - UT_T1_1
870     
871 UT_001_34:
872   <<: *unit_test_template
873   tags:
874     - ESP32_IDF
875     - UT_T1_1
876
877 UT_002_01:
878   <<: *unit_test_template
879   tags:
880     - ESP32_IDF
881     - UT_T1_SDMODE
882
883 UT_002_02:
884   <<: *unit_test_template
885   tags:
886     - ESP32_IDF
887     - UT_T1_SDMODE
888
889 UT_002_03:
890   <<: *unit_test_template
891   tags:
892     - ESP32_IDF
893     - UT_T1_SDMODE
894
895 UT_003_01:
896   <<: *unit_test_template
897   tags:
898     - ESP32_IDF
899     - UT_T1_SPIMODE
900
901 UT_003_02:
902   <<: *unit_test_template
903   tags:
904     - ESP32_IDF
905     - UT_T1_SPIMODE
906
907 UT_003_03:
908   <<: *unit_test_template
909   tags:
910     - ESP32_IDF
911     - UT_T1_SPIMODE
912
913 UT_004_01:
914   <<: *unit_test_template
915   tags:
916     - ESP32_IDF
917     - UT_T1_1
918     - psram
919
920 UT_004_02:
921   <<: *unit_test_template
922   tags:
923     - ESP32_IDF
924     - UT_T1_1
925     - psram
926
927 UT_004_03:
928   <<: *unit_test_template
929   tags:
930     - ESP32_IDF
931     - UT_T1_1
932     - psram
933
934 UT_004_04:
935   <<: *unit_test_template
936   tags:
937     - ESP32_IDF
938     - UT_T1_1
939     - psram
940
941 UT_004_05:
942   <<: *unit_test_template
943   tags:
944     - ESP32_IDF
945     - UT_T1_1
946     - psram
947
948 UT_004_06:
949   <<: *unit_test_template
950   tags:
951     - ESP32_IDF
952     - UT_T1_1
953     - psram
954
955 UT_004_07:
956   <<: *unit_test_template
957   tags:
958     - ESP32_IDF
959     - UT_T1_1
960     - psram
961
962 UT_004_08:
963   <<: *unit_test_template
964   tags:
965     - ESP32_IDF
966     - UT_T1_1
967     - psram
968
969 UT_004_09:
970   <<: *unit_test_template
971   tags:
972     - ESP32_IDF
973     - UT_T1_1
974     - psram
975
976 UT_004_10:
977   <<: *unit_test_template
978   tags:
979     - ESP32_IDF
980     - UT_T1_1
981     - psram
982     
983 UT_004_11:
984   <<: *unit_test_template
985   tags:
986     - ESP32_IDF
987     - UT_T1_1
988     - psram
989     
990 UT_005_01:
991   <<: *unit_test_template
992   tags:
993     - ESP32_IDF
994     - UT_T1_SDMODE
995     - psram
996
997 UT_005_02:
998   <<: *unit_test_template
999   tags:
1000     - ESP32_IDF
1001     - UT_T1_SPIMODE
1002     - psram
1003
1004 UT_006_01:
1005   <<: *unit_test_template
1006   tags:
1007     - ESP32_IDF
1008     - UT_T1_GPIO
1009
1010 UT_006_02:
1011   <<: *unit_test_template
1012   tags:
1013     - ESP32_IDF
1014     - UT_T1_GPIO
1015
1016 UT_006_03:
1017   <<: *unit_test_template
1018   tags:
1019     - ESP32_IDF
1020     - UT_T1_GPIO
1021
1022 UT_006_04:
1023   <<: *unit_test_template
1024   tags:
1025     - ESP32_IDF
1026     - UT_T1_GPIO
1027     - psram
1028
1029 UT_007_01:
1030   <<: *unit_test_template
1031   tags:
1032     - ESP32_IDF
1033     - UT_T1_PCNT
1034
1035 UT_007_02:
1036   <<: *unit_test_template
1037   tags:
1038     - ESP32_IDF
1039     - UT_T1_PCNT
1040
1041 UT_007_03:
1042   <<: *unit_test_template
1043   tags:
1044     - ESP32_IDF
1045     - UT_T1_PCNT
1046
1047 UT_007_04:
1048   <<: *unit_test_template
1049   tags:
1050     - ESP32_IDF
1051     - UT_T1_PCNT
1052     - psram
1053
1054 UT_008_01:
1055   <<: *unit_test_template
1056   tags:
1057     - ESP32_IDF
1058     - UT_T1_LEDC
1059
1060 UT_008_02:
1061   <<: *unit_test_template
1062   tags:
1063     - ESP32_IDF
1064     - UT_T1_LEDC
1065
1066 UT_008_03:
1067   <<: *unit_test_template
1068   tags:
1069     - ESP32_IDF
1070     - UT_T1_LEDC
1071
1072 UT_008_04:
1073   <<: *unit_test_template
1074   tags:
1075     - ESP32_IDF
1076     - UT_T1_LEDC
1077     - psram
1078
1079 UT_010_01:
1080   <<: *unit_test_template
1081   tags:
1082     - ESP32_IDF
1083     - UT_T1_RMT
1084
1085 UT_010_02:
1086   <<: *unit_test_template
1087   tags:
1088     - ESP32_IDF
1089     - UT_T1_RMT
1090
1091 UT_010_03:
1092   <<: *unit_test_template
1093   tags:
1094     - ESP32_IDF
1095     - UT_T1_RMT
1096
1097 UT_010_04:
1098   <<: *unit_test_template
1099   tags:
1100     - ESP32_IDF
1101     - UT_T1_RMT
1102     - psram
1103
1104 IT_001_01:
1105   <<: *test_template
1106   tags:
1107     - ESP32_IDF
1108     - SSC_T1_1
1109
1110 IT_001_02:
1111   <<: *test_template
1112   tags:
1113     - ESP32_IDF
1114     - SSC_T1_1
1115
1116 IT_001_03:
1117   <<: *test_template
1118   tags:
1119     - ESP32_IDF
1120     - SSC_T1_1
1121
1122 IT_001_04:
1123   <<: *test_template
1124   tags:
1125     - ESP32_IDF
1126     - SSC_T1_1
1127
1128 IT_001_05:
1129   <<: *test_template
1130   tags:
1131     - ESP32_IDF
1132     - SSC_T1_1
1133
1134 IT_001_06:
1135   <<: *test_template
1136   tags:
1137     - ESP32_IDF
1138     - SSC_T1_1
1139
1140 IT_001_07:
1141   <<: *test_template
1142   tags:
1143     - ESP32_IDF
1144     - SSC_T1_1
1145
1146 IT_001_08:
1147   <<: *test_template
1148   tags:
1149     - ESP32_IDF
1150     - SSC_T1_1
1151
1152 IT_001_09:
1153   <<: *test_template
1154   tags:
1155     - ESP32_IDF
1156     - SSC_T1_1
1157
1158 IT_002_01:
1159   <<: *test_template
1160   tags:
1161     - ESP32_IDF
1162     - SSC_T1_2
1163
1164 IT_003_01:
1165   <<: *test_template
1166   tags:
1167     - ESP32_IDF
1168     - SSC_T2_1
1169
1170 IT_003_02:
1171   <<: *test_template
1172   tags:
1173     - ESP32_IDF
1174     - SSC_T2_1
1175
1176 IT_003_03:
1177   <<: *test_template
1178   tags:
1179     - ESP32_IDF
1180     - SSC_T2_1
1181
1182 IT_003_04:
1183   <<: *test_template
1184   tags:
1185     - ESP32_IDF
1186     - SSC_T2_1
1187
1188 IT_003_05:
1189   <<: *test_template
1190   tags:
1191     - ESP32_IDF
1192     - SSC_T2_1
1193
1194 IT_003_06:
1195   <<: *test_template
1196   tags:
1197     - ESP32_IDF
1198     - SSC_T2_1
1199
1200 IT_003_07:
1201   <<: *test_template
1202   tags:
1203     - ESP32_IDF
1204     - SSC_T2_1
1205
1206 IT_003_08:
1207   <<: *test_template
1208   tags:
1209     - ESP32_IDF
1210     - SSC_T2_1
1211
1212 IT_003_09:
1213   <<: *test_template
1214   tags:
1215     - ESP32_IDF
1216     - SSC_T2_1
1217
1218 IT_003_10:
1219   <<: *test_template
1220   tags:
1221     - ESP32_IDF
1222     - SSC_T2_1
1223
1224 IT_003_11:
1225   <<: *test_template
1226   tags:
1227     - ESP32_IDF
1228     - SSC_T2_1
1229
1230 IT_003_12:
1231   <<: *test_template
1232   tags:
1233     - ESP32_IDF
1234     - SSC_T2_1
1235
1236 IT_003_13:
1237   <<: *test_template
1238   tags:
1239     - ESP32_IDF
1240     - SSC_T2_1
1241
1242 IT_003_14:
1243   <<: *test_template
1244   tags:
1245     - ESP32_IDF
1246     - SSC_T2_1
1247
1248 IT_004_01:
1249   <<: *test_template
1250   tags:
1251     - ESP32_IDF
1252     - SSC_T1_APC
1253
1254 IT_005_01:
1255   <<: *test_template
1256   tags:
1257     - ESP32_IDF
1258     - SSC_T1_WEP
1259
1260 IT_009_01:
1261   <<: *test_template
1262   tags:
1263     - ESP32_IDF
1264     - SSC_T1_3
1265
1266 IT_010_01:
1267   <<: *test_template
1268   tags:
1269     - ESP32_IDF
1270     - SSC_T5_1
1271
1272 IT_011_01:
1273   <<: *test_template
1274   tags:
1275     - ESP32_IDF
1276     - SSC_T50_1
1277
1278 IT_501_01:
1279   <<: *test_template
1280   tags:
1281     - ESP32_IDF
1282     - SSC_T1_1
1283     - stress_test
1284
1285 IT_501_02:
1286   <<: *test_template
1287   tags:
1288     - ESP32_IDF
1289     - SSC_T1_1
1290     - stress_test
1291
1292 IT_501_03:
1293   <<: *test_template
1294   tags:
1295     - ESP32_IDF
1296     - SSC_T1_1
1297     - stress_test
1298
1299 IT_502_01:
1300   <<: *test_template
1301   tags:
1302     - ESP32_IDF
1303     - SSC_T2_1
1304     - stress_test
1305
1306 IT_502_02:
1307   <<: *test_template
1308   tags:
1309     - ESP32_IDF
1310     - SSC_T2_1
1311     - stress_test
1312
1313 IT_503_01:
1314   <<: *test_template
1315   tags:
1316     - ESP32_IDF
1317     - SSC_T5_1
1318     - stress_test
1319
1320 IT_503_02:
1321   <<: *test_template
1322   tags:
1323     - ESP32_IDF
1324     - SSC_T5_1
1325     - stress_test
1326
1327 IT_503_03:
1328   <<: *test_template
1329   tags:
1330     - ESP32_IDF
1331     - SSC_T5_1
1332     - stress_test