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