Skip to content

Rewrite the shared Kconfig header when following M5Unit-NFC #5

Rewrite the shared Kconfig header when following M5Unit-NFC

Rewrite the shared Kconfig header when following M5Unit-NFC #5

name: Build(esp-idf-native)
on:
push:
tags-ignore:
- '*.*.*'
- 'v*.*.*'
branches:
- '*'
paths:
- 'src/**.cpp'
- 'src/**.hpp'
- 'src/**.h'
- 'src/**.c'
- 'CMakeLists.txt'
- 'idf_component.yml'
- 'examples/UnitUnified/**.cpp'
- 'examples/UnitUnified/**.hpp'
- 'examples/UnitUnified/**.h'
- 'examples/UnitUnified/**.c'
- 'examples/UnitUnified/**/CMakeLists.txt'
- 'examples/UnitUnified/**/Kconfig.projbuild'
- 'examples/UnitUnified/common/**'
- '.github/workflows/esp-idf-build-check.yml'
pull_request:
paths:
- 'src/**.cpp'
- 'src/**.hpp'
- 'src/**.h'
- 'src/**.c'
- 'CMakeLists.txt'
- 'idf_component.yml'
- 'examples/UnitUnified/**.cpp'
- 'examples/UnitUnified/**.hpp'
- 'examples/UnitUnified/**.h'
- 'examples/UnitUnified/**.c'
- 'examples/UnitUnified/**/CMakeLists.txt'
- 'examples/UnitUnified/**/Kconfig.projbuild'
- 'examples/UnitUnified/common/**'
- '.github/workflows/esp-idf-build-check.yml'
workflow_dispatch:
defaults:
run:
shell: bash
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
# Cross design: variant coverage on esp32s3, chip coverage on the other SoCs with the default
# I2C variant (UnitRFID2). The M5Unit-RFID driver (WS1850S) is exercised by UnitRFID2 (GROVE I2C)
# and the M5Dial built-in WS1850S (In_I2C, ESP32-S3 only); UnitNFC / CapCC1101 select the
# ST25R3916 (M5Unit-NFC) path and are not built here. RFID has no Tab5-specific example, so
# esp32p4 (Tab5) is folded into chip coverage rather than a separate Tab5 job.
#
# UHF-RFID (JRD-4035, UART) is a separate protocol family from the I2C WS1850S/MFRC522 units above,
# with only one unit type (no Kconfig variant to select), so it does not fit the variant/chip jobs
# above and gets its own build-uhf job covering every supported SoC (incl. esp32s3, which the
# I2C jobs above do not cover for this family).
jobs:
# Variant coverage: RFID variants on esp32s3 (LCD-capable dual-core Xtensa with PSRAM; also the
# M5Dial host chip). M5Dial built-in (In_I2C) is ESP32-S3 only, so it lives here.
build-variants:
name: ${{ matrix.idf }} esp32s3 ${{ matrix.example_config.label }}
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
max-parallel: 20
matrix:
# idf boundaries: 5.1.7 = oldest legacy-driver (5.0.x dropped: M5GFX needs esp_mm added
# in 5.1), 5.4.4 = new driver/*_master.h + touch_sens.h era, 5.5.4 = latest.
idf: [v5.1.7, v5.4.4, v5.5.4]
# NFCA Detect gets UnitRFID2 (GROVE) and the M5Dial built-in WS1850S (In_I2C). NFCB Detect
# gets UnitRFID2 only (NFCB is not offered for the Dial built-in — small-antenna limit).
example_config:
- label: NFCA-Detect-UnitRFID2 (full)
example_path: examples/UnitUnified/NFCA/Detect
variant: USING_UNIT_RFID2
- label: NFCA-Detect-M5DialBuiltin (full)
example_path: examples/UnitUnified/NFCA/Detect
variant: USING_M5DIAL_BUILTIN_WS1850S
- label: NFCB-Detect-UnitRFID2 (no_dial)
example_path: examples/UnitUnified/NFCB/Detect
variant: USING_UNIT_RFID2
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Select Kconfig variant
# The example's own sdkconfig.defaults is not read (top CMakeLists points SDKCONFIG_DEFAULTS
# at common/sdkconfig.defaults). Append the choice to common/ in the CI workspace only.
run: |
echo "" >> examples/UnitUnified/common/sdkconfig.defaults
echo "CONFIG_EXAMPLE_${{ matrix.example_config.variant }}=y" >> examples/UnitUnified/common/sdkconfig.defaults
- name: ESP-IDF build
uses: espressif/esp-idf-ci-action@v1
with:
esp_idf_version: ${{ matrix.idf }}
target: esp32s3
path: ${{ matrix.example_config.example_path }}
# Chip coverage: NFCA Detect (UnitRFID2 / GROVE I2C) on every other supported SoC. esp32 = classic
# Xtensa dual-core (M5Unified touch-deprecation path). esp32c6 / esp32h2 = RISC-V single-core,
# exercises the app_main CONFIG_FREERTOS_UNICORE feedIdle branch. esp32p4 (M5Stack Tab5) =
# RISC-V dual-core; sdkconfig.defaults.esp32p4 overlay (chip-rev minimum keys) is auto-applied.
build-chips:
name: ${{ matrix.idf }} ${{ matrix.target }} NFCA-Detect-UnitRFID2
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
max-parallel: 20
matrix:
target: [esp32, esp32c6, esp32h2, esp32p4]
idf: [v5.1.7, v5.4.4, v5.5.4]
exclude:
# esp32p4 stable from IDF v5.3 (M5GFX P4 verified on 5.4/5.5). 5.1.7 not applicable.
- target: esp32p4
idf: v5.1.7
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Select Kconfig variant
run: |
echo "" >> examples/UnitUnified/common/sdkconfig.defaults
echo "CONFIG_EXAMPLE_USING_UNIT_RFID2=y" >> examples/UnitUnified/common/sdkconfig.defaults
- name: ESP-IDF build
uses: espressif/esp-idf-ci-action@v1
with:
esp_idf_version: ${{ matrix.idf }}
target: ${{ matrix.target }}
path: examples/UnitUnified/NFCA/Detect
# UHF coverage: Unit UHF-RFID (JRD-4035) is UART-based (addUART, PortC preferred / PortA
# fallback) and has no Kconfig variant (single unit type), so no "Select Kconfig variant" step
# is needed here. Built across every supported SoC (incl. esp32s3) to catch UART wiring
# differences per chip.
build-uhf:
name: ${{ matrix.idf }} ${{ matrix.target }} UHF-Detect
runs-on: ubuntu-latest
timeout-minutes: 30
strategy:
fail-fast: false
max-parallel: 20
matrix:
target: [esp32, esp32s3, esp32c6, esp32h2, esp32p4]
idf: [v5.1.7, v5.4.4, v5.5.4]
exclude:
# esp32p4 stable from IDF v5.3 (M5GFX P4 verified on 5.4/5.5). 5.1.7 not applicable.
- target: esp32p4
idf: v5.1.7
steps:
- name: Checkout
uses: actions/checkout@v4
- name: ESP-IDF build
uses: espressif/esp-idf-ci-action@v1
with:
esp_idf_version: ${{ matrix.idf }}
target: ${{ matrix.target }}
path: examples/UnitUnified/UHF/Detect