mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
dbff74bee4
This adds SBOM information for submodules, which are not managed by Espressif. Meaning there is no fork for them in the espressif namespace. Other submodules should add sbom.yml manifest file to the root of their git repository. The SBOM information for submodules is stored in the .gitmodules file. Each SBOM related variable has the "sbom-" prefix and the following variables may be used: sbom-version: submodule version sbom-cpe: CPE record if available in NVD. This will be used by the SBOM tool to check for possible submodule vulnerabilities. The version in the CPE can be replaced with the "{}" placeholder, which will be replaced by the "sbom-version" value from above. sbom-supplier: Person or organization who is providing the submodule. It has to start with "Person:" or "Organization:" prefix as required by the SPDX-2.2 standard. sbom-url: URL to the project if exists, e.g. github. sbom-description: Project description. sbom-hash: Submodule SHA as recorded in the git-tree. This field is used by CI to check that the submodule checkout hash and info in .gitmodules are in sync. IOW if submodule is updated and it has SBOM info in .gitmodules, the .gitmodules has to be updated too. The test is part of this commit. The checkout has of the submodule can be found by using "git submodule status". Example for micro-ecc submodule ---8<--- [submodule "components/bootloader/subproject/components/micro-ecc/micro-ecc"] path = components/bootloader/subproject/components/micro-ecc/micro-ecc url = ../../kmackay/micro-ecc.git sbom-version = 1.0 sbom-cpe = cpe:2.3🅰️micro-ecc_project:micro-ecc:{}:*:*:*:*:*:*:* sbom-supplier = Person: Ken MacKay sbom-url = https://github.com/kmackay/micro-ecc sbom-description = A small and fast ECDH and ECDSA implementation for 8-bit, 32-bit, and 64-bit processors sbom-hash = d037ec89546fad14b5c4d5456c2e23a71e554966 ---8<--- Signed-off-by: Frantisek Hrbata <frantisek.hrbata@espressif.com>
355 lines
9.4 KiB
YAML
355 lines
9.4 KiB
YAML
.host_test_template:
|
|
extends: .rules:test:host_test
|
|
stage: host_test
|
|
image: $ESP_ENV_IMAGE
|
|
tags:
|
|
- host_test
|
|
dependencies: []
|
|
# run host_test jobs immediately, only after upload cache
|
|
needs:
|
|
- job: upload-pip-cache
|
|
optional: true
|
|
artifacts: false
|
|
- job: upload-submodules-cache
|
|
optional: true
|
|
artifacts: false
|
|
|
|
test_nvs_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/nvs_flash/test_nvs_host
|
|
- make test
|
|
|
|
test_nvs_coverage:
|
|
extends:
|
|
- .host_test_template
|
|
- .rules:labels:nvs_coverage
|
|
artifacts:
|
|
paths:
|
|
- components/nvs_flash/test_nvs_host/coverage_report
|
|
expire_in: 1 week
|
|
script:
|
|
- cd components/nvs_flash/test_nvs_host
|
|
- make coverage_report
|
|
# the 'long' host tests take approx 11 hours on our current runners. Adding some margin here for possible CPU contention
|
|
timeout: 18 hours
|
|
|
|
test_partition_table_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/partition_table/test_gen_esp32part_host
|
|
- ./gen_esp32part_tests.py
|
|
|
|
test_wl_on_host:
|
|
extends: .host_test_template
|
|
artifacts:
|
|
paths:
|
|
- components/wear_levelling/test_wl_host/coverage_report.zip
|
|
expire_in: 1 week
|
|
script:
|
|
- cd components/wear_levelling/test_wl_host
|
|
- make test
|
|
|
|
test_fatfs_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/fatfs/test_fatfs_host/
|
|
- make test
|
|
|
|
test_ldgen_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd tools/ldgen/test
|
|
- export PYTHONPATH=$PYTHONPATH:..
|
|
- python -m unittest
|
|
variables:
|
|
LC_ALL: C.UTF-8
|
|
|
|
test_reproducible_build:
|
|
extends: .host_test_template
|
|
script:
|
|
- ./tools/ci/test_reproducible_build.sh
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- "**/sdkconfig"
|
|
- "**/build*/*.bin"
|
|
- "**/build*/*.elf"
|
|
- "**/build*/*.map"
|
|
- "**/build*/flasher_args.json"
|
|
- "**/build*/*.bin"
|
|
- "**/build*/bootloader/*.bin"
|
|
- "**/build*/partition_table/*.bin"
|
|
expire_in: 1 week
|
|
|
|
test_spiffs_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/spiffs/test_spiffsgen/
|
|
- ./test_spiffsgen.py
|
|
|
|
test_fatfsgen_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/fatfs/test_fatfsgen/
|
|
- ./test_fatfsgen.py
|
|
- ./test_wl_fatfsgen.py
|
|
- ./test_fatfsparse.py
|
|
|
|
test_multi_heap_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/heap/test_multi_heap_host
|
|
- ./test_all_configs.sh
|
|
|
|
test_certificate_bundle_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd components/mbedtls/esp_crt_bundle/test_gen_crt_bundle/
|
|
- ./test_gen_crt_bundle.py
|
|
|
|
|
|
test_idf_py:
|
|
extends: .host_test_template
|
|
variables:
|
|
LC_ALL: C.UTF-8
|
|
script:
|
|
- cd ${IDF_PATH}/tools/test_idf_py
|
|
- ./test_idf_py.py
|
|
- ./test_hints.py
|
|
|
|
# Test for create virtualenv. It must be invoked from Python, not from virtualenv.
|
|
# Use docker image system python without any extra dependencies
|
|
test_idf_tools:
|
|
extends:
|
|
- .host_test_template
|
|
- .before_script_minimal
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- tools/tools.new.json
|
|
- tools/test_idf_tools/test_python_env_logs.txt
|
|
expire_in: 1 week
|
|
image:
|
|
name: $ESP_ENV_IMAGE
|
|
entrypoint: [""] # use system python3. no extra pip package installed
|
|
script:
|
|
# Tools must be downloaded for testing
|
|
- python3 ${IDF_PATH}/tools/idf_tools.py download
|
|
- cd ${IDF_PATH}/tools/test_idf_tools
|
|
- python3 -m pip install jsonschema
|
|
- python3 ./test_idf_tools.py
|
|
- python3 ./test_idf_tools_python_env.py
|
|
|
|
.test_efuse_table_on_host_template:
|
|
extends: .host_test_template
|
|
variables:
|
|
IDF_TARGET: "esp32"
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- components/efuse/${IDF_TARGET}/esp_efuse_table.c
|
|
expire_in: 1 week
|
|
script:
|
|
- cd ${IDF_PATH}/components/efuse/
|
|
- ./efuse_table_gen.py -t "${IDF_TARGET}" ${IDF_PATH}/components/efuse/${IDF_TARGET}/esp_efuse_table.csv
|
|
- git diff --exit-code -- ${IDF_TARGET}/esp_efuse_table.c || { echo 'Differences found for ${IDF_TARGET} target. Please run idf.py efuse-common-table and commit the changes.'; exit 1; }
|
|
- cd ${IDF_PATH}/components/efuse/test_efuse_host
|
|
- ./efuse_tests.py
|
|
|
|
test_efuse_table_on_host_esp32:
|
|
extends: .test_efuse_table_on_host_template
|
|
|
|
test_efuse_table_on_host_esp32s2:
|
|
extends: .test_efuse_table_on_host_template
|
|
variables:
|
|
IDF_TARGET: esp32s2
|
|
|
|
test_efuse_table_on_host_esp32s3:
|
|
extends: .test_efuse_table_on_host_template
|
|
variables:
|
|
IDF_TARGET: esp32s3
|
|
|
|
test_efuse_table_on_host_esp32c3:
|
|
extends: .test_efuse_table_on_host_template
|
|
variables:
|
|
IDF_TARGET: esp32c3
|
|
|
|
test_efuse_table_on_host_esp32h2:
|
|
extends: .test_efuse_table_on_host_template
|
|
variables:
|
|
IDF_TARGET: esp32h2
|
|
|
|
test_efuse_table_on_host_esp32c6:
|
|
extends: .test_efuse_table_on_host_template
|
|
variables:
|
|
IDF_TARGET: esp32c6
|
|
|
|
test_logtrace_proc:
|
|
extends: .host_test_template
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- tools/esp_app_trace/test/logtrace/output
|
|
- tools/esp_app_trace/test/logtrace/.coverage
|
|
expire_in: 1 week
|
|
script:
|
|
- cd ${IDF_PATH}/tools/esp_app_trace/test/logtrace
|
|
- ./test.sh
|
|
|
|
test_sysviewtrace_proc:
|
|
extends: .host_test_template
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- tools/esp_app_trace/test/sysview/output
|
|
- tools/esp_app_trace/test/sysview/.coverage
|
|
expire_in: 1 week
|
|
script:
|
|
- cd ${IDF_PATH}/tools/esp_app_trace/test/sysview
|
|
- ./test.sh
|
|
|
|
test_mkdfu:
|
|
extends: .host_test_template
|
|
variables:
|
|
LC_ALL: C.UTF-8
|
|
script:
|
|
- cd ${IDF_PATH}/tools/test_mkdfu
|
|
- ./test_mkdfu.py
|
|
|
|
test_mkuf2:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd ${IDF_PATH}/tools/test_mkuf2
|
|
- ./test_mkuf2.py
|
|
|
|
test_sbom:
|
|
extends:
|
|
- .host_test_template
|
|
- .rules:patterns:sbom
|
|
script:
|
|
- cd ${IDF_PATH}/tools/test_sbom
|
|
- pytest
|
|
|
|
test_autocomplete:
|
|
extends:
|
|
- .host_test_template
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- ${IDF_PATH}/*.out
|
|
expire_in: 1 week
|
|
script:
|
|
- ${IDF_PATH}/tools/ci/test_autocomplete.py
|
|
|
|
test_detect_python:
|
|
extends:
|
|
- .host_test_template
|
|
script:
|
|
- cd ${IDF_PATH}
|
|
- shellcheck -s sh tools/detect_python.sh
|
|
- shellcheck -s bash tools/detect_python.sh
|
|
- shellcheck -s dash tools/detect_python.sh
|
|
- "bash -c '. tools/detect_python.sh && echo Our Python: ${ESP_PYTHON?Python is not set}'"
|
|
- "dash -c '. tools/detect_python.sh && echo Our Python: ${ESP_PYTHON?Python is not set}'"
|
|
- "zsh -c '. tools/detect_python.sh && echo Our Python: ${ESP_PYTHON?Python is not set}'"
|
|
- "fish -c 'source tools/detect_python.fish && echo Our Python: $ESP_PYTHON'"
|
|
|
|
test_split_path_by_spaces:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd ${IDF_PATH}/tools
|
|
- python -m unittest split_paths_by_spaces.py
|
|
|
|
test_mqtt_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd ${IDF_PATH}/components/mqtt/esp-mqtt/host_test
|
|
- idf.py build
|
|
- LSAN_OPTIONS=verbosity=1:log_threads=1 build/host_mqtt_client_test.elf
|
|
|
|
test_transport_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd ${IDF_PATH}/components/tcp_transport/host_test
|
|
- idf.py build
|
|
- LSAN_OPTIONS=verbosity=1:log_threads=1 build/host_tcp_transport_test.elf
|
|
|
|
test_sockets_on_host:
|
|
extends: .host_test_template
|
|
script:
|
|
# test the tcp-client example with system sockets
|
|
- cd ${IDF_PATH}/examples/protocols/sockets/tcp_client
|
|
- echo 'CONFIG_EXAMPLE_IPV4_ADDR="127.0.0.1"' >> sdkconfig.defaults
|
|
- idf.py --preview set-target linux
|
|
- idf.py build
|
|
- timeout 5 ./build/tcp_client.elf >test.log || true
|
|
- grep "Socket unable to connect" test.log
|
|
# test the udp-client example with lwip sockets
|
|
- cd ${IDF_PATH}/examples/protocols/sockets/udp_client
|
|
- echo 'CONFIG_EXAMPLE_IPV4_ADDR="127.0.0.1"' >> sdkconfig.defaults
|
|
- idf.py --preview set-target linux
|
|
- idf.py build
|
|
- timeout 5 ./build/udp_client.elf >test.log || true
|
|
- grep "Message sent" test.log
|
|
|
|
test_eh_frame_parser:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd ${IDF_PATH}/components/esp_system/test_eh_frame_parser
|
|
- make
|
|
- ./eh_frame_test
|
|
|
|
test_gen_soc_caps_kconfig:
|
|
extends: .host_test_template
|
|
script:
|
|
- cd ${IDF_PATH}/tools/gen_soc_caps_kconfig/
|
|
- ./test/test_gen_soc_caps_kconfig.py
|
|
|
|
test_pytest_qemu:
|
|
extends:
|
|
- .host_test_template
|
|
- .before_script_build_jobs
|
|
image: $QEMU_IMAGE
|
|
artifacts:
|
|
when: always
|
|
paths:
|
|
- XUNIT_RESULT.xml
|
|
- pytest_embedded_log/
|
|
reports:
|
|
junit: XUNIT_RESULT.xml
|
|
expire_in: 1 week
|
|
script:
|
|
- run_cmd python tools/ci/ci_build_apps.py . -vv
|
|
--target esp32
|
|
--pytest-apps
|
|
-m qemu
|
|
- retry_failed git clone $KNOWN_FAILURE_CASES_REPO known_failure_cases
|
|
- pytest
|
|
--target esp32
|
|
-m qemu
|
|
--embedded-services idf,qemu
|
|
--junitxml=XUNIT_RESULT.xml
|
|
--known-failure-cases-file known_failure_cases/known_failure_cases.txt
|
|
|
|
test_pytest_linux:
|
|
extends:
|
|
- .host_test_template
|
|
- .before_script_build_jobs
|
|
artifacts:
|
|
when: always
|
|
paths:
|
|
- XUNIT_RESULT.xml
|
|
- pytest_embedded_log/
|
|
reports:
|
|
junit: XUNIT_RESULT.xml
|
|
expire_in: 1 week
|
|
script:
|
|
- run_cmd python tools/ci/ci_build_apps.py components examples tools/test_apps -vv
|
|
--target linux
|
|
--pytest-apps
|
|
-m host_test
|
|
- retry_failed git clone $KNOWN_FAILURE_CASES_REPO known_failure_cases
|
|
- run_cmd pytest --target linux -m host_test --junitxml=XUNIT_RESULT.xml
|
|
--known-failure-cases-file known_failure_cases/known_failure_cases.txt
|