Add explicit board_level = release (#11305)

Relying on board_level = <empty> was causing some inheritence footguns.
Let's be explicit about what's being released.
This commit is contained in:
Austin
2026-07-31 12:04:24 -04:00
committed by GitHub
parent 33a0f8ffb7
commit 76f4340f3a
100 changed files with 159 additions and 14 deletions

View File

@@ -557,8 +557,9 @@ pio run -e native-macos # Build headless macOS meshtasticd (Homebrew prere
1. Create directory under `variants/<arch>/<name>/`
2. Add `variant.h` with pin definitions and hardware capability defines
3. Add `platformio.ini` with build config - use `extends` to reference common base (e.g., `esp32s3_base`)
4. Set `custom_meshtastic_support_level = 1` (PR builds) or `2` (merge builds)
5. For e-ink displays, add `nicheGraphics.h` for InkHUD configuration
4. Set `board_level` (required - `release` for a normal variant; see "Build Matrix Generation")
5. Set `custom_meshtastic_support_level` (1-3) and the other `custom_meshtastic_*` metadata
6. For e-ink displays, add `nicheGraphics.h` for InkHUD configuration
### Adding a New Telemetry Sensor
@@ -642,11 +643,16 @@ The CI uses `bin/generate_ci_matrix.py` to dynamically select which targets to b
./bin/generate_ci_matrix.py all --level pr
```
Variants can specify their support level in `platformio.ini`:
Every variant env **must** declare a `board_level` in its `platformio.ini`; the matrix
generator exits non-zero if any env is missing it or uses an unrecognized value:
- `custom_meshtastic_support_level = 1` - Actively supported, built on every PR
- `custom_meshtastic_support_level = 2` - Supported, built on merge to main branches
- `board_level = extra` - Extra builds, only on full releases
- `board_level = pr` - Smallest subset, built on every PR (and in every larger matrix)
- `board_level = release` - The full release matrix, built on push / schedule / `workflow_dispatch`
- `board_level = extra` - Opt-in only, built when explicitly requested via `--level extra`
`custom_meshtastic_support_level` (1-3) is **not** part of this filtering. It is variant
metadata that `bin/platformio-custom.py` emits as `supportLevel` in the generated
hardware list; changing it does not change which targets CI builds.
### Running Workflows Locally

View File

@@ -5,8 +5,15 @@
import argparse
import json
import re
from platformio.project.config import ProjectConfig
# Every variant env must declare one of these as its 'board_level':
# pr - smallest subset, built on every PR (and in every larger matrix)
# release - the full release matrix, built on push / schedule / workflow_dispatch
# extra - opt-in only, built when explicitly requested via '--level extra'
BOARD_LEVELS = ("pr", "release", "extra")
parser = argparse.ArgumentParser(description="Generate the CI matrix")
parser.add_argument("platform", help="Platform to build for")
parser.add_argument(
@@ -14,7 +21,7 @@ parser.add_argument(
choices=["extra", "pr"],
nargs="*",
default=[],
help="Board level to build for (omit for full release boards)",
help="Board level to build for (omit for the 'pr' + 'release' matrix)",
)
args = parser.parse_args()
@@ -39,10 +46,20 @@ for pio_env in pio_envs:
if not env_platform:
print(f"Error: Could not determine platform for environment '{pio_env}'")
exit(1)
board_level = cfg.get(f"env:{pio_env}", "board_level", default=None)
# Intentionally fail on a missing or unrecognized level: every env must opt in
# explicitly, so a new variant can't silently drop out of (or into) the matrix.
if board_level not in BOARD_LEVELS:
found = f"'{board_level}'" if board_level else "no value"
print(
f"Error: environment '{pio_env}' has {found} for 'board_level'; "
f"expected one of: {', '.join(BOARD_LEVELS)}"
)
exit(1)
# Store env details as a dictionary, and add to 'all_envs' list
env = {
"ci": {"board": pio_env, "platform": env_platform},
"board_level": cfg.get(f"env:{pio_env}", "board_level", default=None),
"board_level": board_level,
"board_check": cfg.get(f"env:{pio_env}", "board_check", default="false").strip().lower() == "true",
}
all_envs.append(env)
@@ -52,10 +69,8 @@ for pio_env in pio_envs:
if "check" in args.platform:
for env in all_envs:
if env["board_check"]:
if "pr" in args.level:
if env["board_level"] == "pr":
outlist.append(env["ci"])
else:
# '--level pr' narrows to the PR subset; otherwise check every level
if "pr" not in args.level or env["board_level"] == "pr":
outlist.append(env["ci"])
# Filter (non-check) builds by platform
else:
@@ -67,8 +82,8 @@ else:
# Include board_level = 'extra' when requested
elif "extra" in args.level and env["board_level"] == "extra":
outlist.append(env["ci"])
# If no board level is specified, include in release builds (not PR)
elif "pr" not in args.level and not env["board_level"]:
# Include board_level = 'release' unless narrowed to the PR subset
elif "pr" not in args.level and env["board_level"] == "release":
outlist.append(env["ci"])
# Return as a JSON list

View File

@@ -1,6 +1,7 @@
; CircuitMess Chatter 2 based on ESP32-WROOM-32 (38 pins) devkit & DeeamLNK DL-LLCC68 or Heltec HT RA62 SX1262/SX1268 module
[env:chatter2]
extends = esp32_base
board_level = release
board = esp32doit-devkit-v1
build_flags =
${esp32_base.build_flags}

View File

@@ -9,6 +9,7 @@ custom_meshtastic_display_name = Hydra
custom_meshtastic_tags = DIY
extends = esp32_base
board_level = release
board = esp32doit-devkit-v1
build_flags =
${esp32_base.build_flags}

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = diy.svg
custom_meshtastic_tags = DIY
extends = esp32_base
board_level = release
board = esp32doit-devkit-v1
board_check = true
build_flags =

View File

@@ -8,6 +8,7 @@ custom_meshtastic_display_name = M5 Stack
custom_meshtastic_tags = M5Stack
extends = esp32_base
board_level = release
board = m5stack-core-esp32
monitor_filters = esp32_exception_decoder
build_src_filter =

View File

@@ -1,5 +1,6 @@
[env:m5stack-coreink]
extends = esp32_base
board_level = release
board = m5stack-coreink
board_check = true
build_src_filter =

View File

@@ -9,6 +9,7 @@ custom_meshtastic_display_name = Nano G1 Explorer
custom_meshtastic_tags = B&Q
extends = esp32_base
board_level = release
board = ttgo-tbeam
build_flags =
${esp32_base.build_flags}

View File

@@ -9,6 +9,7 @@ custom_meshtastic_display_name = Nano G1
custom_meshtastic_tags = B&Q
extends = esp32_base
board_level = release
board = ttgo-tbeam
build_flags =
${esp32_base.build_flags}

View File

@@ -1,5 +1,6 @@
[env:radiomaster_900_bandit]
extends = esp32_base
board_level = release
board = esp32doit-devkit-v1
build_flags =
${esp32_base.build_flags}

View File

@@ -5,6 +5,7 @@
;
[env:radiomaster_900_bandit_micro]
extends = esp32_base
board_level = release
board = esp32doit-devkit-v1
build_flags =
${esp32_base.build_flags}

View File

@@ -8,6 +8,7 @@ custom_meshtastic_display_name = RadioMaster 900 Bandit Nano
custom_meshtastic_tags = RadioMaster
extends = esp32_base
board_level = release
board = esp32doit-devkit-v1
build_flags =
${esp32_base.build_flags}

View File

@@ -9,6 +9,7 @@ custom_meshtastic_images = rak11200.svg
custom_meshtastic_tags = RAK
extends = esp32_base
board_level = release
board = wiscore_rak11200
board_check = true
build_flags =

View File

@@ -9,6 +9,7 @@ custom_meshtastic_display_name = Station G1
custom_meshtastic_tags = B&Q
extends = esp32_base
board_level = release
board = ttgo-tbeam
build_flags =
${esp32_base.build_flags}

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = tbeam.svg
custom_meshtastic_tags = LilyGo
extends = esp32_base
board_level = release
board = ttgo-tbeam
board_check = true

View File

@@ -9,6 +9,7 @@ custom_meshtastic_images = tlora-v2-1-1_6.svg
custom_meshtastic_tags = LilyGo
extends = esp32_base
board_level = release
board = ttgo-lora32-v21
board_check = true
build_flags =

View File

@@ -1,5 +1,6 @@
[env:tlora-v3-3-0-tcxo]
extends = esp32_base
board_level = release
board = ttgo-lora32-v21
build_flags =
${esp32_base.build_flags}

View File

@@ -1,5 +1,6 @@
[env:heltec-hru-3601]
extends = esp32c3_base
board_level = release
board = adafruit_qtpy_esp32c3
build_flags =
${esp32c3_base.build_flags}

View File

@@ -9,6 +9,7 @@ custom_meshtastic_images = m5_c6l.svg
custom_meshtastic_tags = M5Stack
extends = esp32c6_base
board_level = release
board = esp32-c6-devkitc-1
board_upload.flash_size = 16MB
board_build.partitions = default_16MB.csv

View File

@@ -9,6 +9,7 @@ custom_meshtastic_tags = EByte
custom_meshtastic_requires_dfu = true
extends = esp32s3_base
board_level = release
board = CDEBYTE_EoRa-S3
build_flags =
${esp32s3_base.build_flags}

View File

@@ -1,5 +1,6 @@
[env:thinknode_g3]
extends = esp32s3_base
board_level = release
board = ESP32-S3-WROOM-1-N4
board_build.psram_type = opi

View File

@@ -10,6 +10,7 @@ custom_meshtastic_tags = Elecrow
custom_meshtastic_requires_dfu = false
extends = esp32s3_base
board_level = release
board = ESP32-S3-WROOM-1-N4
build_flags =
${esp32s3_base.build_flags}

View File

@@ -10,6 +10,7 @@ custom_meshtastic_tags = Elecrow
custom_meshtastic_requires_dfu = false
extends = esp32s3_base
board_level = release
board = ESP32-S3-WROOM-1-N4
build_src_filter =
${esp32s3_base.build_src_filter}

View File

@@ -91,6 +91,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = crowpanel_small_esp32s3_base
board_level = release
build_flags =
${crowpanel_small_esp32s3_base.build_flags}
-D SPI_FREQUENCY=80000000
@@ -127,6 +128,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = crowpanel_small_esp32s3_base
board_level = release
build_flags =
${crowpanel_small_esp32s3_base.build_flags}
-D LV_CACHE_DEF_SIZE=2097152
@@ -166,6 +168,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = crowpanel_large_esp32s3_base
board_level = release
build_flags =
${crowpanel_large_esp32s3_base.build_flags}
-D VIEW_320x240

View File

@@ -1,6 +1,7 @@
; Hackaday Communicator
[env:hackaday-communicator]
extends = esp32s3_base
board_level = release
board = hackaday-communicator
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -1,5 +1,6 @@
[env:heltec_capsule_sensor_v3]
extends = esp32s3_base
board_level = release
board = heltec_wifi_lora_32_V3
board_check = true
board_build.partitions = default_8MB.csv

View File

@@ -1,5 +1,6 @@
[env:heltec_sensor_hub]
extends = esp32s3_base
board_level = release
board = heltec_wifi_lora_32_V3
board_check = true

View File

@@ -24,6 +24,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = heltec_v4_base
board_level = release
build_flags =
${heltec_v4_base.build_flags}
-D HELTEC_V4_OLED
@@ -48,6 +49,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = heltec_v4_base
board_level = release
build_flags =
${heltec_v4_base.build_flags} ;-Os
-D HELTEC_V4_TFT

View File

@@ -24,6 +24,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = heltec_v4_r8_base
board_level = release
build_flags =
${heltec_v4_r8_base.build_flags}
-D HELTEC_V4_R8_OLED
@@ -46,6 +47,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = heltec_v4_r8_base
board_level = release
build_flags =
${heltec_v4_r8_base.build_flags} ;-Os
-D HELTEC_V4_R8_TFT

View File

@@ -12,6 +12,7 @@ custom_meshtastic_partition_scheme = 8MB
custom_meshtastic_has_ink_hud = true
extends = esp32s3_base
board_level = release
board = heltec_vision_master_e213
board_build.partitions = default_8MB.csv
build_flags =

View File

@@ -13,6 +13,7 @@ custom_meshtastic_partition_scheme = 8MB
custom_meshtastic_has_ink_hud = true
extends = esp32s3_base
board_level = release
board = heltec_vision_master_e290
board_build.partitions = default_8MB.csv
build_flags =
@@ -38,6 +39,7 @@ upload_speed = 115200
[env:heltec-vision-master-e290-inkhud]
extends = esp32s3_base, inkhud
board_level = release
board = heltec_vision_master_e290
board_build.partitions = default_8MB.csv
build_src_filter =

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = heltec_vision_master_t190
board_build.partitions = default_8MB.csv
build_flags =

View File

@@ -12,6 +12,7 @@ custom_meshtastic_partition_scheme = 8MB
custom_meshtastic_has_ink_hud = true
extends = esp32s3_base
board_level = release
board = heltec_wifi_lora_32_V3
board_build.partitions = default_8MB.csv
build_flags =
@@ -35,6 +36,7 @@ upload_speed = 115200
[env:heltec-wireless-paper-inkhud]
extends = esp32s3_base, inkhud
board_level = release
board = heltec_wifi_lora_32_V3
board_build.partitions = default_8MB.csv
build_src_filter =

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = heltec_wireless_tracker
board_build.partitions = default_8MB.csv
upload_protocol = esptool

View File

@@ -4,6 +4,7 @@ custom_meshtastic_images = heltec_wireless_tracker_v2.svg
custom_meshtastic_tags = Heltec
extends = esp32s3_base
board_level = release
board = heltec_wireless_tracker_v2
board_build.partitions = default_8MB.csv
upload_protocol = esptool

View File

@@ -10,6 +10,7 @@ custom_meshtastic_tags = Heltec
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = heltec_wifi_lora_32_V3
board_build.partitions = default_8MB.csv
# Temporary until espressif creates a release with this new target

View File

@@ -1,6 +1,7 @@
; M5stack Cardputer Advanced
[env:m5stack-cardputer-adv]
extends = esp32s3_base
board_level = release
board = m5stack-stamps3
board_check = true
board_build.partitions = default_8MB.csv

View File

@@ -1,6 +1,7 @@
; M5stack CoreS3
[env:m5stack-cores3]
extends = esp32s3_base
board_level = release
board = m5stack-cores3
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -17,6 +17,7 @@ board_build.psram_type = opi
board_build.arduino.memory_type = qio_opi
extends = esp32s3_base
board_level = release
build_flags =
${esp32s3_base.build_flags}
-D MESHNOLOGY_W10

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = esp32s3_base
board_level = release
board = esp32-s3-devkitc-1
; ESP32-S3R8: 8 MB OPI PSRAM, 16 MB QIO flash
board_build.partitions = default_16MB.csv

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = no
custom_meshtastic_has_mui = false
extends = esp32s3_base
board_level = release
board = mini-epaper-s3
board_check = true
upload_protocol = esptool
@@ -37,6 +38,7 @@ lib_deps =
[env:mini-epaper-s3-inkhud]
extends = esp32s3_base, inkhud
board_level = release
board = mini-epaper-s3
board_check = true
upload_protocol = esptool

View File

@@ -9,6 +9,7 @@ custom_meshtastic_partition_scheme = 8MB
custom_meshtastic_has_mui = true
extends = esp32s3_base
board_level = release
board = bpi_picow_esp32_s3
board_check = true
board_build.partitions = partition-table-8MB.csv
@@ -33,6 +34,7 @@ build_src_filter =
[env:picomputer-s3-tft]
extends = env:picomputer-s3
board_level = release
build_flags =
${env:picomputer-s3.build_flags}

View File

@@ -12,6 +12,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = false
extends = esp32s3_base
board_level = release
board = wiscore_rak3312
board_check = true
upload_protocol = esptool

View File

@@ -23,6 +23,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = esp32s3_base
board_level = release
board = wiscore_rak3312
board_check = true
upload_protocol = esptool
@@ -41,6 +42,7 @@ lib_deps =
[env:rak_wismesh_tap_v2-tft]
extends = env:rak_wismesh_tap_v2
board_level = release
; The MUI build overflows default_8MB.csv's 0x330000 app slots; use the MUI
; layout (large app0 + small flasher slot) like the other has_mui 8MB boards.
board_build.partitions = partition-table-8MB.csv

View File

@@ -12,6 +12,7 @@ custom_meshtastic_partition_scheme = 8MB
custom_meshtastic_has_mui = true
extends = esp32s3_base
board_level = release
platform_packages =
; Version needs to match the pioarduino version used in esp32_common.ini
platformio/framework-arduinoespressif32 @ https://github.com/mverch67/arduino-esp32#6dde0f3b58e32d9f884b94b4685b0f3a267c4624 ; 3.3.11

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = seeed-xiao-s3
board_check = true
board_build.partitions = default_8MB.csv

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = esp32s3_base
board_level = release
board = station-g2
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = esp32s3_base
board_level = release
board = station-g3
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -11,6 +11,7 @@ custom_meshtastic_tags = LilyGo
custom_meshtastic_has_mui = false
extends = esp32s3_base
board_level = release
board = t-beam-1w
board_build.partitions = default_8MB.csv
board_check = true

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = tbeam-1w.svg
custom_meshtastic_tags = LilyGo
extends = esp32s3_base
board_level = release
board = t-beam-bpf
board_build.partitions = default_16MB.csv
board_check = true

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 16MB
extends = esp32s3_base
board_level = release
board = t-deck-pro
board_check = true
upload_protocol = esptool

View File

@@ -12,6 +12,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = false
extends = esp32s3_base
board_level = release
board = t-deck-pro
board_check = true
upload_protocol = esptool

View File

@@ -13,6 +13,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = esp32s3_base
board_level = release
board = t-deck
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -1,5 +1,6 @@
[env:t-eth-elite]
extends = esp32s3_base
board_level = release
board = esp32s3box
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -11,6 +11,7 @@ custom_meshtastic_tags = LilyGo
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = t-watch-s3
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -55,6 +55,7 @@ lib_deps =
[env:t5s3-epaper-v1] ; H752
extends = t5s3_epaper_base
board_level = release
build_flags =
${t5s3_epaper_base.build_flags}
-D T5_S3_EPAPER_PRO_V1
@@ -62,6 +63,7 @@ build_flags =
[env:t5s3-epaper-v2] ; H752-01
extends = t5s3_epaper_base
board_level = release
build_flags =
${t5s3_epaper_base.build_flags}
-D T5_S3_EPAPER_PRO_V2

View File

@@ -12,6 +12,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = tbeam-s3-core
board_build.partitions = default_8MB.csv
board_check = true

View File

@@ -13,6 +13,7 @@ custom_meshtastic_partition_scheme = 16MB
custom_meshtastic_has_mui = true
extends = esp32s3_base
board_level = release
board = t-deck-pro ; same as T-Deck Pro
board_check = true
board_build.partitions = default_16MB.csv

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_has_ink_hud = true
extends = esp32s3_base
board_level = release
board = tlora-t3s3-v1
board_check = true
board_build.partitions = partition-table-t3s3.csv
@@ -39,6 +40,7 @@ lib_deps =
[env:tlora-t3s3-epaper-inkhud]
extends = esp32s3_base, inkhud
board_level = release
board = tlora-t3s3-v1
board_check = true
board_build.partitions = partition-table-t3s3.csv

View File

@@ -10,6 +10,7 @@ custom_meshtastic_tags = LilyGo
custom_meshtastic_requires_dfu = true
extends = esp32s3_base
board_level = release
board = tlora-t3s3-v1
board_check = true
board_build.partitions = partition-table-t3s3.csv

View File

@@ -9,6 +9,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = heltec_wireless_tracker
board_build.partitions = default_8MB.csv
upload_protocol = esp-builtin
@@ -35,6 +36,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = heltec_wireless_tracker
board_build.partitions = default_8MB.csv
upload_protocol = esp-builtin
@@ -60,6 +62,7 @@ custom_meshtastic_display_name = TrackSenger (big OLED)
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = heltec_wireless_tracker
board_build.partitions = default_8MB.csv
upload_protocol = esp-builtin

View File

@@ -11,6 +11,7 @@ custom_meshtastic_requires_dfu = true
custom_meshtastic_partition_scheme = 8MB
extends = esp32s3_base
board_level = release
board = unphone
board_build.partitions = partition-table-8MB.csv
upload_speed = 921600

View File

@@ -11,6 +11,7 @@ custom_meshtastic_tags = Elecrow
custom_meshtastic_has_ink_hud = true
extends = nrf52840_base
board_level = release
board = ThinkNode-M1
board_check = true
debug_tool = jlink
@@ -41,6 +42,7 @@ lib_deps =
[env:thinknode_m1-inkhud]
extends = nrf52840_base, inkhud
board_level = release
board = ThinkNode-M1
board_check = true
debug_tool = jlink

View File

@@ -4,6 +4,7 @@ custom_meshtastic_images = thinknode_m3.svg
custom_meshtastic_tags = Elecrow
extends = nrf52840_base
board_level = release
board = ThinkNode-M3
board_check = true
debug_tool = jlink

View File

@@ -1,6 +1,7 @@
; ThinkNode M4 - Powerbank nrf52840/LR1110 by Elecrow
[env:thinknode_m4]
extends = nrf52840_base
board_level = release
board = ThinkNode-M4
board_check = true
debug_tool = jlink

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = thinknode_m6.svg
custom_meshtastic_tags = Elecrow
extends = nrf52840_base
board_level = release
board = ThinkNode-M6
board_check = true
debug_tool = jlink

View File

@@ -10,6 +10,7 @@ custom_meshtastic_display_name = Elecrow ThinkNode M8
custom_meshtastic_actively_supported = true
extends = nrf52840_base
board_level = release
board = ThinkNode-M8
board_check = true
debug_tool = jlink

View File

@@ -9,6 +9,7 @@ custom_meshtastic_display_name = Canary One
custom_meshtastic_tags = Canary
extends = nrf52840_base
board_level = release
board = canaryone
debug_tool = jlink

View File

@@ -11,6 +11,7 @@ custom_meshtastic_tags = DIY
custom_meshtastic_requires_dfu = true
extends = nrf52840_base
board_level = release
board = promicro-nrf52840
build_flags = ${nrf52840_base.build_flags}
-I variants/nrf52840/diy/nrf52_promicro_diy_tcxo

View File

@@ -1,6 +1,7 @@
; The very slick RAK wireless RAK 4631 / 4630 board - Unified firmware for 5005/19003, with or without OLED RAK 1921
[env:feather_diy]
extends = nrf52840_base
board_level = release
board = adafruit_feather_nrf52840
build_flags = ${nrf52840_base.build_flags}
-Ivariants/nrf52840/feather_diy

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = heltec-mesh-node-t096.svg, heltec-mesh-node-t096-case
custom_meshtastic_tags = Heltec
extends = nrf52840_base
board_level = release
board = heltec_mesh_node_t096
debug_tool = jlink

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = heltec-mesh-node-t1.svg
custom_meshtastic_tags = Heltec
extends = nrf52840_base
board_level = release
board = heltec_mesh_node_t1
debug_tool = jlink

View File

@@ -5,6 +5,7 @@ custom_meshtastic_images = heltec_mesh_pocket.svg
custom_meshtastic_tags = Heltec
extends = nrf52840_base
board_level = release
board = heltec_mesh_pocket
debug_tool = jlink
custom_device_hw_model = 94
@@ -43,6 +44,7 @@ lib_deps =
[env:heltec-mesh-pocket-5000-inkhud]
extends = nrf52840_base, inkhud
board_level = release
board = heltec_mesh_pocket
custom_meshtastic_hw_model = 94
custom_meshtastic_hw_model_slug = HELTEC_MESH_POCKET
@@ -70,6 +72,7 @@ custom_meshtastic_images = heltec_mesh_pocket.svg
custom_meshtastic_tags = Heltec
extends = nrf52840_base
board_level = release
board = heltec_mesh_pocket
debug_tool = jlink
custom_meshtastic_hw_model = 94
@@ -107,6 +110,7 @@ lib_deps =
[env:heltec-mesh-pocket-10000-inkhud]
extends = nrf52840_base, inkhud
board_level = release
board = heltec_mesh_pocket
custom_meshtastic_hw_model = 94
custom_meshtastic_hw_model_slug = HELTEC_MESH_POCKET

View File

@@ -28,11 +28,13 @@ custom_meshtastic_images = heltec-mesh-solar.svg
custom_meshtastic_tags = Heltec
extends = heltec_mesh_solar_base
board_level = release
build_flags = ${heltec_mesh_solar_base.build_flags}
-DSPI_INTERFACES_COUNT=1
[env:heltec-mesh-solar-eink]
extends = heltec_mesh_solar_base
board_level = release
build_flags = ${heltec_mesh_solar_base.build_flags}
-DHELTEC_MESH_SOLAR_EINK
-DSPI_INTERFACES_COUNT=2
@@ -71,6 +73,7 @@ lib_deps =
[env:heltec-mesh-solar-inkhud]
extends = heltec_mesh_solar_base, inkhud
board_level = release
build_src_filter = ${heltec_mesh_solar_base.build_src_filter} ${inkhud.build_src_filter}
build_flags = ${heltec_mesh_solar_base.build_flags}
${inkhud.build_flags}
@@ -92,6 +95,7 @@ lib_deps =
[env:heltec-mesh-solar-oled]
extends = heltec_mesh_solar_base
board_level = release
build_flags = ${heltec_mesh_solar_base.build_flags}
-DHELTEC_MESH_SOLAR_OLED
-DSPI_INTERFACES_COUNT=1
@@ -103,6 +107,7 @@ build_flags = ${heltec_mesh_solar_base.build_flags}
[env:heltec-mesh-solar-tft]
extends = heltec_mesh_solar_base
board_level = release
build_flags = ${heltec_mesh_solar_base.build_flags}
-UOLEDDISPLAY_REDUCE_MEMORY ; TFTDisplay.cpp needs the lib's buffer_back for dirty-window diffing
-DHELTEC_MESH_SOLAR_TFT

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = heltec-mesh-tower-v2.svg
custom_meshtastic_tags = Heltec
extends = nrf52840_base
board_level = release
board = heltec_mesh_tower_v2
debug_tool = jlink

View File

@@ -9,6 +9,7 @@ custom_meshtastic_images = muzi_base.svg
custom_meshtastic_tags = muzi
extends = nrf52840_base
board_level = release
board = muzi-base
build_flags = ${nrf52840_base.build_flags}
-I variants/nrf52840/muzi_base

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = nano-g2-ultra.svg
custom_meshtastic_tags = B&Q
extends = nrf52840_base
board_level = release
board = nano-g2-ultra
debug_tool = jlink

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = muzi_r1_neo.svg
custom_meshtastic_tags = muzi
extends = nrf52840_base
board_level = release
board = r1-neo
board_check = true
build_flags = ${nrf52840_base.build_flags}

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = rak2560.svg
custom_meshtastic_tags = RAK
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
board_check = true
build_flags = ${nrf52840_base.build_flags}

View File

@@ -11,6 +11,7 @@ custom_meshtastic_tags = RAK
custom_meshtastic_requires_dfu = true
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
board_check = true
build_flags = ${nrf52840_base.build_flags}
@@ -39,6 +40,7 @@ lib_deps =
; RAK10729 WisMesh Repeater Mini V2 HP (RAK3401 + RAK19007 + RAK13302 + solar battery)
[env:rak_wismesh_repeater_mini_hp]
extends = env:rak3401-1watt
board_level = release
custom_meshtastic_display_name = RAK WisMesh Repeater Mini V2 HP
custom_meshtastic_images = rak3401.svg
build_flags =

View File

@@ -47,6 +47,7 @@ lib_deps =
; RAK10728 WisMesh Repeater Mini V2 (RAK4631 + RAK19003 + solar battery + GPS module)
[env:rak_wismesh_repeater_mini]
extends = env:rak4631
board_level = release
custom_meshtastic_display_name = RAK WisMesh Repeater Mini V2
custom_meshtastic_images = rak4631.svg
build_flags =
@@ -59,6 +60,7 @@ build_flags =
; RAK WisMesh Pocket V3 - rak4631 pin map + OLED; no ethernet (unlike env:rak4631)
[env:rak_wismesh_pocket]
extends = env:rak4631
board_level = release
custom_meshtastic_display_name = RAK WisMesh Pocket V3
custom_meshtastic_images = rak4631.svg
build_flags =

View File

@@ -1,6 +1,7 @@
; The very slick RAK wireless RAK 4631 / 4630 board - Firmware for 5005 with the RAK 14000 ePaper
[env:rak4631_eink]
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
build_flags = ${nrf52840_base.build_flags}
-I variants/nrf52840/rak4631_epaper

View File

@@ -1,6 +1,7 @@
; The very slick RAK wireless RAK 4631 / 4630 board - Unified firmware for 5005/19003, with or without OLED RAK 1921
[env:rak4631_eth_gw]
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
board_check = true
build_flags = ${nrf52840_base.build_flags}

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = meteor_pro.svg
custom_meshtastic_tags = NomadStar
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
board_check = true
build_flags = ${nrf52840_base.build_flags}

View File

@@ -5,6 +5,7 @@ custom_meshtastic_images = rak_wismesh_tag.svg
custom_meshtastic_tags = RAK
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
board_check = true
custom_meshtastic_hw_model = 105
@@ -26,6 +27,7 @@ build_src_filter = ${nrf52_base.build_src_filter} +<../variants/nrf52840/rak_wis
; RAK WisMesh Pod - same board as Tag (no user buttons on hardware; shares Tag pin map)
[env:rak_wismesh_pod]
extends = env:rak_wismeshtag
board_level = release
custom_meshtastic_display_name = RAK WisMesh Pod
build_flags =
${env:rak_wismeshtag.build_flags}

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = rak-wismeshtap.svg
custom_meshtastic_tags = RAK
extends = nrf52840_base
board_level = release
board = wiscore_rak4631
build_flags = ${nrf52840_base.build_flags}
-UOLEDDISPLAY_REDUCE_MEMORY ; TFTDisplay.cpp needs the lib's buffer_back for dirty-window diffing

View File

@@ -10,6 +10,7 @@ custom_meshtastic_tags = Seeed
board = seeed_solar_node
extends = nrf52840_base
board_level = release
;board_level = extra
build_flags = ${nrf52840_base.build_flags}
-I variants/nrf52840/seeed_solar_node

View File

@@ -11,6 +11,7 @@ custom_meshtastic_has_ink_hud = true
board = seeed_wio_tracker_L1
extends = nrf52840_base
board_level = release
;board_level = extra
build_flags = ${nrf52840_base.build_flags}
-I variants/nrf52840/seeed_wio_tracker_L1_eink
@@ -41,6 +42,7 @@ debug_tool = jlink
[env:seeed_wio_tracker_L1_eink-inkhud]
board = seeed_wio_tracker_L1
extends = env:seeed_wio_tracker_L1_eink, inkhud
board_level = release
build_flags =
${env:seeed_wio_tracker_L1_eink.build_flags}
${inkhud.build_flags}

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = seeed_xiao_nrf52_kit.svg
custom_meshtastic_tags = Seeed
extends = nrf52840_base
board_level = release
board = xiao_ble_sense
build_flags = ${nrf52840_base.build_flags}
-I variants/nrf52840/seeed_xiao_nrf52840_kit

View File

@@ -10,6 +10,7 @@ custom_meshtastic_images = techo_lite.svg
custom_meshtastic_tags = LilyGo
extends = nrf52840_base
board_level = release
board = t-echo
board_check = true
debug_tool = jlink

View File

@@ -11,6 +11,7 @@ custom_meshtastic_tags = LilyGo
custom_meshtastic_has_ink_hud = true
extends = nrf52840_base
board_level = release
board = t-echo
board_check = true
debug_tool = jlink
@@ -37,6 +38,7 @@ lib_deps =
[env:t-echo-inkhud]
extends = nrf52840_base, inkhud
board_level = release
board = t-echo
board_check = true
debug_tool = jlink

View File

@@ -9,6 +9,7 @@ custom_meshtastic_tags = LilyGo
custom_meshtastic_requires_dfu = true
extends = nrf52840_base
board_level = release
board = t-impulse-plus
build_flags = ${nrf52840_base.build_flags}

View File

@@ -1,6 +1,7 @@
; The black Wio-WM1110 Dev Kit with sensors and the WM1110 module
[env:wio-sdk-wm1110]
extends = nrf52840_base
board_level = release
board = wio-sdk-wm1110
extra_scripts =

View File

@@ -11,6 +11,7 @@ custom_meshtastic_tags = Seeed
custom_meshtastic_requires_dfu = true
extends = nrf52840_base
board_level = release
board = wio-tracker-wm1110
build_flags = ${nrf52840_base.build_flags}
-Ivariants/nrf52840/wio-tracker-wm1110

View File

@@ -10,6 +10,7 @@ custom_meshtastic_tags = RAK
custom_meshtastic_requires_dfu = true
extends = rp2040_base
board_level = release
board = rakwireless_rak11300
upload_protocol = picotool
# add our variants files to the include and src paths

View File

@@ -9,6 +9,7 @@ custom_meshtastic_tags = Waveshare
custom_meshtastic_requires_dfu = true
extends = rp2040_base
board_level = release
board = rpipico
upload_protocol = picotool
# add our variants files to the include and src paths

View File

@@ -10,6 +10,7 @@ custom_meshtastic_tags = RPi, DIY
custom_meshtastic_requires_dfu = true
extends = rp2040_base
board_level = release
board = rpipico
upload_protocol = picotool
# add our variants files to the include and src paths

View File

@@ -1,5 +1,6 @@
[env:seeed_xiao_rp2040]
extends = rp2040_base
board_level = release
board = seeed_xiao_rp2040
upload_protocol = picotool
# add our variants files to the include and src paths

View File

@@ -1,5 +1,6 @@
[env:pico2]
extends = rp2350_base
board_level = release
board = rpipico2
upload_protocol = picotool

View File

@@ -1,5 +1,6 @@
[env:seeed_xiao_rp2350]
extends = rp2350_base
board_level = release
board = seeed_xiao_rp2350
upload_protocol = picotool