]> granicus.if.org Git - esp-idf/blob - .gitlab-ci.yml
Merge branch 'doc/esp_idf_requires_gcc' 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_partition_table_on_host:
247   stage: test
248   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
249   tags:
250     - build
251   dependencies: []
252   script:
253     - cd components/partition_table/test_gen_esp32part_host
254     - ./gen_esp32part_tests.py
255
256 test_wl_on_host:
257   stage: test
258   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
259   tags:
260     - wl_host_test
261   artifacts:
262     paths:
263       - components/wear_levelling/test_wl_host/coverage_report.zip
264   dependencies: []
265   script:
266     - cd components/wear_levelling/test_wl_host
267     - make test
268
269 test_multi_heap_on_host:
270   stage: test
271   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
272   tags:
273     - wl_host_test
274   script:
275     - cd components/heap/test_multi_heap_host
276     - ./test_all_configs.sh
277
278 test_build_system:
279   stage: test
280   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
281   tags:
282     - build_test
283   dependencies: []
284   script:
285     - ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
286     - rm -rf test_build_system
287     - mkdir test_build_system
288     - cd test_build_system
289     - ${IDF_PATH}/tools/ci/test_build_system.sh
290
291 test_report:
292   stage: test_report
293   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
294   tags:
295     - report
296   only:
297     - master
298     - triggers
299     - schedules
300     - /^release\/v/
301     - /^v\d+\.\d+(\.\d+)?($|-)/
302   variables:
303     LOG_PATH: "$CI_PROJECT_DIR/$CI_COMMIT_SHA"
304     TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test"
305     REPORT_PATH: "$CI_PROJECT_DIR/CI_Test_Report"
306     MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/tools/unit-test-app/tools/ModuleDefinition.yml"
307   #dependencies:
308   #We need all UT* and IT* artifacts except for only a few other
309   artifacts:
310     when: always
311     paths:
312       - $REPORT_PATH
313       - $LOG_PATH
314     expire_in: 12 mos
315   script:
316     # calc log path
317     - VER_NUM=`git rev-list HEAD | wc -l | awk '{print $1}'`
318     - SHA_ID=`echo $CI_COMMIT_SHA | cut -c 1-7`
319     - REVISION="${VER_NUM}_${SHA_ID}"
320     # replace / to _ in branch name
321     - ESCAPED_BRANCH_NAME=`echo $CI_COMMIT_REF_NAME | sed 's/\//___/g'`
322     # result path and artifacts path
323     - RESULT_PATH="$CI_PROJECT_NAME/$ESCAPED_BRANCH_NAME/$REVISION"
324     - ARTIFACTS_PATH="$GITLAB_HTTP_SERVER/idf/esp-idf/builds/$CI_JOB_ID/artifacts/browse/$CI_COMMIT_SHA"
325     # clone test bench
326     - git clone $GITLAB_SSH_SERVER/yinling/auto_test_script.git
327     - cd auto_test_script
328     - python $CHECKOUT_REF_SCRIPT auto_test_script
329     # generate report
330     - TEST_RESULT=Pass
331     - 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
332     # commit to CI-test-result project
333     - git clone $GITLAB_SSH_SERVER/qa/CI-test-result.git
334     - rm -rf "CI-test-result/RawData/$RESULT_PATH"
335     - cp -R $CI_PROJECT_NAME CI-test-result/RawData
336     - cd CI-test-result
337     # config git user
338     - git config --global user.email "ci-test-result@espressif.com"
339     - git config --global user.name "ci-test-result"
340     # commit test result
341     - git add .
342     - git commit . -m "update test result for $CI_PROJECT_NAME/$CI_COMMIT_REF_NAME/$CI_COMMIT_SHA, pipeline ID $CI_PIPELINE_ID" || exit 0
343     - git push origin master
344     - test "${TEST_RESULT}" = "Pass" || exit 1
345
346 test_esp_err_to_name_on_host:
347   stage: test
348   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
349   tags:
350     - build
351   dependencies: []
352   script:
353     - cd tools/
354     - ./gen_esp_err_to_name.py
355     - 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)
356
357 push_master_to_github:
358   stage: deploy
359   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
360   tags:
361     - deploy
362   only:
363     - master
364     - /^release\/v/
365     - /^v\d+\.\d+(\.\d+)?($|-)/
366   when: on_success
367   dependencies: []
368   variables:
369     GITHUB_PUSH_REFS: refs/remotes/origin/release refs/remotes/origin/master
370   before_script: *do_nothing_before
371   script:
372     - mkdir -p ~/.ssh
373     - chmod 700 ~/.ssh
374     - echo -n $GH_PUSH_KEY > ~/.ssh/id_rsa_base64
375     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
376     - chmod 600 ~/.ssh/id_rsa
377     - echo -e "Host github.com\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
378     - git remote remove github &>/dev/null || true
379     - git remote add github git@github.com:espressif/esp-idf.git
380     # What the next line of script does: goes through the list of refs for all branches we push to github,
381     # generates a snippet of shell which is evaluated. The snippet checks CI_COMMIT_SHA against the SHA
382     # (aka objectname) at tip of each branch, and if any SHAs match then it checks out the local branch
383     # and then pushes that ref to a corresponding github branch
384     - 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)
385
386
387 deploy_docs:
388   stage: assign_test
389   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
390   tags:
391     - deploy
392   only:
393    - master
394    - /^release\/v/
395    - /^v\d+\.\d+(\.\d+)?($|-)/
396    - triggers
397   dependencies:
398     - build_docs
399   before_script: *do_nothing_before
400   script:
401     - mkdir -p ~/.ssh
402     - chmod 700 ~/.ssh
403     - echo -n $DOCS_DEPLOY_KEY > ~/.ssh/id_rsa_base64
404     - base64 --decode --ignore-garbage ~/.ssh/id_rsa_base64 > ~/.ssh/id_rsa
405     - chmod 600 ~/.ssh/id_rsa
406     - echo -e "Host $DOCS_SERVER\n\tStrictHostKeyChecking no\n\tUser $DOCS_SERVER_USER\n" >> ~/.ssh/config
407     - export GIT_VER=$(git describe --always)
408     - cd docs/en/_build/
409     - mv html $GIT_VER
410     - tar czvf $GIT_VER.tar.gz $GIT_VER
411     - scp $GIT_VER.tar.gz $DOCS_SERVER:$DOCS_PATH/en
412     - ssh $DOCS_SERVER -x "cd $DOCS_PATH/en && tar xzvf $GIT_VER.tar.gz && rm -f latest && ln -s $GIT_VER latest"
413     - cd ../../zh_CN/_build/
414     - mv html $GIT_VER
415     - tar czvf $GIT_VER.tar.gz $GIT_VER
416     - scp $GIT_VER.tar.gz $DOCS_SERVER:$DOCS_PATH/zh_CN
417     - ssh $DOCS_SERVER -x "cd $DOCS_PATH/zh_CN && tar xzvf $GIT_VER.tar.gz && rm -f latest && ln -s $GIT_VER latest"
418     # add link to preview doc
419     - echo "[document preview][en] $CI_DOCKER_REGISTRY/docs/esp-idf/en/${GIT_VER}/index.html"
420     - echo "[document preview][zh_CN] $CI_DOCKER_REGISTRY/docs/esp-idf/zh_CN/${GIT_VER}/index.html"
421
422 check_doc_links:
423   stage: test
424   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
425   tags:
426     - check_doc_links
427   only:
428     # can only be triggered
429     - triggers
430   artifacts:
431     paths:
432       - docs/_build/linkcheck
433     expire_in: 1 mos
434   script:
435     # must be triggered with CHECK_LINKS=Yes, otherwise exit without test
436     - test "$CHECK_LINKS" = "Yes" || exit 0
437     # can only run on master branch (otherwise the commit is not on Github yet)
438     - test "${CI_COMMIT_REF_NAME}" = "master" || exit 0
439     - cd docs
440     - make linkcheck
441
442 check_commit_msg:
443   stage: deploy
444   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
445   tags:
446     - build
447   except:
448     - master
449     - /^release\/v/
450     - /^v\d+\.\d+(\.\d+)?($|-)/
451   dependencies: []
452   before_script: *do_nothing_before
453   script:
454     - git status
455     - git log -n10 --oneline
456     # commit start with "WIP: " need to be squashed before merge
457     - 'git log --pretty=%s master.. -- | grep "^WIP: " && exit 1 || exit 0'
458
459 check_submodule_sync:
460   stage: deploy
461   image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
462   tags:
463     - build
464   except:
465     - master
466     - /^release\/v/
467     - /^v\d+\.\d+(\.\d+)?($|-)/
468   dependencies: []
469   variables:
470     GIT_STRATEGY: clone
471   before_script: *do_nothing_before
472   script:
473     # check if all submodules are correctly synced to public repostory
474     - git submodule update --init --recursive
475
476 assign_test:
477   <<: *build_template
478   stage: assign_test
479   # gitlab ci do not support match job with RegEx or wildcard now in dependencies.
480   # we have a lot build example jobs. now we don't use dependencies, just download all artificats of build stage.
481   variables:
482     UT_BIN_PATH: "tools/unit-test-app/output"
483     OUTPUT_BIN_PATH: "test_bins/ESP32_IDF"
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       - $OUTPUT_BIN_PATH
489       - components/idf_test/*/CIConfigs
490       - components/idf_test/*/TC.sqlite
491       - $EXAMPLE_CONFIG_OUTPUT_PATH
492       - tools/unit-test-app/output
493     expire_in: 1 mos
494   before_script: *add_gitlab_key_before
495   script:
496     # first move test bins together: test_bins/CHIP_SDK/TestApp/bin_files
497     - mkdir -p $OUTPUT_BIN_PATH
498     - cp -r SSC/ssc_bin/* $OUTPUT_BIN_PATH
499     # assign example tests
500     - python $TEST_FW_PATH/CIAssignExampleTest.py $IDF_PATH/examples $IDF_PATH/.gitlab-ci.yml $EXAMPLE_CONFIG_OUTPUT_PATH
501     # assign unit test cases
502     - 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
503     # clone test script to assign tests
504     - git clone $TEST_SCRIPT_REPOSITORY
505     - cd auto_test_script
506     - python $CHECKOUT_REF_SCRIPT auto_test_script
507     # assgin integration test cases
508     - python CIAssignTestCases.py -t $IDF_PATH/components/idf_test/integration_test -c $IDF_PATH/.gitlab-ci.yml -b $IDF_PATH/SSC/ssc_bin
509
510 .example_test_template: &example_test_template
511   stage: test
512   when: on_success
513   only:
514     - master
515     - /^release\/v/
516     - /^v\d+\.\d+(\.\d+)?($|-)/
517     - triggers
518     - schedules
519   # gitlab ci do not support match job with RegEx or wildcard now in dependencies.
520   # we have a lot build example jobs and the binaries them exceed the limitation of artifacts.
521   # we can't artifact them in one job. For example test jobs, download all artifacts from previous stages.
522   artifacts:
523     when: always
524     paths:
525       - $LOG_PATH
526     expire_in: 6 mos
527   variables:
528     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
529     TEST_CASE_PATH: "$CI_PROJECT_DIR/examples"
530     CONFIG_FILE: "$CI_PROJECT_DIR/examples/test_configs/$CI_JOB_NAME.yml"
531     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
532   script:
533     # first test if config file exists, if not exist, exit 0
534     - test -e $CONFIG_FILE || exit 0
535     - cd $TEST_FW_PATH
536     # run test
537     - python Runner.py $TEST_CASE_PATH -c $CONFIG_FILE
538
539 .unit_test_template: &unit_test_template
540   <<: *example_test_template
541   stage: unit_test
542   dependencies:
543     - assign_test
544   variables:
545     TEST_FW_PATH: "$CI_PROJECT_DIR/tools/tiny-test-fw"
546     TEST_CASE_PATH: "$CI_PROJECT_DIR/tools/unit-test-app"
547     CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/unit_test/CIConfigs/$CI_JOB_NAME.yml"
548     LOG_PATH: "$CI_PROJECT_DIR/TEST_LOGS"
549
550 .test_template: &test_template
551   stage: test
552   when: on_success
553   only:
554     - master
555     - /^release\/v/
556     - /^v\d+\.\d+(\.\d+)?($|-)/
557     - triggers
558     - schedules
559   allow_failure: true
560   dependencies:
561     - assign_test
562     - build_ssc_00
563     - build_ssc_01
564     - build_ssc_02
565   artifacts:
566     when: always
567     paths:
568       - $LOG_PATH
569     expire_in: 6 mos
570   variables:
571     LOCAL_ENV_CONFIG_PATH: "$CI_PROJECT_DIR/ci-test-runner-configs/$CI_RUNNER_DESCRIPTION/ESP32_IDF"
572     LOG_PATH: "$CI_PROJECT_DIR/$CI_COMMIT_SHA"
573     TEST_CASE_FILE_PATH: "$CI_PROJECT_DIR/components/idf_test/integration_test"
574     MODULE_UPDATE_FILE: "$CI_PROJECT_DIR/components/idf_test/ModuleDefinition.yml"
575     CONFIG_FILE: "$CI_PROJECT_DIR/components/idf_test/integration_test/CIConfigs/$CI_JOB_NAME.yml"
576   before_script: *add_gitlab_key_before
577   script:
578     # first test if config file exists, if not exist, exit 0
579     - test -e $CONFIG_FILE || exit 0
580     # clone local test env configs
581     - git clone $TEST_ENV_CONFIG_REPOSITORY
582     - cd ci-test-runner-configs
583     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
584     # clone test bench
585     - git clone $TEST_SCRIPT_REPOSITORY
586     - cd auto_test_script
587     - python $CHECKOUT_REF_SCRIPT auto_test_script
588     # run test
589     - 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
590
591 nvs_compatible_test:
592   <<: *test_template
593   artifacts:
594     when: always
595     paths:
596       - $LOG_PATH
597       - nvs_wifi.bin
598     expire_in: 6 mos
599   tags:
600     - ESP32_IDF
601     - NVS_Compatible
602   script:
603     # clone local test env configs
604     - git clone $TEST_ENV_CONFIG_REPOSITORY
605     - cd ci-test-runner-configs
606     - python $CHECKOUT_REF_SCRIPT ci-test-runner-configs
607     # clone test bench
608     - git clone $TEST_SCRIPT_REPOSITORY
609     - cd auto_test_script
610     - git checkout ${CI_COMMIT_REF_NAME} || echo "Using default branch..."
611     # prepare nvs bins
612     - ./Tools/prepare_nvs_bin.sh
613     # run test
614     - 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
615
616 example_test_001_01:
617   <<: *example_test_template
618   tags:
619     - ESP32
620     - Example_WIFI
621
622 UT_001_01:
623   <<: *unit_test_template
624   tags:
625     - ESP32_IDF
626     - UT_T1_1
627     - UT_default
628
629 UT_001_02:
630   <<: *unit_test_template
631   tags:
632     - ESP32_IDF
633     - UT_T1_1
634     - UT_default
635
636 UT_001_03:
637   <<: *unit_test_template
638   tags:
639     - ESP32_IDF
640     - UT_T1_1
641     - UT_default
642
643 UT_001_04:
644   <<: *unit_test_template
645   tags:
646     - ESP32_IDF
647     - UT_T1_1
648     - UT_default
649
650 UT_001_05:
651   <<: *unit_test_template
652   tags:
653     - ESP32_IDF
654     - UT_T1_SDMODE
655     - UT_default
656
657 UT_001_06:
658   <<: *unit_test_template
659   tags:
660     - ESP32_IDF
661     - UT_T1_SPIMODE
662     - UT_default
663
664 UT_001_07:
665   <<: *unit_test_template
666   tags:
667     - ESP32_IDF
668     - UT_T1_1
669     - UT_default
670
671 UT_001_08:
672   <<: *unit_test_template
673   tags:
674     - ESP32_IDF
675     - UT_T1_1
676     - UT_default
677
678 UT_001_09:
679   <<: *unit_test_template
680   tags:
681     - ESP32_IDF
682     - UT_T1_1
683     - UT_default
684
685 UT_002_01:
686   <<: *unit_test_template
687   tags:
688     - ESP32_IDF
689     - UT_T1_1
690     - UT_release
691
692 UT_002_02:
693   <<: *unit_test_template
694   tags:
695     - ESP32_IDF
696     - UT_T1_1
697     - UT_release
698
699 UT_002_03:
700   <<: *unit_test_template
701   tags:
702     - ESP32_IDF
703     - UT_T1_1
704     - UT_release
705
706 UT_002_04:
707   <<: *unit_test_template
708   tags:
709     - ESP32_IDF
710     - UT_T1_1
711     - UT_release
712
713 UT_002_05:
714   <<: *unit_test_template
715   tags:
716     - ESP32_IDF
717     - UT_T1_SDMODE
718     - UT_release
719
720 UT_002_06:
721   <<: *unit_test_template
722   tags:
723     - ESP32_IDF
724     - UT_T1_SPIMODE
725     - UT_release
726
727 UT_002_07:
728   <<: *unit_test_template
729   tags:
730     - ESP32_IDF
731     - UT_T1_1
732     - UT_release
733
734 UT_002_08:
735   <<: *unit_test_template
736   tags:
737     - ESP32_IDF
738     - UT_T1_1
739     - UT_release
740
741 UT_002_09:
742   <<: *unit_test_template
743   tags:
744     - ESP32_IDF
745     - UT_T1_1
746     - UT_release
747
748 UT_003_01:
749   <<: *unit_test_template
750   tags:
751     - ESP32_IDF
752     - UT_T1_1
753     - UT_single_core
754
755 UT_003_02:
756   <<: *unit_test_template
757   tags:
758     - ESP32_IDF
759     - UT_T1_1
760     - UT_single_core
761
762 UT_003_03:
763   <<: *unit_test_template
764   tags:
765     - ESP32_IDF
766     - UT_T1_1
767     - UT_single_core
768
769 UT_003_04:
770   <<: *unit_test_template
771   tags:
772     - ESP32_IDF
773     - UT_T1_1
774     - UT_single_core
775
776 UT_003_05:
777   <<: *unit_test_template
778   tags:
779     - ESP32_IDF
780     - UT_T1_SDMODE
781     - UT_single_core
782
783 UT_003_06:
784   <<: *unit_test_template
785   tags:
786     - ESP32_IDF
787     - UT_T1_SPIMODE
788     - UT_single_core
789
790 UT_003_07:
791   <<: *unit_test_template
792   tags:
793     - ESP32_IDF
794     - UT_T1_1
795     - UT_single_core
796
797 UT_003_08:
798   <<: *unit_test_template
799   tags:
800     - ESP32_IDF
801     - UT_T1_1
802     - UT_single_core
803
804 UT_003_09:
805   <<: *unit_test_template
806   tags:
807     - ESP32_IDF
808     - UT_T1_1
809     - UT_single_core
810
811 UT_004_01:
812   <<: *unit_test_template
813   tags:
814     - ESP32_IDF
815     - UT_T1_1
816     - UT_psram
817
818 UT_004_02:
819   <<: *unit_test_template
820   tags:
821     - ESP32_IDF
822     - UT_T1_1
823     - UT_psram
824
825 UT_004_03:
826   <<: *unit_test_template
827   tags:
828     - ESP32_IDF
829     - UT_T1_1
830     - UT_psram
831
832 UT_004_04:
833   <<: *unit_test_template
834   tags:
835     - ESP32_IDF
836     - UT_T1_1
837     - UT_psram
838
839 UT_004_05:
840   <<: *unit_test_template
841   tags:
842     - ESP32_IDF
843     - UT_T1_SDMODE
844     - UT_psram
845
846 UT_004_06:
847   <<: *unit_test_template
848   tags:
849     - ESP32_IDF
850     - UT_T1_SPIMODE
851     - UT_psram
852
853 UT_004_07:
854   <<: *unit_test_template
855   tags:
856     - ESP32_IDF
857     - UT_T1_1
858     - UT_psram
859
860 UT_004_08:
861   <<: *unit_test_template
862   tags:
863     - ESP32_IDF
864     - UT_T1_1
865     - UT_psram
866
867 UT_004_09:
868   <<: *unit_test_template
869   tags:
870     - ESP32_IDF
871     - UT_T1_1
872     - UT_psram
873
874 IT_001_01:
875   <<: *test_template
876   tags:
877     - ESP32_IDF
878     - SSC_T1_1
879
880 IT_001_02:
881   <<: *test_template
882   tags:
883     - ESP32_IDF
884     - SSC_T1_1
885
886 IT_001_03:
887   <<: *test_template
888   tags:
889     - ESP32_IDF
890     - SSC_T1_1
891
892 IT_001_04:
893   <<: *test_template
894   tags:
895     - ESP32_IDF
896     - SSC_T1_1
897
898 IT_001_05:
899   <<: *test_template
900   tags:
901     - ESP32_IDF
902     - SSC_T1_1
903
904 IT_001_06:
905   <<: *test_template
906   tags:
907     - ESP32_IDF
908     - SSC_T1_1
909
910 IT_001_07:
911   <<: *test_template
912   tags:
913     - ESP32_IDF
914     - SSC_T1_1
915
916 IT_001_08:
917   <<: *test_template
918   tags:
919     - ESP32_IDF
920     - SSC_T1_1
921
922 IT_001_09:
923   <<: *test_template
924   tags:
925     - ESP32_IDF
926     - SSC_T1_1
927
928 IT_002_01:
929   <<: *test_template
930   tags:
931     - ESP32_IDF
932     - SSC_T1_2
933
934 IT_003_01:
935   <<: *test_template
936   tags:
937     - ESP32_IDF
938     - SSC_T2_1
939
940 IT_003_02:
941   <<: *test_template
942   tags:
943     - ESP32_IDF
944     - SSC_T2_1
945
946 IT_003_03:
947   <<: *test_template
948   tags:
949     - ESP32_IDF
950     - SSC_T2_1
951
952 IT_003_04:
953   <<: *test_template
954   tags:
955     - ESP32_IDF
956     - SSC_T2_1
957
958 IT_003_05:
959   <<: *test_template
960   tags:
961     - ESP32_IDF
962     - SSC_T2_1
963
964 IT_003_06:
965   <<: *test_template
966   tags:
967     - ESP32_IDF
968     - SSC_T2_1
969
970 IT_003_07:
971   <<: *test_template
972   tags:
973     - ESP32_IDF
974     - SSC_T2_1
975
976 IT_003_08:
977   <<: *test_template
978   tags:
979     - ESP32_IDF
980     - SSC_T2_1
981
982 IT_003_09:
983   <<: *test_template
984   tags:
985     - ESP32_IDF
986     - SSC_T2_1
987
988 IT_003_10:
989   <<: *test_template
990   tags:
991     - ESP32_IDF
992     - SSC_T2_1
993
994 IT_003_11:
995   <<: *test_template
996   tags:
997     - ESP32_IDF
998     - SSC_T2_1
999
1000 IT_003_12:
1001   <<: *test_template
1002   tags:
1003     - ESP32_IDF
1004     - SSC_T2_1
1005
1006 IT_003_13:
1007   <<: *test_template
1008   tags:
1009     - ESP32_IDF
1010     - SSC_T2_1
1011
1012 IT_003_14:
1013   <<: *test_template
1014   tags:
1015     - ESP32_IDF
1016     - SSC_T2_1
1017
1018 IT_004_01:
1019   <<: *test_template
1020   tags:
1021     - ESP32_IDF
1022     - SSC_T1_APC
1023
1024 IT_005_01:
1025   <<: *test_template
1026   tags:
1027     - ESP32_IDF
1028     - SSC_T1_WEP
1029
1030 IT_009_01:
1031   <<: *test_template
1032   tags:
1033     - ESP32_IDF
1034     - SSC_T1_3
1035
1036 IT_010_01:
1037   <<: *test_template
1038   tags:
1039     - ESP32_IDF
1040     - SSC_T5_1
1041
1042 IT_501_01:
1043   <<: *test_template
1044   tags:
1045     - ESP32_IDF
1046     - SSC_T1_1
1047     - stress_test
1048
1049 IT_501_02:
1050   <<: *test_template
1051   tags:
1052     - ESP32_IDF
1053     - SSC_T1_1
1054     - stress_test
1055
1056 IT_501_03:
1057   <<: *test_template
1058   tags:
1059     - ESP32_IDF
1060     - SSC_T1_1
1061     - stress_test
1062
1063 IT_502_01:
1064   <<: *test_template
1065   tags:
1066     - ESP32_IDF
1067     - SSC_T2_1
1068     - stress_test
1069
1070 IT_502_02:
1071   <<: *test_template
1072   tags:
1073     - ESP32_IDF
1074     - SSC_T2_1
1075     - stress_test
1076
1077 IT_503_01:
1078   <<: *test_template
1079   tags:
1080     - ESP32_IDF
1081     - SSC_T5_1
1082     - stress_test
1083
1084 IT_503_02:
1085   <<: *test_template
1086   tags:
1087     - ESP32_IDF
1088     - SSC_T5_1
1089     - stress_test
1090
1091 IT_503_03:
1092   <<: *test_template
1093   tags:
1094     - ESP32_IDF
1095     - SSC_T5_1
1096     - stress_test