66
77jobs :
88 build :
9+ name : Build
910 strategy :
11+ fail-fast : false
1012 matrix :
1113 idf_ver : ["release-v5.1", "release-v5.2", "release-v5.3", "release-v5.4", "release-v5.5", "latest"]
12- fail-fast : false
1314 runs-on : ubuntu-latest
1415 container : espressif/idf:${{ matrix.idf_ver }}
16+ env :
17+ IDF_COMP_MAN_VER : " 2.4.3"
18+ IDF_BUILD_APPS_VER : " 2.13.1"
19+ CONFIG_PATH : ${{ github.workspace }}/.github/ci/.build_and_run_idf_examples_config.toml
1520 steps :
1621 - uses : actions/checkout@v4
1722 - name : Install Python dependencies
1823 shell : bash
1924 run : |
2025 . ${IDF_PATH}/export.sh
21- pip install --no-cache-dir idf-component-manager>=2.1.2 idf-build-apps==2.4.3 pyyaml --upgrade
26+ pip install --no-cache-dir idf-component-manager>=${{ env.IDF_COMP_MAN_VER }} idf-build-apps==${{ env.IDF_BUILD_APPS_VER }} pyyaml --upgrade
2227 - name : Build Network USB related examples
2328 shell : bash
2429 run : |
2530 . ${IDF_PATH}/export.sh
31+ # Hint: To build network example we just use default config and network build rules provided by IDF
2632 export EXAMPLES_PATH="${IDF_PATH}/examples/network/sta2eth"
2733 export MANIFEST_FILE="${IDF_PATH}/examples/network/.build-test-rules.yml"
28- idf-build-apps find --path ${EXAMPLES_PATH}/ --target esp32s2 --manifest-file ${MANIFEST_FILE}
29- idf-build-apps build --path ${EXAMPLES_PATH}/ --target esp32s2 --manifest-file ${MANIFEST_FILE}
34+ python .github/ci/override_managed_component.py tinyusb . ${EXAMPLES_PATH}
35+ idf-build-apps find -p ${EXAMPLES_PATH} -t esp32s2 --manifest-files ${MANIFEST_FILE} --manifest-rootpath ${IDF_PATH}
36+ idf-build-apps build -p ${EXAMPLES_PATH} -t esp32s2 --manifest-files ${MANIFEST_FILE} --manifest-rootpath ${IDF_PATH}
3037 - name : Build USB Device examples
3138 shell : bash
3239 run : |
3340 . ${IDF_PATH}/export.sh
34- export EXAMPLES_PATH="${IDF_PATH}/examples/peripherals/usb/device"
35- export MANIFEST_FILE="${IDF_PATH}/examples/peripherals/.build-test-rules.yml"
36- python .github/ci/override_managed_component.py tinyusb . ${EXAMPLES_PATH}/tusb_*
37- idf-build-apps find --path ${EXAMPLES_PATH}/ --recursive --target esp32s2 --manifest-file ${MANIFEST_FILE}
38- idf-build-apps build --path ${EXAMPLES_PATH}/ --recursive --target esp32s2 --manifest-file ${MANIFEST_FILE}
41+ python .github/ci/override_managed_component.py tinyusb . ${IDF_PATH}/examples/peripherals/usb/device/tusb_*
42+ idf-build-apps find --config-file ${CONFIG_PATH} --manifest-rootpath ${IDF_PATH}
43+ idf-build-apps build --config-file ${CONFIG_PATH} --manifest-rootpath ${IDF_PATH}
3944 - uses : actions/upload-artifact@v4
45+ env :
46+ IDF_ROOT : " /opt/esp/idf"
4047 with :
41- # We upload only the USB Device example binaries to run them on the target
42- name : usb_device_tusb_apps_bin_ ${{ matrix.idf_ver }}
48+ # We upload only USB Device example binaries to run them on the target
49+ name : usb_device_examples_bin_ ${{ matrix.idf_ver }}
4350 path : |
44- /opt/esp/idf/examples/peripherals/usb/device/tusb_*/build /bootloader/bootloader.bin
45- /opt/esp/idf/examples/peripherals/usb/device/tusb_*/build /partition_table/partition-table.bin
46- /opt/esp/idf/examples/peripherals/usb/device/tusb_*/build /tusb_*.bin
47- /opt/esp/idf/examples/peripherals/usb/device/tusb_*/build /tusb_*.elf
48- /opt/esp/idf/examples/peripherals/usb/device/tusb_*/build /flasher_args.json
49- /opt/esp/idf/examples/peripherals/usb/device/tusb_*/build /config/sdkconfig.json
51+ ${{ env.IDF_ROOT }}/**/build_esp* /bootloader/bootloader.bin
52+ ${{ env.IDF_ROOT }}/**/build_esp* /partition_table/partition-table.bin
53+ ${{ env.IDF_ROOT }}/**/build_esp* /tusb_*.bin
54+ ${{ env.IDF_ROOT }}/**/build_esp* /tusb_*.elf
55+ ${{ env.IDF_ROOT }}/**/build_esp* /flasher_args.json
56+ ${{ env.IDF_ROOT }}/**/build_esp* /config/sdkconfig.json
5057 if-no-files-found : error
5158 run-target :
52- name : Run USB Device examples
59+ name : Run
60+ # Disable the job in forks
5361 if : ${{ github.repository_owner == 'espressif' }}
5462 needs : build
5563 strategy :
5664 fail-fast : false
5765 matrix :
66+ # Run esp-idf examples, starting from v5.3
5867 idf_ver : ["release-v5.3", "release-v5.4", "release-v5.5" , "latest"]
5968 idf_target : ["esp32s2"]
6069 runner_tag : ["usb_device"]
6170 runs-on : [self-hosted, linux, docker, "${{ matrix.idf_target }}", "${{ matrix.runner_tag }}"]
6271 container :
72+ # We run on espressif/idf image as we need the code of examples to be present to run pytest
6373 image : espressif/idf:${{ matrix.idf_ver }}
6474 options : --privileged --device-cgroup-rule="c 188:* rmw" --device-cgroup-rule="c 166:* rmw"
75+ env :
76+ # We do not use ${IDF_PATH} here, because it is not available during download of artifacts step
77+ IDF_ROOT : " /opt/esp/idf"
78+ IDF_EXAMPLES_PATH : " ${IDF_PATH}/examples/peripherals/usb/device"
6579 steps :
6680 - name : ⚙️ Install System tools
6781 run : |
@@ -71,16 +85,15 @@ jobs:
7185 env :
7286 PIP_EXTRA_INDEX_URL : " https://dl.espressif.com/pypi/"
7387 run : |
74- cd ${IDF_PATH}
75- . ./export.sh
88+ . ${IDF_PATH}/export.sh
7689 pip install --no-cache-dir --only-binary cryptography pytest-embedded pytest-embedded-serial-esp pytest-embedded-jtag pytest-embedded-idf pyserial pyusb python-gitlab minio idf-build-apps idf_ci pytest_ignore_test_results pytest-timeout netifaces
7790 - uses : actions/download-artifact@v4
7891 with :
79- name : usb_device_tusb_apps_bin_${{ matrix.idf_ver }}
80- path : /opt/esp/idf/examples/peripherals/usb/device
81- - name : Run USB Test App on target
92+ # Need to set the path manually.
93+ # The examples were built on a system files, which are not under the repository.
94+ name : usb_device_examples_bin_${{ matrix.idf_ver }}
95+ path : ${{ env.IDF_ROOT }}
96+ - name : Run on target
8297 run : |
83- cd ${IDF_PATH}
84- . ./export.sh
85- export EXAMPLES_PATH="${IDF_PATH}/examples/peripherals/usb/device"
86- pytest ${EXAMPLES_PATH} --target ${{ matrix.idf_target }} -m ${{ matrix.runner_tag }} --ignore-result-cases=*ncm_example
98+ . ${IDF_PATH}/export.sh
99+ pytest ${{ env.IDF_EXAMPLES_PATH }} --target ${{ matrix.idf_target }} -m ${{ matrix.runner_tag }} --ignore-result-cases=*ncm_example --build-dir=build_${{ matrix.idf_target }}
0 commit comments