From 71767b785254276672b257db950c039afdb981fb Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 11:43:35 +0100 Subject: [PATCH 01/15] ci: discover and build custom PlatformIO envs from usermods platformio_override.ini.sample files Adds two new jobs to the Usermod CI workflow to address issue #5648: - get_custom_build_envs: scans all usermods/*/platformio_override.ini.sample files and emits a matrix of {usermod, env} pairs by extracting [env:*] section names - build_custom: builds each discovered environment by copying the .ini.sample as platformio_override.ini and running pio run -e This allows PRs introducing usermods with custom build environments (such as pixels_dice_tray) to have those environments validated in CI without committing platformio_override.ini to the repository. --- .github/workflows/usermods.yml | 62 +++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/.github/workflows/usermods.yml b/.github/workflows/usermods.yml index 24eda32ece..63f0100c5e 100644 --- a/.github/workflows/usermods.yml +++ b/.github/workflows/usermods.yml @@ -74,4 +74,64 @@ jobs: cat platformio_override.ini - name: Build firmware - run: pio run -e ${{ matrix.environment }} + run: pio run -e ${{ matrix.environment }} + + + get_custom_build_envs: + name: Gather Custom Build Environments + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Find usermods with custom build environments + id: custom_envs + run: | + result='[]' + for sample in $(find usermods/ -name "platformio_override.ini.sample" | sort); do + usermod=$(dirname "$sample" | xargs basename) + envs=$(grep -E '^\[env:[^]]+\]' "$sample" | sed 's/^\[env:\(.*\)\]$/\1/') + for env in $envs; do + result=$(echo "$result" | jq --arg u "$usermod" --arg e "$env" '. + [{usermod: $u, env: $e}]') + done + done + echo "matrix=$(echo "$result" | jq -c '.')" >> $GITHUB_OUTPUT + outputs: + matrix: ${{ steps.custom_envs.outputs.matrix }} + + + build_custom: + name: Build Custom Env (${{ matrix.usermod }} / ${{ matrix.env }}) + runs-on: ubuntu-latest + needs: get_custom_build_envs + if: needs.get_custom_build_envs.outputs.matrix != '[]' + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(needs.get_custom_build_envs.outputs.matrix) }} + steps: + - uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version-file: '.nvmrc' + cache: 'npm' + - run: npm ci + - name: Cache PlatformIO + uses: actions/cache@v4 + with: + path: | + ~/.platformio/.cache + ~/.buildcache + build_output + key: pio-${{ runner.os }}-${{ matrix.env }}-${{ hashFiles('platformio.ini', 'pio-scripts/output_bins.py') }}-${{ hashFiles('wled00/**', 'usermods/**') }} + restore-keys: pio-${{ runner.os }}-${{ matrix.env }}-${{ hashFiles('platformio.ini', 'pio-scripts/output_bins.py') }}- + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + cache: 'pip' + - name: Install PlatformIO + run: pip install -r requirements.txt + - name: Apply custom build environment + run: cp -v "usermods/${{ matrix.usermod }}/platformio_override.ini.sample" platformio_override.ini + - name: Build firmware + run: pio run -e ${{ matrix.env }} From badfcfc8e7644f39ea1bca34e481d94300b471a5 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 11:56:41 +0100 Subject: [PATCH 02/15] ci: consolidate usermod build envs into per-usermod platformio_override.ini.sample files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move usermod-specific PlatformIO environments out of the root platformio_override.sample.ini and into dedicated files within each usermod's own directory, making them discoverable by CI: - Moved elekstube_ips env → usermods/EleksTube_IPS/ - Moved esp32dev_usermod_RF433 env → usermods/usermod_v2_RF433/ Extracted build environments from README docs into new sample files for: AHT10_v2, BME280_v2, INA226_v2, LD2410_v2 (fix LD2140_v2 typo), LDR_Dusk_Dawn_v2 (fix invalid inline comment), MAX17048_v2, Temperature, mpu6050_imu, sht (esp32 + d1_mini envs), usermod_v2_klipper_percentage (convert -D flag to custom_usermods) These files are now picked up by the get_custom_build_envs / build_custom CI jobs added in the previous commit. --- platformio_override.sample.ini | 31 ++---------------- .../AHT10_v2/platformio_override.ini.sample | 9 ++++++ .../BME280_v2/platformio_override.ini.sample | 9 ++++++ .../platformio_override.ini.sample | 32 +++++++++++++++++++ .../INA226_v2/platformio_override.ini.sample | 23 +++++++++++++ .../LD2410_v2/platformio_override.ini.sample | 9 ++++++ .../platformio_override.ini.sample | 10 ++++++ .../platformio_override.ini.sample | 9 ++++++ .../platformio_override.ini.sample | 10 ++++++ .../platformio_override.ini.sample | 10 ++++++ usermods/sht/platformio_override.ini.sample | 13 ++++++++ .../platformio_override.ini.sample | 11 +++++++ .../platformio_override.ini.sample | 10 ++++++ 13 files changed, 157 insertions(+), 29 deletions(-) create mode 100644 usermods/AHT10_v2/platformio_override.ini.sample create mode 100644 usermods/BME280_v2/platformio_override.ini.sample create mode 100644 usermods/EleksTube_IPS/platformio_override.ini.sample create mode 100644 usermods/INA226_v2/platformio_override.ini.sample create mode 100644 usermods/LD2410_v2/platformio_override.ini.sample create mode 100644 usermods/LDR_Dusk_Dawn_v2/platformio_override.ini.sample create mode 100644 usermods/MAX17048_v2/platformio_override.ini.sample create mode 100644 usermods/Temperature/platformio_override.ini.sample create mode 100644 usermods/mpu6050_imu/platformio_override.ini.sample create mode 100644 usermods/sht/platformio_override.ini.sample create mode 100644 usermods/usermod_v2_RF433/platformio_override.ini.sample create mode 100644 usermods/usermod_v2_klipper_percentage/platformio_override.ini.sample diff --git a/platformio_override.sample.ini b/platformio_override.sample.ini index 16e73be007..e8787e613f 100644 --- a/platformio_override.sample.ini +++ b/platformio_override.sample.ini @@ -506,42 +506,15 @@ lib_deps = ${esp8266.lib_deps} # ------------------------------------------------------------------------------ # EleksTube-IPS +# See usermods/EleksTube_IPS/platformio_override.ini.sample # ------------------------------------------------------------------------------ -[env:elekstube_ips] -extends = esp32 ;; use default esp32 platform -board = esp32dev -upload_speed = 921600 -custom_usermods = ${env:esp32dev.custom_usermods} RTC EleksTube_IPS -build_flags = ${common.build_flags} ${esp32.build_flags} -D WLED_DISABLE_BROWNOUT_DET -D WLED_DISABLE_INFRARED - -D DATA_PINS=12 - -D RLYPIN=27 - -D BTNPIN=34 - -D PIXEL_COUNTS=6 - # Display config - -D ST7789_DRIVER - -D TFT_WIDTH=135 - -D TFT_HEIGHT=240 - -D CGRAM_OFFSET - -D TFT_SDA_READ - -D TFT_MOSI=23 - -D TFT_SCLK=18 - -D TFT_DC=25 - -D TFT_RST=26 - -D SPI_FREQUENCY=40000000 - -D USER_SETUP_LOADED -monitor_filters = esp32_exception_decoder # ------------------------------------------------------------------------------ # Usermod examples # ------------------------------------------------------------------------------ -# 433MHz RF remote example for esp32dev -[env:esp32dev_usermod_RF433] -extends = env:esp32dev -custom_usermods = - ${env:esp32dev.custom_usermods} - RF433 +# 433MHz RF remote example: see usermods/usermod_v2_RF433/platformio_override.ini.sample # External usermod from a git repository. # The library's `library.json` must include `"build": {"libArchive": false}`. diff --git a/usermods/AHT10_v2/platformio_override.ini.sample b/usermods/AHT10_v2/platformio_override.ini.sample new file mode 100644 index 0000000000..56bba5aa2e --- /dev/null +++ b/usermods/AHT10_v2/platformio_override.ini.sample @@ -0,0 +1,9 @@ +# AHT10/AHT15/AHT20 temperature/humidity usermod build environment +# Copy to platformio_override.ini in the WLED root to use. + +[platformio] +default_envs = aht10_example + +[env:aht10_example] +extends = env:esp32dev +custom_usermods = ${env:esp32dev.custom_usermods} AHT10 diff --git a/usermods/BME280_v2/platformio_override.ini.sample b/usermods/BME280_v2/platformio_override.ini.sample new file mode 100644 index 0000000000..39f2f808e7 --- /dev/null +++ b/usermods/BME280_v2/platformio_override.ini.sample @@ -0,0 +1,9 @@ +# BME280_v2 usermod build environment +# Copy to platformio_override.ini in the WLED root to use. + +[platformio] +default_envs = usermod_bme280_d1_mini + +[env:usermod_bme280_d1_mini] +extends = env:d1_mini +custom_usermods = ${env:d1_mini.custom_usermods} BME280_v2 diff --git a/usermods/EleksTube_IPS/platformio_override.ini.sample b/usermods/EleksTube_IPS/platformio_override.ini.sample new file mode 100644 index 0000000000..5e761ce5f8 --- /dev/null +++ b/usermods/EleksTube_IPS/platformio_override.ini.sample @@ -0,0 +1,32 @@ +# EleksTube IPS clock build environment +# Copy to platformio_override.ini in the WLED root to use. +# +# Note: usermods/EleksTube_IPS/library.json is currently disabled. +# To enable custom_usermods support, rename library.json.disabled to library.json. + +[platformio] +default_envs = elekstube_ips + +[env:elekstube_ips] +extends = esp32 ;; use default esp32 platform +board = esp32dev +upload_speed = 921600 +custom_usermods = ${env:esp32dev.custom_usermods} RTC EleksTube_IPS +build_flags = ${common.build_flags} ${esp32.build_flags} -D WLED_DISABLE_BROWNOUT_DET -D WLED_DISABLE_INFRARED + -D DATA_PINS=12 + -D RLYPIN=27 + -D BTNPIN=34 + -D PIXEL_COUNTS=6 + # Display config + -D ST7789_DRIVER + -D TFT_WIDTH=135 + -D TFT_HEIGHT=240 + -D CGRAM_OFFSET + -D TFT_SDA_READ + -D TFT_MOSI=23 + -D TFT_SCLK=18 + -D TFT_DC=25 + -D TFT_RST=26 + -D SPI_FREQUENCY=40000000 + -D USER_SETUP_LOADED +monitor_filters = esp32_exception_decoder diff --git a/usermods/INA226_v2/platformio_override.ini.sample b/usermods/INA226_v2/platformio_override.ini.sample new file mode 100644 index 0000000000..c38f572f47 --- /dev/null +++ b/usermods/INA226_v2/platformio_override.ini.sample @@ -0,0 +1,23 @@ +# INA226 power monitor usermod build environments +# Copy to platformio_override.ini in the WLED root to use. + +[platformio] +default_envs = ina226_example + +# Minimal example — enable the usermod with default settings +[env:ina226_example] +extends = env:esp32dev +custom_usermods = ${env:esp32dev.custom_usermods} INA226 +build_flags = ${env:esp32dev.build_flags} + ; -D USERMOD_INA226_DEBUG ; uncomment to add debug status to the info modal + +# Custom calibration example — adjust constants to match your hardware +[env:ina226_custom] +extends = env:esp32dev +custom_usermods = ${env:esp32dev.custom_usermods} INA226 +build_flags = ${env:esp32dev.build_flags} + -D INA226_ENABLED_DEFAULT=true + -D INA226_SHUNT_MICRO_OHMS=2888 + -D INA226_DEFAULT_CURRENT_RANGE=10000 + -D INA226_CURRENT_OFFSET_MA=-118 + -D INA226_CHECK_INTERVAL_MS=1000 diff --git a/usermods/LD2410_v2/platformio_override.ini.sample b/usermods/LD2410_v2/platformio_override.ini.sample new file mode 100644 index 0000000000..407b14dea2 --- /dev/null +++ b/usermods/LD2410_v2/platformio_override.ini.sample @@ -0,0 +1,9 @@ +# LD2410 presence sensor usermod build environment +# Copy to platformio_override.ini in the WLED root to use. + +[platformio] +default_envs = usermod_LD2410_v2_esp32dev + +[env:usermod_LD2410_v2_esp32dev] +extends = env:esp32dev +custom_usermods = ${env:esp32dev.custom_usermods} LD2410_v2 diff --git a/usermods/LDR_Dusk_Dawn_v2/platformio_override.ini.sample b/usermods/LDR_Dusk_Dawn_v2/platformio_override.ini.sample new file mode 100644 index 0000000000..d12d73d8dc --- /dev/null +++ b/usermods/LDR_Dusk_Dawn_v2/platformio_override.ini.sample @@ -0,0 +1,10 @@ +# LDR Dusk/Dawn usermod build environment +# Copy to platformio_override.ini in the WLED root to use. + +[platformio] +default_envs = usermod_LDR_Dusk_Dawn_esp32dev + +[env:usermod_LDR_Dusk_Dawn_esp32dev] +extends = env:esp32dev +custom_usermods = ${env:esp32dev.custom_usermods} + LDR_Dusk_Dawn diff --git a/usermods/MAX17048_v2/platformio_override.ini.sample b/usermods/MAX17048_v2/platformio_override.ini.sample new file mode 100644 index 0000000000..0de0ca5fde --- /dev/null +++ b/usermods/MAX17048_v2/platformio_override.ini.sample @@ -0,0 +1,9 @@ +# MAX17048 battery fuel gauge usermod build environment +# Copy to platformio_override.ini in the WLED root to use. + +[platformio] +default_envs = usermod_max17048_d1_mini + +[env:usermod_max17048_d1_mini] +extends = env:d1_mini +custom_usermods = ${env:d1_mini.custom_usermods} MAX17048_v2 diff --git a/usermods/Temperature/platformio_override.ini.sample b/usermods/Temperature/platformio_override.ini.sample new file mode 100644 index 0000000000..3ebaeabeca --- /dev/null +++ b/usermods/Temperature/platformio_override.ini.sample @@ -0,0 +1,10 @@ +# Temperature (DS18B20) usermod build environment +# Copy to platformio_override.ini in the WLED root to use. + +[platformio] +default_envs = usermod_temperature_esp32dev + +[env:usermod_temperature_esp32dev] +extends = env:esp32dev +custom_usermods = ${env:esp32dev.custom_usermods} + Temperature diff --git a/usermods/mpu6050_imu/platformio_override.ini.sample b/usermods/mpu6050_imu/platformio_override.ini.sample new file mode 100644 index 0000000000..cc5a591f63 --- /dev/null +++ b/usermods/mpu6050_imu/platformio_override.ini.sample @@ -0,0 +1,10 @@ +# MPU-6050 IMU usermod build environment +# Copy to platformio_override.ini in the WLED root to use. + +[platformio] +default_envs = usermod_mpu6050_imu_esp32dev + +[env:usermod_mpu6050_imu_esp32dev] +extends = env:esp32dev +custom_usermods = ${env:esp32dev.custom_usermods} + mpu6050_imu diff --git a/usermods/sht/platformio_override.ini.sample b/usermods/sht/platformio_override.ini.sample new file mode 100644 index 0000000000..e9d8b8d1a5 --- /dev/null +++ b/usermods/sht/platformio_override.ini.sample @@ -0,0 +1,13 @@ +# SHT temperature/humidity sensor usermod build environments +# Copy to platformio_override.ini in the WLED root to use. + +[platformio] +default_envs = custom_esp32dev_usermod_sht + +[env:custom_esp32dev_usermod_sht] +extends = env:esp32dev +custom_usermods = ${env:esp32dev.custom_usermods} sht + +[env:custom_d1_mini_usermod_sht] +extends = env:d1_mini +custom_usermods = ${env:d1_mini.custom_usermods} sht diff --git a/usermods/usermod_v2_RF433/platformio_override.ini.sample b/usermods/usermod_v2_RF433/platformio_override.ini.sample new file mode 100644 index 0000000000..69c2d04c46 --- /dev/null +++ b/usermods/usermod_v2_RF433/platformio_override.ini.sample @@ -0,0 +1,11 @@ +# RF433 remote usermod build environment +# Copy to platformio_override.ini in the WLED root to use. + +[platformio] +default_envs = esp32dev_usermod_RF433 + +[env:esp32dev_usermod_RF433] +extends = env:esp32dev +custom_usermods = + ${env:esp32dev.custom_usermods} + RF433 diff --git a/usermods/usermod_v2_klipper_percentage/platformio_override.ini.sample b/usermods/usermod_v2_klipper_percentage/platformio_override.ini.sample new file mode 100644 index 0000000000..5239a51ae7 --- /dev/null +++ b/usermods/usermod_v2_klipper_percentage/platformio_override.ini.sample @@ -0,0 +1,10 @@ +# Klipper percentage usermod build environment +# Copy to platformio_override.ini in the WLED root to use. + +[platformio] +default_envs = esp32klipper + +[env:esp32klipper] +extends = env:esp32dev +custom_usermods = ${env:esp32dev.custom_usermods} + usermod_v2_klipper_percentage From 2daf17a53bed86792a968661e8c9f2c496096cae Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 12:09:39 +0100 Subject: [PATCH 03/15] run on push --- .github/workflows/usermods.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/usermods.yml b/.github/workflows/usermods.yml index 63f0100c5e..cc3c9ea374 100644 --- a/.github/workflows/usermods.yml +++ b/.github/workflows/usermods.yml @@ -4,6 +4,9 @@ on: pull_request: paths: - usermods/** + push: + paths: + - usermods/** env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true From af4b39efc44017f2441d8b4f4177130098672c24 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 12:21:34 +0100 Subject: [PATCH 04/15] Fix AHT10_v2 example --- usermods/AHT10_v2/platformio_override.ini | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/usermods/AHT10_v2/platformio_override.ini b/usermods/AHT10_v2/platformio_override.ini index 74dcd659bb..a5123c3c7e 100644 --- a/usermods/AHT10_v2/platformio_override.ini +++ b/usermods/AHT10_v2/platformio_override.ini @@ -1,5 +1,3 @@ [env:aht10_example] extends = env:esp32dev -build_flags = - ${common.build_flags} ${esp32.build_flags} - ; -D USERMOD_AHT10_DEBUG ; -- add a debug status to the info modal +custom_usermods = ${env:esp32dev.custom_usermods} AHT10_v2 From d459e6c7310f9bd57a7431cb76edef9f07962fd0 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 12:26:32 +0100 Subject: [PATCH 05/15] no d1_mini env --- usermods/BME280_v2/platformio_override.ini.sample | 4 ++-- usermods/sht/platformio_override.ini.sample | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/usermods/BME280_v2/platformio_override.ini.sample b/usermods/BME280_v2/platformio_override.ini.sample index 39f2f808e7..d812efeba8 100644 --- a/usermods/BME280_v2/platformio_override.ini.sample +++ b/usermods/BME280_v2/platformio_override.ini.sample @@ -4,6 +4,6 @@ [platformio] default_envs = usermod_bme280_d1_mini -[env:usermod_bme280_d1_mini] -extends = env:d1_mini +[env:usermod_esp8266_2m] +extends = env:esp8266_2m custom_usermods = ${env:d1_mini.custom_usermods} BME280_v2 diff --git a/usermods/sht/platformio_override.ini.sample b/usermods/sht/platformio_override.ini.sample index e9d8b8d1a5..665c1d8862 100644 --- a/usermods/sht/platformio_override.ini.sample +++ b/usermods/sht/platformio_override.ini.sample @@ -8,6 +8,6 @@ default_envs = custom_esp32dev_usermod_sht extends = env:esp32dev custom_usermods = ${env:esp32dev.custom_usermods} sht -[env:custom_d1_mini_usermod_sht] -extends = env:d1_mini +[env:custom_esp8266_2m_usermod_sht] +extends = env:esp8266_2m custom_usermods = ${env:d1_mini.custom_usermods} sht From e68bd2a3a5aec801eee33a3ce31aaebe21563c22 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 12:27:42 +0100 Subject: [PATCH 06/15] no d1_mini env --- usermods/BME280_v2/platformio_override.ini.sample | 4 ++-- usermods/DHT/platformio_override.ini | 8 ++++---- usermods/MAX17048_v2/platformio_override.ini.sample | 8 ++++---- usermods/SN_Photoresistor/platformio_override.ini | 4 ++-- usermods/sht/platformio_override.ini.sample | 2 +- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/usermods/BME280_v2/platformio_override.ini.sample b/usermods/BME280_v2/platformio_override.ini.sample index d812efeba8..12fa389e59 100644 --- a/usermods/BME280_v2/platformio_override.ini.sample +++ b/usermods/BME280_v2/platformio_override.ini.sample @@ -2,8 +2,8 @@ # Copy to platformio_override.ini in the WLED root to use. [platformio] -default_envs = usermod_bme280_d1_mini +default_envs = usermod_bme280_esp8266_2m [env:usermod_esp8266_2m] extends = env:esp8266_2m -custom_usermods = ${env:d1_mini.custom_usermods} BME280_v2 +custom_usermods = ${env:esp8266_2m.custom_usermods} BME280_v2 diff --git a/usermods/DHT/platformio_override.ini b/usermods/DHT/platformio_override.ini index 6ec2fb9992..e78137b774 100644 --- a/usermods/DHT/platformio_override.ini +++ b/usermods/DHT/platformio_override.ini @@ -8,10 +8,10 @@ ; USERMOD_DHT_MQTT - publish measurements to the MQTT broker ; USERMOD_DHT_STATS - For debug, report delay stats -[env:d1_mini_usermod_dht_C] -extends = env:d1_mini -custom_usermods = ${env:d1_mini.custom_usermods} DHT -build_flags = ${env:d1_mini.build_flags} -D USERMOD_DHT_CELSIUS +[env:esp8266_2m_usermod_dht_C] +extends = env:esp8266_2m +custom_usermods = ${env:esp8266_2m.custom_usermods} DHT +build_flags = ${env:esp8266_2m.build_flags} -D USERMOD_DHT_CELSIUS [env:custom32_LEDPIN_16_usermod_dht_C] extends = env:custom32_LEDPIN_16 diff --git a/usermods/MAX17048_v2/platformio_override.ini.sample b/usermods/MAX17048_v2/platformio_override.ini.sample index 0de0ca5fde..dd339bf758 100644 --- a/usermods/MAX17048_v2/platformio_override.ini.sample +++ b/usermods/MAX17048_v2/platformio_override.ini.sample @@ -2,8 +2,8 @@ # Copy to platformio_override.ini in the WLED root to use. [platformio] -default_envs = usermod_max17048_d1_mini +default_envs = usermod_max17048_esp8266_2m -[env:usermod_max17048_d1_mini] -extends = env:d1_mini -custom_usermods = ${env:d1_mini.custom_usermods} MAX17048_v2 +[env:usermod_max17048_esp8266_2m] +extends = env:esp8266_2m +custom_usermods = ${env:esp8266_2m.custom_usermods} MAX17048_v2 diff --git a/usermods/SN_Photoresistor/platformio_override.ini b/usermods/SN_Photoresistor/platformio_override.ini index 91bc5de2a6..fa75342f7f 100644 --- a/usermods/SN_Photoresistor/platformio_override.ini +++ b/usermods/SN_Photoresistor/platformio_override.ini @@ -8,8 +8,8 @@ ; USERMOD_SN_PHOTORESISTOR_RESISTOR_VALUE - the resistor size, defaults to 10000.0 (10K hms) ; USERMOD_SN_PHOTORESISTOR_OFFSET_VALUE - the offset value to report on, defaults to 25 ; -[env:usermod_sn_photoresistor_d1_mini] -extends = env:d1_mini +[env:usermod_sn_photoresistor_esp8266_2m] +extends = env:esp8266_2m build_flags = ${common.build_flags_esp8266} -D USERMOD_SN_PHOTORESISTOR diff --git a/usermods/sht/platformio_override.ini.sample b/usermods/sht/platformio_override.ini.sample index 665c1d8862..65e3ffd153 100644 --- a/usermods/sht/platformio_override.ini.sample +++ b/usermods/sht/platformio_override.ini.sample @@ -10,4 +10,4 @@ custom_usermods = ${env:esp32dev.custom_usermods} sht [env:custom_esp8266_2m_usermod_sht] extends = env:esp8266_2m -custom_usermods = ${env:d1_mini.custom_usermods} sht +custom_usermods = ${env:esp8266_2m.custom_usermods} sht From 50cd90053d394371d227c3b0b128dcaa70338435 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 12:31:17 +0100 Subject: [PATCH 07/15] ci: filter usermod matrix to only build changed usermod directories MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of building every usermod with a library.json on each PR, use git diff to identify which usermods/ subdirectories were actually touched and intersect that with the known-good library.json list. This reduces CI time significantly for PRs that only modify one or two usermods (previously every PR triggered ~40 usermods × 4 chipsets). Also removes the unnecessary PlatformIO install from get_usermod_envs (the step only uses shell/jq, not pio) and adds fetch-depth: 0 to ensure the base branch is available for the diff. --- .github/workflows/usermods.yml | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/.github/workflows/usermods.yml b/.github/workflows/usermods.yml index cc3c9ea374..fa5f6bc702 100644 --- a/.github/workflows/usermods.yml +++ b/.github/workflows/usermods.yml @@ -20,23 +20,35 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v5 with: - python-version: '3.12' - cache: 'pip' - - name: Install PlatformIO - run: pip install -r requirements.txt - - name: Get default environments + fetch-depth: 0 + - name: Get changed usermod environments id: envs run: | - echo "usermods=$(find usermods/ -name library.json | xargs dirname | xargs -n 1 basename | jq -R | grep -v PWM_fan | grep -v BME68X_v2| grep -v pixels_dice_tray | jq --slurp -c)" >> $GITHUB_OUTPUT + # Usermods whose directories changed in this PR + changed=$(git diff --name-only origin/${{ github.base_ref }}...HEAD \ + | grep '^usermods/' | cut -d/ -f2 | sort -u || true) + + # All usermods with a library.json (excluding known-incompatible ones) + all=$(find usermods/ -name library.json \ + | xargs dirname | xargs -n 1 basename \ + | grep -v PWM_fan | grep -v BME68X_v2 | grep -v pixels_dice_tray \ + | sort || true) + + if [ -z "$changed" ] || [ -z "$all" ]; then + echo "usermods=[]" >> $GITHUB_OUTPUT + else + usermods=$(comm -12 <(echo "$all") <(echo "$changed") | jq -R | jq --slurp -c) + echo "usermods=$usermods" >> $GITHUB_OUTPUT + fi outputs: usermods: ${{ steps.envs.outputs.usermods }} build: # Only run for pull requests from forks (not from branches within wled/WLED) - if: github.event.pull_request.head.repo.full_name != github.repository + # Skip when no changed usermods were found (e.g. only non-library changes) + if: github.event.pull_request.head.repo.full_name != github.repository && needs.get_usermod_envs.outputs.usermods != '[]' name: Build Enviornments runs-on: ubuntu-latest needs: get_usermod_envs From fb0c1dfcd0a8a2cf95e34f6dbea3329a7b98ff7a Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 12:42:18 +0100 Subject: [PATCH 08/15] SN_Photoresistor --- usermods/SN_Photoresistor/platformio_override.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usermods/SN_Photoresistor/platformio_override.ini b/usermods/SN_Photoresistor/platformio_override.ini index fa75342f7f..c5e05ed3ee 100644 --- a/usermods/SN_Photoresistor/platformio_override.ini +++ b/usermods/SN_Photoresistor/platformio_override.ini @@ -1,6 +1,5 @@ ; Options ; ------- -; USERMOD_SN_PHOTORESISTOR - define this to have this user mod included wled00\usermods_list.cpp ; USERMOD_SN_PHOTORESISTOR_MEASUREMENT_INTERVAL - the number of milliseconds between measurements, defaults to 60 seconds ; USERMOD_SN_PHOTORESISTOR_FIRST_MEASUREMENT_AT - the number of milliseconds after boot to take first measurement, defaults to 20 seconds ; USERMOD_SN_PHOTORESISTOR_REFERENCE_VOLTAGE - the voltage supplied to the sensor, defaults to 5v @@ -10,7 +9,8 @@ ; [env:usermod_sn_photoresistor_esp8266_2m] extends = env:esp8266_2m +custom_usermods = ${env:esp8266_2m.custom_usermods} SN_Photoresistor build_flags = ${common.build_flags_esp8266} - -D USERMOD_SN_PHOTORESISTOR + -D USERMOD_SN_PHOTORESISTOR_MEASUREMENT_INTERVAL=60 lib_deps = ${env.lib_deps} From 9b4eafa8b7bd101fdd2039499c084c011faba01c Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 12:58:52 +0100 Subject: [PATCH 09/15] fix(ci): use PR base SHA for diff and guard jobs against push events github.base_ref is empty on push events, causing 'ambiguous argument origin/...HEAD'. Fix by: - Adding github.event_name == 'pull_request' guard to both jobs so they never run on push events where pull_request context is absent - Replacing origin/${{ github.base_ref }}...HEAD with ${{ github.event.pull_request.base.sha }} HEAD which uses the concrete base commit SHA provided by GitHub directly --- .github/workflows/usermods.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/usermods.yml b/.github/workflows/usermods.yml index fa5f6bc702..05b72370da 100644 --- a/.github/workflows/usermods.yml +++ b/.github/workflows/usermods.yml @@ -15,7 +15,7 @@ jobs: get_usermod_envs: # Only run for pull requests from forks (not from branches within wled/WLED) - if: github.event.pull_request.head.repo.full_name != github.repository + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository name: Gather Usermods runs-on: ubuntu-latest steps: @@ -26,7 +26,7 @@ jobs: id: envs run: | # Usermods whose directories changed in this PR - changed=$(git diff --name-only origin/${{ github.base_ref }}...HEAD \ + changed=$(git diff --name-only ${{ github.event.pull_request.base.sha }} HEAD \ | grep '^usermods/' | cut -d/ -f2 | sort -u || true) # All usermods with a library.json (excluding known-incompatible ones) @@ -48,7 +48,7 @@ jobs: build: # Only run for pull requests from forks (not from branches within wled/WLED) # Skip when no changed usermods were found (e.g. only non-library changes) - if: github.event.pull_request.head.repo.full_name != github.repository && needs.get_usermod_envs.outputs.usermods != '[]' + if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository && needs.get_usermod_envs.outputs.usermods != '[]' name: Build Enviornments runs-on: ubuntu-latest needs: get_usermod_envs From 30075640733bd445cb87ba6823653a5aef29a10d Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 13:00:57 +0100 Subject: [PATCH 10/15] ESP32 builds all V4 --- .../platformio_override.sample.ini | 6 +++--- .../platformio_override.sample.ini | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/usermods/usermod_v2_four_line_display_ALT/platformio_override.sample.ini b/usermods/usermod_v2_four_line_display_ALT/platformio_override.sample.ini index f4fa8c9d8b..ef0e00848f 100644 --- a/usermods/usermod_v2_four_line_display_ALT/platformio_override.sample.ini +++ b/usermods/usermod_v2_four_line_display_ALT/platformio_override.sample.ini @@ -2,10 +2,10 @@ default_envs = esp32dev_fld [env:esp32dev_fld] -extends = env:esp32dev_V4 -custom_usermods = ${env:esp32dev_V4.custom_usermods} four_line_display_ALT +extends = env:esp32dev +custom_usermods = ${env:esp32dev.custom_usermods} four_line_display_ALT build_flags = - ${env:esp32dev_V4.build_flags} + ${env:esp32dev.build_flags} -D FLD_TYPE=SH1106 -D I2CSCLPIN=27 -D I2CSDAPIN=26 diff --git a/usermods/usermod_v2_rotary_encoder_ui_ALT/platformio_override.sample.ini b/usermods/usermod_v2_rotary_encoder_ui_ALT/platformio_override.sample.ini index 2511d2fa38..c943bdbe25 100644 --- a/usermods/usermod_v2_rotary_encoder_ui_ALT/platformio_override.sample.ini +++ b/usermods/usermod_v2_rotary_encoder_ui_ALT/platformio_override.sample.ini @@ -2,10 +2,10 @@ default_envs = esp32dev_re [env:esp32dev_re] -extends = env:esp32dev_V4 -custom_usermods = ${env:esp32dev_V4.custom_usermods} rotary_encoder_ui_ALT +extends = env:esp32dev +custom_usermods = ${env:esp32dev.custom_usermods} rotary_encoder_ui_ALT build_flags = - ${env:esp32dev_V4.build_flags} + ${env:esp32dev.build_flags} -D USERMOD_ROTARY_ENCODER_GPIO=INPUT -D ENCODER_DT_PIN=21 -D ENCODER_CLK_PIN=23 From 83e32eae2d54b33b04a701e73f592cf3066ed790 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 13:08:26 +0100 Subject: [PATCH 11/15] fix: rename/fix platformio_override sample files across usermods MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename *.ini (gitignored) and *.sample.ini (wrong extension order) to the correct platformio_override.ini.sample convention so CI discovers them - Fix AHT10_v2: custom_usermods AHT10 → AHT10_v2 (match library.json name) - Fix INA226_v2: custom_usermods INA226 → INA226_v2 (both envs) - Fix TTGO-T-Display: replace direct [env:esp32dev] override with a named env that extends esp32dev; add note that library.json is absent so custom_usermods is not available for this usermod Affected usermods: AHT10_v2, DHT, INA226_v2, SN_Photoresistor, TTGO-T-Display, Temperature, four_line_display_ALT, rotary_encoder_ui_ALT --- usermods/AHT10_v2/platformio_override.ini | 3 --- usermods/AHT10_v2/platformio_override.ini.sample | 2 +- ...erride.ini => platformio_override.ini.sample} | 0 usermods/INA226_v2/platformio_override.ini | 6 ------ .../INA226_v2/platformio_override.ini.sample | 4 ++-- ...erride.ini => platformio_override.ini.sample} | 0 usermods/TTGO-T-Display/platformio_override.ini | 8 -------- .../platformio_override.ini.sample | 16 ++++++++++++++++ usermods/Temperature/platformio_override.ini | 5 ----- ...sample.ini => platformio_override.ini.sample} | 0 ...sample.ini => platformio_override.ini.sample} | 0 11 files changed, 19 insertions(+), 25 deletions(-) delete mode 100644 usermods/AHT10_v2/platformio_override.ini rename usermods/DHT/{platformio_override.ini => platformio_override.ini.sample} (100%) delete mode 100644 usermods/INA226_v2/platformio_override.ini rename usermods/SN_Photoresistor/{platformio_override.ini => platformio_override.ini.sample} (100%) delete mode 100644 usermods/TTGO-T-Display/platformio_override.ini create mode 100644 usermods/TTGO-T-Display/platformio_override.ini.sample delete mode 100644 usermods/Temperature/platformio_override.ini rename usermods/usermod_v2_four_line_display_ALT/{platformio_override.sample.ini => platformio_override.ini.sample} (100%) rename usermods/usermod_v2_rotary_encoder_ui_ALT/{platformio_override.sample.ini => platformio_override.ini.sample} (100%) diff --git a/usermods/AHT10_v2/platformio_override.ini b/usermods/AHT10_v2/platformio_override.ini deleted file mode 100644 index a5123c3c7e..0000000000 --- a/usermods/AHT10_v2/platformio_override.ini +++ /dev/null @@ -1,3 +0,0 @@ -[env:aht10_example] -extends = env:esp32dev -custom_usermods = ${env:esp32dev.custom_usermods} AHT10_v2 diff --git a/usermods/AHT10_v2/platformio_override.ini.sample b/usermods/AHT10_v2/platformio_override.ini.sample index 56bba5aa2e..993b99ce39 100644 --- a/usermods/AHT10_v2/platformio_override.ini.sample +++ b/usermods/AHT10_v2/platformio_override.ini.sample @@ -6,4 +6,4 @@ default_envs = aht10_example [env:aht10_example] extends = env:esp32dev -custom_usermods = ${env:esp32dev.custom_usermods} AHT10 +custom_usermods = ${env:esp32dev.custom_usermods} AHT10_v2 diff --git a/usermods/DHT/platformio_override.ini b/usermods/DHT/platformio_override.ini.sample similarity index 100% rename from usermods/DHT/platformio_override.ini rename to usermods/DHT/platformio_override.ini.sample diff --git a/usermods/INA226_v2/platformio_override.ini b/usermods/INA226_v2/platformio_override.ini deleted file mode 100644 index 9968cbf721..0000000000 --- a/usermods/INA226_v2/platformio_override.ini +++ /dev/null @@ -1,6 +0,0 @@ -[env:ina226_example] -extends = env:esp32dev -custom_usermods = ${env:esp32dev.custom_usermods} INA226_v2 -build_flags = - ${env:esp32dev.build_flags} - ; -D USERMOD_INA226_DEBUG ; -- add a debug status to the info modal diff --git a/usermods/INA226_v2/platformio_override.ini.sample b/usermods/INA226_v2/platformio_override.ini.sample index c38f572f47..b735ac5048 100644 --- a/usermods/INA226_v2/platformio_override.ini.sample +++ b/usermods/INA226_v2/platformio_override.ini.sample @@ -7,14 +7,14 @@ default_envs = ina226_example # Minimal example — enable the usermod with default settings [env:ina226_example] extends = env:esp32dev -custom_usermods = ${env:esp32dev.custom_usermods} INA226 +custom_usermods = ${env:esp32dev.custom_usermods} INA226_v2 build_flags = ${env:esp32dev.build_flags} ; -D USERMOD_INA226_DEBUG ; uncomment to add debug status to the info modal # Custom calibration example — adjust constants to match your hardware [env:ina226_custom] extends = env:esp32dev -custom_usermods = ${env:esp32dev.custom_usermods} INA226 +custom_usermods = ${env:esp32dev.custom_usermods} INA226_v2 build_flags = ${env:esp32dev.build_flags} -D INA226_ENABLED_DEFAULT=true -D INA226_SHUNT_MICRO_OHMS=2888 diff --git a/usermods/SN_Photoresistor/platformio_override.ini b/usermods/SN_Photoresistor/platformio_override.ini.sample similarity index 100% rename from usermods/SN_Photoresistor/platformio_override.ini rename to usermods/SN_Photoresistor/platformio_override.ini.sample diff --git a/usermods/TTGO-T-Display/platformio_override.ini b/usermods/TTGO-T-Display/platformio_override.ini deleted file mode 100644 index 7e42d9a54a..0000000000 --- a/usermods/TTGO-T-Display/platformio_override.ini +++ /dev/null @@ -1,8 +0,0 @@ -[env:esp32dev] -build_flags = ${common.build_flags_esp32} -; PIN defines - uncomment and change, if needed: -; -D LEDPIN=2 - -D BTNPIN=35 -; -D IRPIN=4 -; -D RLYPIN=12 -; -D RLYMDE=1 diff --git a/usermods/TTGO-T-Display/platformio_override.ini.sample b/usermods/TTGO-T-Display/platformio_override.ini.sample new file mode 100644 index 0000000000..2777b4f21c --- /dev/null +++ b/usermods/TTGO-T-Display/platformio_override.ini.sample @@ -0,0 +1,16 @@ +; TTGO-T-Display usermod build example. +; Note: this usermod has no library.json so custom_usermods is not available. +; The usermod.cpp must be included manually in your build. + +[platformio] +default_envs = ttgo_t_display_example + +[env:ttgo_t_display_example] +extends = env:esp32dev +build_flags = ${env:esp32dev.build_flags} +; PIN defines - uncomment and change, if needed: +; -D LEDPIN=2 + -D BTNPIN=35 +; -D IRPIN=4 +; -D RLYPIN=12 +; -D RLYMDE=1 diff --git a/usermods/Temperature/platformio_override.ini b/usermods/Temperature/platformio_override.ini deleted file mode 100644 index a53b5974d9..0000000000 --- a/usermods/Temperature/platformio_override.ini +++ /dev/null @@ -1,5 +0,0 @@ -; Options -; ------- -; USERMOD_DALLASTEMPERATURE_MEASUREMENT_INTERVAL - the number of milliseconds between measurements, defaults to 60 seconds -; - diff --git a/usermods/usermod_v2_four_line_display_ALT/platformio_override.sample.ini b/usermods/usermod_v2_four_line_display_ALT/platformio_override.ini.sample similarity index 100% rename from usermods/usermod_v2_four_line_display_ALT/platformio_override.sample.ini rename to usermods/usermod_v2_four_line_display_ALT/platformio_override.ini.sample diff --git a/usermods/usermod_v2_rotary_encoder_ui_ALT/platformio_override.sample.ini b/usermods/usermod_v2_rotary_encoder_ui_ALT/platformio_override.ini.sample similarity index 100% rename from usermods/usermod_v2_rotary_encoder_ui_ALT/platformio_override.sample.ini rename to usermods/usermod_v2_rotary_encoder_ui_ALT/platformio_override.ini.sample From 818c3cbced938917d3ad627806f73e01150edfcf Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 13:09:17 +0100 Subject: [PATCH 12/15] perf: filter custom build matrix to changed usermods on PRs On pull_request events, get_custom_build_envs now only scans usermod directories that changed in the PR (matching the behaviour of the get_usermod_envs job). On push events (e.g. merging a PR) it still scans all usermods to validate the full set. --- .github/workflows/usermods.yml | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/.github/workflows/usermods.yml b/.github/workflows/usermods.yml index 05b72370da..a890c96307 100644 --- a/.github/workflows/usermods.yml +++ b/.github/workflows/usermods.yml @@ -97,11 +97,30 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Find usermods with custom build environments id: custom_envs run: | + # On PRs: only scan usermods whose directories changed. + # On push: scan all usermods (validates the full set on merge). + if [ "${{ github.event_name }}" = "pull_request" ]; then + changed=$(git diff --name-only ${{ github.event.pull_request.base.sha }} HEAD \ + | grep '^usermods/' | cut -d/ -f2 | sort -u || true) + if [ -z "$changed" ]; then + echo "matrix=[]" >> $GITHUB_OUTPUT + exit 0 + fi + samples=$(for mod in $changed; do + f="usermods/$mod/platformio_override.ini.sample" + [ -f "$f" ] && echo "$f" + done | sort) + else + samples=$(find usermods/ -name "platformio_override.ini.sample" | sort) + fi + result='[]' - for sample in $(find usermods/ -name "platformio_override.ini.sample" | sort); do + for sample in $samples; do usermod=$(dirname "$sample" | xargs basename) envs=$(grep -E '^\[env:[^]]+\]' "$sample" | sed 's/^\[env:\(.*\)\]$/\1/') for env in $envs; do From 76a505fb378415c2e3869c644248ed4ed86d1db9 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 13:12:58 +0100 Subject: [PATCH 13/15] fix release name --- usermods/pixels_dice_tray/platformio_override.ini.sample | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usermods/pixels_dice_tray/platformio_override.ini.sample b/usermods/pixels_dice_tray/platformio_override.ini.sample index 6b4fa7768e..74237c2aa0 100644 --- a/usermods/pixels_dice_tray/platformio_override.ini.sample +++ b/usermods/pixels_dice_tray/platformio_override.ini.sample @@ -75,7 +75,7 @@ board_build.partitions = ${esp32.large_partitions} board_build.f_flash = 80000000L board_build.flash_mode = qio monitor_filters = esp32_exception_decoder -build_flags = ${common.build_flags} ${esp32s3.build_flags} -D WLED_RELEASE_NAME=ESP32-S3_8MB_qspi +build_flags = ${common.build_flags} ${esp32s3.build_flags} -D WLED_RELEASE_NAME=\"ESP32-S3_8MB_qspi_dice\" -D CONFIG_LITTLEFS_FOR_IDF_3_2 -D WLED_WATCHDOG_TIMEOUT=0 -D ARDUINO_USB_CDC_ON_BOOT=1 -D ARDUINO_USB_MODE=1 ;; for boards with USB-OTG connector only (USBCDC or "TinyUSB") From 76b1e0a078acbe4dfd06209aaab3fc9e04d67d76 Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 13:14:05 +0100 Subject: [PATCH 14/15] fix release name --- usermods/pixels_dice_tray/platformio_override.ini.sample | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/usermods/pixels_dice_tray/platformio_override.ini.sample b/usermods/pixels_dice_tray/platformio_override.ini.sample index 74237c2aa0..f51c2190b3 100644 --- a/usermods/pixels_dice_tray/platformio_override.ini.sample +++ b/usermods/pixels_dice_tray/platformio_override.ini.sample @@ -13,7 +13,7 @@ board_build.partitions = ${esp32.large_partitions} board_build.f_flash = 80000000L board_build.flash_mode = qio monitor_filters = esp32_exception_decoder -build_flags = ${common.build_flags} ${esp32s3.build_flags} -D WLED_RELEASE_NAME=T-QT-PRO-8MB +build_flags = ${common.build_flags} ${esp32s3.build_flags} -D WLED_RELEASE_NAME=\"T-QT-PRO-8MB_dice\" -D CONFIG_LITTLEFS_FOR_IDF_3_2 -D WLED_WATCHDOG_TIMEOUT=0 -D ARDUINO_USB_CDC_ON_BOOT=1 -D ARDUINO_USB_MODE=1 ;; for boards with USB-OTG connector only (USBCDC or "TinyUSB") @@ -105,7 +105,7 @@ lib_deps = ${esp32s3.lib_deps} # https://github.com/wled-dev/WLED/issues/1382 ; [env:esp32dev_dice] ; extends = env:esp32dev -; build_flags = ${common.build_flags} ${esp32.build_flags} -D WLED_RELEASE_NAME=ESP32 +; build_flags = ${common.build_flags} ${esp32.build_flags} -D WLED_RELEASE_NAME=\"ESP32_dice\" ; ; Enable Pixels dice mod ; -D USERMOD_PIXELS_DICE_TRAY ; lib_deps = ${esp32.lib_deps} From a2a259603e791055781c3236c05060321844efcb Mon Sep 17 00:00:00 2001 From: Will Tatam Date: Sun, 24 May 2026 14:02:40 +0100 Subject: [PATCH 15/15] fix: resolve 8 CI build failures in custom usermod environments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - BME280_v2: fix default_envs typo (usermod_bme280_esp8266_2m → usermod_esp8266_2m to match actual [env:] section name) - DHT: replace extends env:custom32_LEDPIN_16 (not in this fork) with env:esp32dev + -D LEDPIN=16; rename env accordingly - SN_Photoresistor: replace ${common.build_flags_esp8266} (key absent in this fork) with ${env:esp8266_2m.build_flags} / lib_deps equivalent - sht: guard ESP.getChipModel() behind #ifdef ARDUINO_ARCH_ESP32 — method does not exist on ESP8266 (fixes custom_esp8266_2m_usermod_sht build) - EleksTube_IPS: delete platformio_override.ini.sample — library.json is disabled so the env cannot build; delete rather than ship a broken sample - pixels_dice_tray: exclude from build_custom matrix (same as standard matrix) — BLE library incompatibility with current IDF causes build failure - workflow: add PWM_fan / BME68X_v2 to exclusion list in get_custom_build_envs for consistency with get_usermod_envs --- .github/workflows/usermods.yml | 2 ++ .../BME280_v2/platformio_override.ini.sample | 2 +- usermods/DHT/platformio_override.ini.sample | 8 ++--- .../platformio_override.ini.sample | 32 ------------------- .../platformio_override.ini.sample | 4 +-- usermods/sht/sht.cpp | 6 ++++ 6 files changed, 15 insertions(+), 39 deletions(-) delete mode 100644 usermods/EleksTube_IPS/platformio_override.ini.sample diff --git a/.github/workflows/usermods.yml b/.github/workflows/usermods.yml index a890c96307..c00064ee77 100644 --- a/.github/workflows/usermods.yml +++ b/.github/workflows/usermods.yml @@ -122,6 +122,8 @@ jobs: result='[]' for sample in $samples; do usermod=$(dirname "$sample" | xargs basename) + # Skip usermods known to be incompatible (same list as get_usermod_envs) + case "$usermod" in PWM_fan|BME68X_v2|pixels_dice_tray) continue ;; esac envs=$(grep -E '^\[env:[^]]+\]' "$sample" | sed 's/^\[env:\(.*\)\]$/\1/') for env in $envs; do result=$(echo "$result" | jq --arg u "$usermod" --arg e "$env" '. + [{usermod: $u, env: $e}]') diff --git a/usermods/BME280_v2/platformio_override.ini.sample b/usermods/BME280_v2/platformio_override.ini.sample index 12fa389e59..49ab16b1fd 100644 --- a/usermods/BME280_v2/platformio_override.ini.sample +++ b/usermods/BME280_v2/platformio_override.ini.sample @@ -2,7 +2,7 @@ # Copy to platformio_override.ini in the WLED root to use. [platformio] -default_envs = usermod_bme280_esp8266_2m +default_envs = usermod_esp8266_2m [env:usermod_esp8266_2m] extends = env:esp8266_2m diff --git a/usermods/DHT/platformio_override.ini.sample b/usermods/DHT/platformio_override.ini.sample index e78137b774..c991d3d831 100644 --- a/usermods/DHT/platformio_override.ini.sample +++ b/usermods/DHT/platformio_override.ini.sample @@ -13,8 +13,8 @@ extends = env:esp8266_2m custom_usermods = ${env:esp8266_2m.custom_usermods} DHT build_flags = ${env:esp8266_2m.build_flags} -D USERMOD_DHT_CELSIUS -[env:custom32_LEDPIN_16_usermod_dht_C] -extends = env:custom32_LEDPIN_16 -custom_usermods = ${env:custom32_LEDPIN_16.custom_usermods} DHT -build_flags = ${env:custom32_LEDPIN_16.build_flags} -D USERMOD_DHT_CELSIUS -D USERMOD_DHT_STATS +[env:esp32dev_LEDPIN_16_usermod_dht_C] +extends = env:esp32dev +custom_usermods = ${env:esp32dev.custom_usermods} DHT +build_flags = ${env:esp32dev.build_flags} -D LEDPIN=16 -D USERMOD_DHT_CELSIUS -D USERMOD_DHT_STATS diff --git a/usermods/EleksTube_IPS/platformio_override.ini.sample b/usermods/EleksTube_IPS/platformio_override.ini.sample deleted file mode 100644 index 5e761ce5f8..0000000000 --- a/usermods/EleksTube_IPS/platformio_override.ini.sample +++ /dev/null @@ -1,32 +0,0 @@ -# EleksTube IPS clock build environment -# Copy to platformio_override.ini in the WLED root to use. -# -# Note: usermods/EleksTube_IPS/library.json is currently disabled. -# To enable custom_usermods support, rename library.json.disabled to library.json. - -[platformio] -default_envs = elekstube_ips - -[env:elekstube_ips] -extends = esp32 ;; use default esp32 platform -board = esp32dev -upload_speed = 921600 -custom_usermods = ${env:esp32dev.custom_usermods} RTC EleksTube_IPS -build_flags = ${common.build_flags} ${esp32.build_flags} -D WLED_DISABLE_BROWNOUT_DET -D WLED_DISABLE_INFRARED - -D DATA_PINS=12 - -D RLYPIN=27 - -D BTNPIN=34 - -D PIXEL_COUNTS=6 - # Display config - -D ST7789_DRIVER - -D TFT_WIDTH=135 - -D TFT_HEIGHT=240 - -D CGRAM_OFFSET - -D TFT_SDA_READ - -D TFT_MOSI=23 - -D TFT_SCLK=18 - -D TFT_DC=25 - -D TFT_RST=26 - -D SPI_FREQUENCY=40000000 - -D USER_SETUP_LOADED -monitor_filters = esp32_exception_decoder diff --git a/usermods/SN_Photoresistor/platformio_override.ini.sample b/usermods/SN_Photoresistor/platformio_override.ini.sample index c5e05ed3ee..d0588ded5c 100644 --- a/usermods/SN_Photoresistor/platformio_override.ini.sample +++ b/usermods/SN_Photoresistor/platformio_override.ini.sample @@ -11,6 +11,6 @@ extends = env:esp8266_2m custom_usermods = ${env:esp8266_2m.custom_usermods} SN_Photoresistor build_flags = - ${common.build_flags_esp8266} + ${env:esp8266_2m.build_flags} -D USERMOD_SN_PHOTORESISTOR_MEASUREMENT_INTERVAL=60 -lib_deps = ${env.lib_deps} +lib_deps = ${env:esp8266_2m.lib_deps} diff --git a/usermods/sht/sht.cpp b/usermods/sht/sht.cpp index e1eb9e885f..f7f4be4bab 100644 --- a/usermods/sht/sht.cpp +++ b/usermods/sht/sht.cpp @@ -143,7 +143,13 @@ void ShtUsermod::appendDeviceToMqttDiscoveryMessage(JsonDocument& root) { device[F("ids")] = escapedMac.c_str(); device[F("name")] = serverDescription; device[F("sw")] = versionString; + // AI: below section was generated by an AI + #ifdef ARDUINO_ARCH_ESP32 device[F("mdl")] = ESP.getChipModel(); + #else + device[F("mdl")] = F("ESP8266"); + #endif + // AI: end device[F("mf")] = F("espressif"); }