Skip to content

feat(m5stack-tab5): optional audio playback / recording and DPI DMA2D #2573

feat(m5stack-tab5): optional audio playback / recording and DPI DMA2D

feat(m5stack-tab5): optional audio playback / recording and DPI DMA2D #2573

Workflow file for this run

name: Build
on:
pull_request:
branches: [main]
# ready_for_review is included so that marking a draft PR "Ready for
# review" triggers a build (the draft guard below skips draft PRs);
# it is not in GitHub's default set (opened/synchronize/reopened).
types: [opened, synchronize, reopened, ready_for_review]
paths:
- 'components/**'
- 'external/**'
- '.github/workflows/build.yml'
- '!**/idf_component.yml'
- '!**/README.md'
# Non-build content inside components never affects the ESP example
# builds: hosted web apps (docs pipeline), interop harnesses (their own
# workflows), host-side python packages, host-only unit tests, and
# markdown docs. Skip the full build matrix when a change touches only
# these. (paths negations: last match wins, so these come after the
# components/** include.)
- '!components/*/web/**'
- '!components/*/interop/**'
- '!components/*/python/**'
- '!components/*/test/**'
- '!components/**/*.md'
# Least-privilege default: these jobs only check out the repo and build/upload
# artifacts, so read-only access to repository contents is sufficient.
permissions:
contents: read
# Supersede in-progress runs: a new commit on the same PR cancels the earlier,
# now-stale build. Keyed by the workflow (so it never cross-cancels other
# workflows) + the PR number, which is globally unique - unlike the head branch
# name, two fork PRs can't collide on it. For non-PR events (push, release) we
# fall back to github.run_id, which is unique per run, so those runs each get
# their own group and never serialize or cancel each other.
# cancel-in-progress is gated to pull_request events only so that push-to-main
# runs are never cancelled.
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
build:
# Skip build CI for draft PRs; still runs on push-to-main and non-draft PRs.
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
runs-on: ubuntu-latest
continue-on-error: true
strategy:
matrix:
test:
- path: 'components/adc/example'
target: esp32
- path: 'components/adc/example'
target: esp32s3
- path: 'components/adc/example'
target: esp32p4
- path: 'components/adc/example'
target: esp32c6
- path: 'components/adrc/example'
target: esp32
- path: 'components/ads1x15/example'
target: esp32
- path: 'components/ads7138/example'
target: esp32s3
- path: 'components/adxl345/example'
target: esp32s3
- path: 'components/as5600/example'
target: esp32s3
- path: 'components/at581x/example'
target: esp32s3
- path: 'components/aw9523/example'
target: esp32
- path: 'components/basicmicro/example'
target: esp32
- path: 'components/mcp266/example'
target: esp32
- path: 'components/mcp266/webapp_example'
target: esp32s3
command: 'IDF_COMPONENT_MANAGER=0 idf.py build'
- path: 'components/bdc_driver/example'
target: esp32s3
- path: 'components/binary-log/example'
target: esp32s3
- path: 'components/bldc_current_sense/example'
target: esp32s3
- path: 'components/bldc_haptics/example'
target: esp32s3
command: 'IDF_COMPONENT_MANAGER=0 idf.py build'
- path: 'components/bldc_motor/example'
target: esp32s3
- path: 'components/ble_gatt_server/example'
target: esp32s3
- path: 'components/bm8563/example'
target: esp32
- path: 'components/bmi270/example'
target: esp32p4
- path: 'components/bno055/example'
target: esp32p4
- path: 'components/bq27220/example'
target: esp32
- path: 'components/button/example'
target: esp32
- path: 'components/byte90/example'
target: esp32s3
- path: 'components/canopen/can_bridge_example'
target: esp32s3
command: 'IDF_COMPONENT_MANAGER=0 idf.py build'
- path: 'components/canopen/can_bridge_example'
target: esp32s3
command: >-
IDF_COMPONENT_MANAGER=0 idf.py
-DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.defaults.simulated" build
- path: 'components/canopen/example'
target: esp32
- path: 'components/chsc6x/example'
target: esp32s3
- path: 'components/cdr/example'
target: esp32
- path: 'components/cli/example'
target: esp32
- path: 'components/cobs/example'
target: esp32s3
- path: 'components/color/example'
target: esp32
- path: 'components/controller/example'
target: esp32s3
- path: 'components/coredump/example'
target: esp32s3
command: 'IDF_COMPONENT_MANAGER=0 idf.py build'
- path: 'components/cst816/example'
target: esp32s3
- path: 'components/csv/example'
target: esp32
- path: 'components/desktop/example'
target: esp32s3
command: 'IDF_COMPONENT_MANAGER=0 idf.py build'
- path: 'components/dispatcher/example'
target: esp32
- path: 'components/display_drivers/example'
target: esp32
- path: 'components/dns_server/example'
target: esp32s3
- path: 'components/drv2605/example'
target: esp32
- path: 'components/encoder/example'
target: esp32
- path: 'components/esp32-p4-eth/example'
target: esp32p4
- path: 'components/esp32-p4-function-ev-board/example'
target: esp32p4
- path: 'components/esp32-p4-module-dev-kit/example'
target: esp32p4
- path: 'components/esp32-p4-nano/example'
target: esp32p4
- path: 'components/esp32-p4-wifi6-dev-kit/example'
target: esp32p4
- path: 'components/esp32-p4-wifi6-poe-eth/example'
target: esp32p4
- path: 'components/esp32-timer-cam/example'
target: esp32
- path: 'components/esp-box/example'
target: esp32s3
- path: 'components/ethernet/example'
target: esp32
- path: 'components/event_manager/example'
target: esp32
- path: 'components/expressive_eyes/example'
target: esp32s3
- path: 'components/file_system/example'
target: esp32
- path: 'components/filters/example'
target: esp32
- path: 'components/ftp/example'
target: esp32
- path: 'components/ft5x06/example'
target: esp32s3
- path: 'components/gfps_service/example'
target: esp32s3
- path: 'components/gps/example'
target: esp32s3
- path: 'components/gt911/example'
target: esp32s3
- path: 'components/hid-rp/example'
target: esp32s3
- path: 'components/hid_service/example'
target: esp32s3
# build variants of the i2c example for the different configurations to
# ensure they're all built and tested
- path: 'components/i2c/example'
target: esp32
command: idf.py -DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.defaults.legacy_api" build
- path: 'components/i2c/example'
target: esp32
command: idf.py -DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.defaults.new_api" build
- path: 'components/icm20948/example'
target: esp32s3
- path: 'components/icm42607/example'
target: esp32s3
- path: 'components/ina226/example'
target: esp32p4
- path: 'components/interrupt/example'
target: esp32s3
- path: 'components/iperf_menu/example'
target: esp32s3
- path: 'components/joystick/example'
target: esp32
- path: 'components/kts1622/example'
target: esp32
- path: 'components/led/example'
target: esp32
- path: 'components/led_strip/example'
target: esp32
- path: 'components/lilygo-t5-47/example'
target: esp32s3
- path: 'components/logger/example'
target: esp32
- path: 'components/lp5817/example'
target: esp32
- path: 'components/lsm6dso/example'
target: esp32s3
- path: 'components/m5stack-cardputer/example'
target: esp32s3
- path: 'components/m5stack-tab5/example'
target: esp32p4
- path: 'components/math/example'
target: esp32
- path: 'components/matouch-rotary-display/example'
target: esp32s3
- path: 'components/max1704x/example'
target: esp32
- path: 'components/monitor/example'
target: esp32
- path: 'components/motorgo-axis/example'
target: esp32s3
- path: 'components/motorgo-mini/example'
target: esp32s3
- path: 'components/motorgo-plink/example'
target: esp32s3
- path: 'components/mcp23x17/example'
target: esp32s3
- path: 'components/meshtastic/example'
target: esp32s3
- path: 'components/mt6701/example'
target: esp32s3
- path: 'components/neopixel/example'
target: esp32s3
- path: 'components/nvs/example'
target: esp32s3
- path: 'components/persistent_data/example'
target: esp32s3
- path: 'components/odrive_ascii/example'
target: esp32
- path: 'components/odrive_native/example'
target: esp32
- path: 'components/odrive_native/usb_example'
target: esp32s3
- path: 'components/ota/example'
target: esp32s3
command: 'IDF_COMPONENT_MANAGER=0 idf.py build'
- path: 'components/pca9535/example'
target: esp32s3
- path: 'components/pcf85063/example'
target: esp32s3
- path: 'components/pi4ioe5v/example'
target: esp32
- path: 'components/pid/example'
target: esp32
- path: 'components/ping/example'
target: esp32s3
- path: 'components/provisioning/example'
target: esp32s3
- path: 'components/qmi8658/example'
target: esp32s3
- path: 'components/qtpy/example'
target: esp32
- path: 'components/qtpy/example'
target: esp32s3
- path: 'components/qwiicnes/example'
target: esp32
- path: 'components/remote_debug/example'
target: esp32s3
- path: 'components/rmt/example'
target: esp32s3
- path: 'components/rtps/example'
target: esp32
- path: 'components/rtsp/example'
target: esp32
- path: 'components/runqueue/example'
target: esp32
- path: 'components/rx8130ce/example'
target: esp32s3
- path: 'components/sdcard/example'
target: esp32s3
- path: 'components/seeed-studio-round-display/example'
target: esp32s3
- path: 'components/serialization/example'
target: esp32
- path: 'components/smartpanlee-sc01-plus/example'
target: esp32s3
- path: 'components/socket/example'
target: esp32
- path: 'components/spi/example'
target: esp32s3
- path: 'components/st25dv/example'
target: esp32s3
- path: 'components/st7123touch/example'
target: esp32s3
- path: 'components/state_machine/example'
target: esp32
# this example GENERATES its state machine from Complex.json
# at configure time, and the esp-idf image has no node
command: >-
node_major=$(node -v 2>/dev/null | sed -E "s/^v([0-9]+).*/\1/");
if [ "${node_major:-0}" -lt 18 ]; then
apt-get update &&
apt-get install -y ca-certificates curl gnupg &&
install -d -m 0755 /etc/apt/keyrings &&
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key |
gpg --dearmor --yes -o /etc/apt/keyrings/nodesource.gpg &&
chmod a+r /etc/apt/keyrings/nodesource.gpg &&
printf "%s\n" "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" |
tee /etc/apt/sources.list.d/nodesource.list >/dev/null &&
apt-get update &&
apt-get install -y nodejs;
fi &&
IDF_COMPONENT_MANAGER=0 idf.py build
- path: 'components/stream_frame/example'
target: esp32
- path: 'components/switch2_pro/example'
target: esp32s3
- path: 'components/switch2_pro/example'
target: esp32c6
- path: 'components/switch_pro/example'
target: esp32s3
- path: 'components/sx126x/example'
target: esp32s3
- path: 'components/system/example'
target: esp32s3
command: 'IDF_COMPONENT_MANAGER=0 idf.py build'
- path: 'components/t-deck/example'
target: esp32s3
- path: 'components/t-dongle-s3/example'
target: esp32s3
- path: 'components/t_keyboard/example'
target: esp32s3
- path: 'components/tabulate/example'
target: esp32
- path: 'components/task/example'
target: esp32
- path: 'components/telemetry/example'
target: esp32s3
command: 'IDF_COMPONENT_MANAGER=0 idf.py build'
- path: 'components/thermistor/example'
target: esp32
- path: 'components/thread_pool/example'
target: esp32
- path: 'components/timer/example'
target: esp32
- path: 'components/trajectory_planner/example'
target: esp32
- path: 'components/touch/example'
target: esp32
- path: 'components/tla2528/example'
target: esp32
- path: 'components/tt21100/example'
target: esp32s3
- path: 'components/twai/example'
target: esp32
- path: 'components/usb_device/example'
target: esp32s3
command: 'IDF_COMPONENT_MANAGER=0 idf.py build'
- path: 'components/usb_device/msc_example'
target: esp32s3
command: 'IDF_COMPONENT_MANAGER=0 idf.py build'
- path: 'components/usb_device/xinput_example'
target: esp32s3
command: 'IDF_COMPONENT_MANAGER=0 idf.py build'
- path: 'components/usb_host/example'
target: esp32s3
- path: 'components/usb_host/tab5_example'
target: esp32p4
- path: 'components/vl53l/example'
target: esp32s3
- path: 'components/vl53l/vl53l5cx_example'
target: esp32s3
- path: 'components/vl53l/vl53l5cx_webapp_example'
target: esp32s3
command: 'IDF_COMPONENT_MANAGER=0 idf.py build'
- path: 'components/wdi/ble_example'
target: esp32s3
- path: 'components/wdi/ble_central_example'
target: esp32s3
- path: 'components/wdi/usb_example'
target: esp32s3
command: 'IDF_COMPONENT_MANAGER=0 idf.py build'
- path: 'components/wdi/usb_host_example'
target: esp32s3
- path: 'components/wifi/example'
target: esp32
- path: 'components/wrover-kit/example'
target: esp32
- path: 'components/ws-s3-geek/example'
target: esp32s3
- path: 'components/ws-s3-lcd-1-47/example'
target: esp32s3
- path: 'components/ws-s3-touch/example'
target: esp32s3
- path: 'components/xiao-esp32s3-sense/example'
target: esp32s3
steps:
- name: Checkout repo
uses: actions/checkout@v7
with:
submodules: 'recursive'
- name: Build Examples
uses: espressif/esp-idf-ci-action@v1
with:
# Default to ESP-IDF v6.1. Individual matrix entries can still pin a
# different IDF via matrix.test.idf_version if an example ever needs one.
esp_idf_version: ${{ matrix.test.idf_version || 'v6.1' }}
target: ${{ matrix.test.target }}
path: ${{ matrix.test.path }}
command: ${{ matrix.test.command || 'idf.py build' }}