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