Skip to content

Make board_level = release explicit instead of relying on an empty value - #11305

Merged
vidplace7 merged 1 commit into
developfrom
board_level-renames
Jul 31, 2026
Merged

Make board_level = release explicit instead of relying on an empty value#11305
vidplace7 merged 1 commit into
developfrom
board_level-renames

Conversation

@vidplace7

@vidplace7 vidplace7 commented Jul 31, 2026

Copy link
Copy Markdown
Member

What & why

generate_ci_matrix.py treated absence of board_level as "this is a release board". That sentinel is an inheritance footgun: an env's level was decided by whatever it inherited (or failed to inherit) through extends, so a variant could silently land in — or drop out of — the release matrix without anything in its platformio.ini saying so, and forgetting the key entirely was indistinguishable from deliberately choosing release.

This makes the release level explicit. Every variant env now declares one of pr, release, or extra, and the matrix generator refuses to run if any env is missing the key or uses an unrecognized value.

What changed

  • variants/**/platformio.ini (97 files, +122 lines): added board_level = release to every env that had no level of its own and inherited none. Existing board_level = pr and board_level = extra values were left untouched. These are pure one-line additions — no other content changed in any variant file.
  • bin/generate_ci_matrix.py:
    • Added a BOARD_LEVELS constant documenting the three levels.
    • The release branch now tests board_level == "release" instead of not board_level.
    • New: exits non-zero on a missing or unrecognized board_level, naming the offending env. This is the point of the change — a new variant can no longer omit the key and get a level by accident.
    • Collapsed the nested conditional in the check path into an equivalent single condition.
  • .github/copilot-instructions.md: documented all three levels and the new hard requirement. Also corrected a stale claim that custom_meshtastic_support_level controls PR-vs-merge builds — it does not; nothing reads it for matrix filtering. It is variant metadata that bin/platformio-custom.py emits as supportLevel in the generated hardware list.

Behavior

The generated CI matrix is unchanged. This is a refactor of how the release level is spelled, not which boards get built. The only intended behavior change is the new fail-fast validation, which cannot trigger on this branch precisely because all 249 envs now declare a level.

Testing

Built two git worktrees — develop (before) and this branch (after) — and diffed the generator's output across 14 targets (all 12 variants/ platform dirs plus all and check) × 4 level forms (bare, --level pr, --level extra, --level pr extra) = 56 invocations per tree, 112 runs. Each pair was compared both as an exact stdout string and as an order-insensitive board set.

All 56 pairs are byte-for-byte identical — not merely same-set-different-order, which would still have reshuffled CI job ordering.

Invocation Boards Result
all 141 identical
all --level pr 19 identical
all --level extra 249 identical
all --level pr extra 127 identical
check 80 identical
check --level pr 9 identical

check = 80 and check --level extra = 80 both match, which specifically confirms the rewritten check path still keeps extra-level board_check envs in the non-PR check matrix.

The new validation was verified separately by running the updated script against develop's un-migrated variants, where it correctly fails:

Error: environment 'rp2040-lora' has no value for 'board_level'; expected one of: pr, release, extra
Error: environment 'rp2040-lora' has 'Release' for 'board_level'; expected one of: pr, release, extra

Also confirmed PlatformIO already strips trailing whitespace and inline ; comments from the value, so board_level = release ; note parses fine and needs no special handling.

Reviewer notes

  • Two envs are easy to miss when sweeping this file set: t5s3-epaper-v1 and t5s3-epaper-v2 in variants/esp32s3/t5s3_epaper/platformio.ini. Their section headers carry trailing comments ([env:t5s3-epaper-v1] ; H752), which defeats a naive ^\[env:...\]$ match. Both are included here; the post-change audit confirms all 249 envs resolve to exactly one level (122 release / 108 extra / 19 pr), zero missing.
  • Nothing under src/ or test/ is touched — there is no runtime/firmware change, so there is no device-level regression surface.
  • --level still accepts only pr and extra. Adding release as a choice would be redundant (the bare form already means "pr + release") and ambiguous in combinations like --level pr release.

🤝 Attestations

  • I have tested that my proposed changes behave as described.
  • I have tested that my proposed changes do not cause any obvious regressions on the following devices:
    • Heltec (Lora32) V3
    • LilyGo T-Deck
    • LilyGo T-Beam
    • RAK WisBlock 4631
    • Seeed Studio T-1000E tracker card
    • Other (please specify below)

On-device testing is not applicable: this changes only CI matrix metadata and the matrix generator. No firmware source is modified, and the produced build matrix is byte-identical to develop, so every board builds exactly as it did before.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • CI Improvements

    • Standardized hardware classification into PR, release, and extra levels.
    • CI matrix generation now validates classifications and applies clearer default filtering.
    • Release-level hardware is now included in appropriate builds.
  • Documentation

    • Clarified required hardware classification settings and how metadata is used.

@vidplace7
vidplace7 requested a review from NomDeTom July 31, 2026 14:48
@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 650e6f58-79fb-4ea7-9a16-01b0489b857c

📥 Commits

Reviewing files that changed from the base of the PR and between 2933ddb and 478cba4.

📒 Files selected for processing (100)
  • .github/copilot-instructions.md
  • bin/generate_ci_matrix.py
  • variants/esp32/chatter2/platformio.ini
  • variants/esp32/diy/hydra/platformio.ini
  • variants/esp32/diy/v1/platformio.ini
  • variants/esp32/m5stack_core/platformio.ini
  • variants/esp32/m5stack_coreink/platformio.ini
  • variants/esp32/nano-g1-explorer/platformio.ini
  • variants/esp32/nano-g1/platformio.ini
  • variants/esp32/radiomaster_900_bandit/platformio.ini
  • variants/esp32/radiomaster_900_bandit_micro/platformio.ini
  • variants/esp32/radiomaster_900_bandit_nano/platformio.ini
  • variants/esp32/rak11200/platformio.ini
  • variants/esp32/station-g1/platformio.ini
  • variants/esp32/tbeam/platformio.ini
  • variants/esp32/tlora_v2_1_16/platformio.ini
  • variants/esp32/tlora_v3_3_0_tcxo/platformio.ini
  • variants/esp32c3/heltec_hru_3601/platformio.ini
  • variants/esp32c6/m5stack_unitc6l/platformio.ini
  • variants/esp32s3/CDEBYTE_EoRa-S3/platformio.ini
  • variants/esp32s3/ELECROW-ThinkNode-G3/platformio.ini
  • variants/esp32s3/ELECROW-ThinkNode-M2/platformio.ini
  • variants/esp32s3/ELECROW-ThinkNode-M5/platformio.ini
  • variants/esp32s3/elecrow_panel/platformio.ini
  • variants/esp32s3/hackaday-communicator/platformio.ini
  • variants/esp32s3/heltec_capsule_sensor_v3/platformio.ini
  • variants/esp32s3/heltec_sensor_hub/platformio.ini
  • variants/esp32s3/heltec_v4/platformio.ini
  • variants/esp32s3/heltec_v4_r8/platformio.ini
  • variants/esp32s3/heltec_vision_master_e213/platformio.ini
  • variants/esp32s3/heltec_vision_master_e290/platformio.ini
  • variants/esp32s3/heltec_vision_master_t190/platformio.ini
  • variants/esp32s3/heltec_wireless_paper/platformio.ini
  • variants/esp32s3/heltec_wireless_tracker/platformio.ini
  • variants/esp32s3/heltec_wireless_tracker_v2/platformio.ini
  • variants/esp32s3/heltec_wsl_v3/platformio.ini
  • variants/esp32s3/m5stack_cardputer_adv/platformio.ini
  • variants/esp32s3/m5stack_cores3/platformio.ini
  • variants/esp32s3/meshnology-w10/platformio.ini
  • variants/esp32s3/meshnology-w12/platformio.ini
  • variants/esp32s3/mini-epaper-s3/platformio.ini
  • variants/esp32s3/picomputer-s3/platformio.ini
  • variants/esp32s3/rak3312/platformio.ini
  • variants/esp32s3/rak_wismesh_tap_v2/platformio.ini
  • variants/esp32s3/seeed-sensecap-indicator/platformio.ini
  • variants/esp32s3/seeed_xiao_s3/platformio.ini
  • variants/esp32s3/station-g2/platformio.ini
  • variants/esp32s3/station-g3/platformio.ini
  • variants/esp32s3/t-beam-1w/platformio.ini
  • variants/esp32s3/t-beam-bpf/platformio.ini
  • variants/esp32s3/t-deck-pro-v1_1/platformio.ini
  • variants/esp32s3/t-deck-pro/platformio.ini
  • variants/esp32s3/t-deck/platformio.ini
  • variants/esp32s3/t-eth-elite/platformio.ini
  • variants/esp32s3/t-watch-s3/platformio.ini
  • variants/esp32s3/t5s3_epaper/platformio.ini
  • variants/esp32s3/tbeam-s3-core/platformio.ini
  • variants/esp32s3/tlora-pager/platformio.ini
  • variants/esp32s3/tlora_t3s3_epaper/platformio.ini
  • variants/esp32s3/tlora_t3s3_v1/platformio.ini
  • variants/esp32s3/tracksenger/platformio.ini
  • variants/esp32s3/unphone/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M1/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M3/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M4/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M6/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M8/platformio.ini
  • variants/nrf52840/canaryone/platformio.ini
  • variants/nrf52840/diy/nrf52_promicro_diy_tcxo/platformio.ini
  • variants/nrf52840/feather_diy/platformio.ini
  • variants/nrf52840/heltec_mesh_node_t096/platformio.ini
  • variants/nrf52840/heltec_mesh_node_t1/platformio.ini
  • variants/nrf52840/heltec_mesh_pocket/platformio.ini
  • variants/nrf52840/heltec_mesh_solar/platformio.ini
  • variants/nrf52840/heltec_mesh_tower_v2/platformio.ini
  • variants/nrf52840/muzi_base/platformio.ini
  • variants/nrf52840/nano-g2-ultra/platformio.ini
  • variants/nrf52840/r1-neo/platformio.ini
  • variants/nrf52840/rak2560/platformio.ini
  • variants/nrf52840/rak3401_1watt/platformio.ini
  • variants/nrf52840/rak4631/platformio.ini
  • variants/nrf52840/rak4631_epaper/platformio.ini
  • variants/nrf52840/rak4631_eth_gw/platformio.ini
  • variants/nrf52840/rak4631_nomadstar_meteor_pro/platformio.ini
  • variants/nrf52840/rak_wismeshtag/platformio.ini
  • variants/nrf52840/rak_wismeshtap/platformio.ini
  • variants/nrf52840/seeed_solar_node/platformio.ini
  • variants/nrf52840/seeed_wio_tracker_L1_eink/platformio.ini
  • variants/nrf52840/seeed_xiao_nrf52840_kit/platformio.ini
  • variants/nrf52840/t-echo-lite/platformio.ini
  • variants/nrf52840/t-echo/platformio.ini
  • variants/nrf52840/t-impulse-plus/platformio.ini
  • variants/nrf52840/wio-sdk-wm1110/platformio.ini
  • variants/nrf52840/wio-tracker-wm1110/platformio.ini
  • variants/rp2040/rak11310/platformio.ini
  • variants/rp2040/rp2040-lora/platformio.ini
  • variants/rp2040/rpipico/platformio.ini
  • variants/rp2040/seeed_xiao_rp2040/platformio.ini
  • variants/rp2350/rpipico2/platformio.ini
  • variants/rp2350/seeed_xiao_rp2350/platformio.ini
🚧 Files skipped from review as they are similar to previous changes (98)
  • variants/esp32s3/heltec_v4/platformio.ini
  • variants/esp32s3/heltec_wireless_paper/platformio.ini
  • variants/esp32/m5stack_core/platformio.ini
  • variants/nrf52840/rak2560/platformio.ini
  • variants/esp32s3/heltec_v4_r8/platformio.ini
  • variants/esp32/chatter2/platformio.ini
  • variants/esp32/nano-g1-explorer/platformio.ini
  • variants/esp32/station-g1/platformio.ini
  • variants/esp32/tbeam/platformio.ini
  • variants/esp32/radiomaster_900_bandit_micro/platformio.ini
  • variants/esp32s3/heltec_wireless_tracker/platformio.ini
  • variants/esp32s3/hackaday-communicator/platformio.ini
  • variants/esp32s3/heltec_vision_master_t190/platformio.ini
  • variants/rp2040/rp2040-lora/platformio.ini
  • variants/esp32s3/heltec_capsule_sensor_v3/platformio.ini
  • variants/esp32/rak11200/platformio.ini
  • variants/esp32s3/heltec_vision_master_e290/platformio.ini
  • variants/esp32/radiomaster_900_bandit_nano/platformio.ini
  • variants/esp32s3/heltec_wsl_v3/platformio.ini
  • variants/esp32c6/m5stack_unitc6l/platformio.ini
  • variants/esp32s3/ELECROW-ThinkNode-G3/platformio.ini
  • variants/esp32/m5stack_coreink/platformio.ini
  • variants/esp32s3/unphone/platformio.ini
  • variants/esp32s3/ELECROW-ThinkNode-M2/platformio.ini
  • variants/esp32s3/picomputer-s3/platformio.ini
  • variants/esp32s3/meshnology-w12/platformio.ini
  • variants/esp32s3/t-eth-elite/platformio.ini
  • variants/esp32s3/meshnology-w10/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M8/platformio.ini
  • variants/esp32/diy/v1/platformio.ini
  • variants/esp32/radiomaster_900_bandit/platformio.ini
  • variants/esp32/nano-g1/platformio.ini
  • variants/esp32s3/ELECROW-ThinkNode-M5/platformio.ini
  • .github/copilot-instructions.md
  • variants/esp32s3/rak_wismesh_tap_v2/platformio.ini
  • variants/esp32/tlora_v3_3_0_tcxo/platformio.ini
  • variants/nrf52840/heltec_mesh_node_t096/platformio.ini
  • variants/esp32s3/tbeam-s3-core/platformio.ini
  • variants/esp32/tlora_v2_1_16/platformio.ini
  • variants/nrf52840/rak4631_nomadstar_meteor_pro/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M1/platformio.ini
  • variants/esp32s3/CDEBYTE_EoRa-S3/platformio.ini
  • variants/esp32s3/m5stack_cardputer_adv/platformio.ini
  • variants/rp2040/rak11310/platformio.ini
  • variants/esp32s3/tlora-pager/platformio.ini
  • variants/esp32s3/t-deck-pro/platformio.ini
  • variants/esp32s3/elecrow_panel/platformio.ini
  • variants/esp32s3/m5stack_cores3/platformio.ini
  • variants/esp32s3/rak3312/platformio.ini
  • variants/esp32s3/heltec_wireless_tracker_v2/platformio.ini
  • variants/nrf52840/muzi_base/platformio.ini
  • variants/rp2350/rpipico2/platformio.ini
  • variants/nrf52840/feather_diy/platformio.ini
  • variants/esp32s3/station-g2/platformio.ini
  • variants/esp32s3/seeed_xiao_s3/platformio.ini
  • variants/nrf52840/canaryone/platformio.ini
  • variants/esp32s3/seeed-sensecap-indicator/platformio.ini
  • variants/nrf52840/nano-g2-ultra/platformio.ini
  • variants/esp32s3/tlora_t3s3_epaper/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M3/platformio.ini
  • variants/rp2350/seeed_xiao_rp2350/platformio.ini
  • variants/nrf52840/rak3401_1watt/platformio.ini
  • variants/nrf52840/heltec_mesh_tower_v2/platformio.ini
  • variants/esp32s3/t-watch-s3/platformio.ini
  • variants/esp32s3/t-deck-pro-v1_1/platformio.ini
  • variants/esp32/diy/hydra/platformio.ini
  • variants/esp32s3/heltec_vision_master_e213/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M6/platformio.ini
  • variants/esp32s3/station-g3/platformio.ini
  • variants/nrf52840/diy/nrf52_promicro_diy_tcxo/platformio.ini
  • variants/rp2040/rpipico/platformio.ini
  • variants/rp2040/seeed_xiao_rp2040/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M4/platformio.ini
  • variants/esp32s3/heltec_sensor_hub/platformio.ini
  • variants/esp32s3/tracksenger/platformio.ini
  • variants/nrf52840/wio-tracker-wm1110/platformio.ini
  • variants/esp32s3/t5s3_epaper/platformio.ini
  • variants/nrf52840/t-echo-lite/platformio.ini
  • variants/esp32s3/t-beam-1w/platformio.ini
  • variants/esp32s3/tlora_t3s3_v1/platformio.ini
  • variants/nrf52840/t-impulse-plus/platformio.ini
  • variants/nrf52840/r1-neo/platformio.ini
  • variants/nrf52840/heltec_mesh_node_t1/platformio.ini
  • variants/nrf52840/heltec_mesh_pocket/platformio.ini
  • variants/nrf52840/heltec_mesh_solar/platformio.ini
  • variants/esp32s3/t-deck/platformio.ini
  • variants/esp32s3/mini-epaper-s3/platformio.ini
  • variants/esp32s3/t-beam-bpf/platformio.ini
  • variants/esp32c3/heltec_hru_3601/platformio.ini
  • variants/nrf52840/rak_wismeshtag/platformio.ini
  • variants/nrf52840/rak4631_eth_gw/platformio.ini
  • variants/nrf52840/rak_wismeshtap/platformio.ini
  • variants/nrf52840/rak4631_epaper/platformio.ini
  • variants/nrf52840/t-echo/platformio.ini
  • variants/nrf52840/seeed_wio_tracker_L1_eink/platformio.ini
  • variants/nrf52840/wio-sdk-wm1110/platformio.ini
  • variants/nrf52840/seeed_xiao_nrf52840_kit/platformio.ini
  • variants/nrf52840/seeed_solar_node/platformio.ini

📝 Walkthrough

Walkthrough

The CI matrix generator now requires valid board_level metadata for every PlatformIO environment. Updated ESP32, nRF52840, RP2040, and RP2350 environments are classified as release. Documentation defines board-level values and filtering behavior.

Changes

Board-Level CI Classification

Layer / File(s) Summary
CI contract and filtering
.github/copilot-instructions.md, bin/generate_ci_matrix.py
Documents pr, release, and extra board levels. The generator validates board_level and updates matrix filtering.
ESP32 release classification
variants/esp32/*, variants/esp32c3/*, variants/esp32c6/*, variants/esp32s3/*
PlatformIO environments now declare board_level = release.
nRF and RP release classification
variants/nrf52840/*, variants/rp2040/*, variants/rp2350/*
PlatformIO environments now declare board_level = release.

Estimated code review effort: 2 (Simple) | ~15 minutes

Possibly related PRs

Suggested reviewers: thebentern, ethan-chen1234-zy

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: making release board levels explicit instead of relying on empty values.
Description check ✅ Passed The description explains the motivation, changes, behavior, validation, testing results, and why device testing does not apply.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch board_level-renames

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@bin/generate_ci_matrix.py`:
- Around line 49-62: Fix the indentation in the board_level validation block
containing the if statement checking board_level not in BOARD_LEVELS, the print
statement with the error message, and the exit call, ensuring each nesting level
uses exactly four spaces. Also re-indent the board_level filtering blocks in the
subsequent code sections to maintain consistent four-space indentation
throughout all related blocks. Run Flake8 to verify E111 and E114 errors are
resolved before merging.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 7e01b739-bf88-4064-8350-282f6410d159

📥 Commits

Reviewing files that changed from the base of the PR and between 33a0f8f and 2933ddb.

📒 Files selected for processing (99)
  • .github/copilot-instructions.md
  • bin/generate_ci_matrix.py
  • variants/esp32/chatter2/platformio.ini
  • variants/esp32/diy/hydra/platformio.ini
  • variants/esp32/diy/v1/platformio.ini
  • variants/esp32/m5stack_core/platformio.ini
  • variants/esp32/m5stack_coreink/platformio.ini
  • variants/esp32/nano-g1-explorer/platformio.ini
  • variants/esp32/nano-g1/platformio.ini
  • variants/esp32/radiomaster_900_bandit/platformio.ini
  • variants/esp32/radiomaster_900_bandit_micro/platformio.ini
  • variants/esp32/radiomaster_900_bandit_nano/platformio.ini
  • variants/esp32/rak11200/platformio.ini
  • variants/esp32/station-g1/platformio.ini
  • variants/esp32/tbeam/platformio.ini
  • variants/esp32/tlora_v2_1_16/platformio.ini
  • variants/esp32/tlora_v3_3_0_tcxo/platformio.ini
  • variants/esp32c3/heltec_hru_3601/platformio.ini
  • variants/esp32c6/m5stack_unitc6l/platformio.ini
  • variants/esp32s3/CDEBYTE_EoRa-S3/platformio.ini
  • variants/esp32s3/ELECROW-ThinkNode-G3/platformio.ini
  • variants/esp32s3/ELECROW-ThinkNode-M2/platformio.ini
  • variants/esp32s3/ELECROW-ThinkNode-M5/platformio.ini
  • variants/esp32s3/elecrow_panel/platformio.ini
  • variants/esp32s3/hackaday-communicator/platformio.ini
  • variants/esp32s3/heltec_capsule_sensor_v3/platformio.ini
  • variants/esp32s3/heltec_sensor_hub/platformio.ini
  • variants/esp32s3/heltec_v4/platformio.ini
  • variants/esp32s3/heltec_v4_r8/platformio.ini
  • variants/esp32s3/heltec_vision_master_e213/platformio.ini
  • variants/esp32s3/heltec_vision_master_e290/platformio.ini
  • variants/esp32s3/heltec_vision_master_t190/platformio.ini
  • variants/esp32s3/heltec_wireless_paper/platformio.ini
  • variants/esp32s3/heltec_wireless_tracker/platformio.ini
  • variants/esp32s3/heltec_wireless_tracker_v2/platformio.ini
  • variants/esp32s3/heltec_wsl_v3/platformio.ini
  • variants/esp32s3/m5stack_cardputer_adv/platformio.ini
  • variants/esp32s3/m5stack_cores3/platformio.ini
  • variants/esp32s3/meshnology-w10/platformio.ini
  • variants/esp32s3/meshnology-w12/platformio.ini
  • variants/esp32s3/mini-epaper-s3/platformio.ini
  • variants/esp32s3/picomputer-s3/platformio.ini
  • variants/esp32s3/rak3312/platformio.ini
  • variants/esp32s3/rak_wismesh_tap_v2/platformio.ini
  • variants/esp32s3/seeed-sensecap-indicator/platformio.ini
  • variants/esp32s3/seeed_xiao_s3/platformio.ini
  • variants/esp32s3/station-g2/platformio.ini
  • variants/esp32s3/station-g3/platformio.ini
  • variants/esp32s3/t-beam-1w/platformio.ini
  • variants/esp32s3/t-beam-bpf/platformio.ini
  • variants/esp32s3/t-deck-pro-v1_1/platformio.ini
  • variants/esp32s3/t-deck-pro/platformio.ini
  • variants/esp32s3/t-deck/platformio.ini
  • variants/esp32s3/t-eth-elite/platformio.ini
  • variants/esp32s3/t-watch-s3/platformio.ini
  • variants/esp32s3/t5s3_epaper/platformio.ini
  • variants/esp32s3/tbeam-s3-core/platformio.ini
  • variants/esp32s3/tlora-pager/platformio.ini
  • variants/esp32s3/tlora_t3s3_epaper/platformio.ini
  • variants/esp32s3/tlora_t3s3_v1/platformio.ini
  • variants/esp32s3/tracksenger/platformio.ini
  • variants/esp32s3/unphone/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M1/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M3/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M4/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M6/platformio.ini
  • variants/nrf52840/ELECROW-ThinkNode-M8/platformio.ini
  • variants/nrf52840/canaryone/platformio.ini
  • variants/nrf52840/diy/nrf52_promicro_diy_tcxo/platformio.ini
  • variants/nrf52840/feather_diy/platformio.ini
  • variants/nrf52840/heltec_mesh_node_t096/platformio.ini
  • variants/nrf52840/heltec_mesh_node_t1/platformio.ini
  • variants/nrf52840/heltec_mesh_pocket/platformio.ini
  • variants/nrf52840/heltec_mesh_solar/platformio.ini
  • variants/nrf52840/heltec_mesh_tower_v2/platformio.ini
  • variants/nrf52840/muzi_base/platformio.ini
  • variants/nrf52840/nano-g2-ultra/platformio.ini
  • variants/nrf52840/r1-neo/platformio.ini
  • variants/nrf52840/rak2560/platformio.ini
  • variants/nrf52840/rak3401_1watt/platformio.ini
  • variants/nrf52840/rak4631_epaper/platformio.ini
  • variants/nrf52840/rak4631_eth_gw/platformio.ini
  • variants/nrf52840/rak4631_nomadstar_meteor_pro/platformio.ini
  • variants/nrf52840/rak_wismeshtag/platformio.ini
  • variants/nrf52840/rak_wismeshtap/platformio.ini
  • variants/nrf52840/seeed_solar_node/platformio.ini
  • variants/nrf52840/seeed_wio_tracker_L1_eink/platformio.ini
  • variants/nrf52840/seeed_xiao_nrf52840_kit/platformio.ini
  • variants/nrf52840/t-echo-lite/platformio.ini
  • variants/nrf52840/t-echo/platformio.ini
  • variants/nrf52840/t-impulse-plus/platformio.ini
  • variants/nrf52840/wio-sdk-wm1110/platformio.ini
  • variants/nrf52840/wio-tracker-wm1110/platformio.ini
  • variants/rp2040/rak11310/platformio.ini
  • variants/rp2040/rp2040-lora/platformio.ini
  • variants/rp2040/rpipico/platformio.ini
  • variants/rp2040/seeed_xiao_rp2040/platformio.ini
  • variants/rp2350/rpipico2/platformio.ini
  • variants/rp2350/seeed_xiao_rp2350/platformio.ini

Comment thread bin/generate_ci_matrix.py
@github-actions

Copy link
Copy Markdown
Contributor

⚡ Try this PR in the Web Flasher

Note

Building this pull request… the flash button, badges and supported-board
list will appear here automatically once CI finishes.

@vidplace7 vidplace7 added the github_actions Pull requests that update GitHub Actions code label Jul 31, 2026

@NomDeTom NomDeTom left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good to me

@vidplace7
vidplace7 requested a review from thebentern July 31, 2026 15:25
@vidplace7
vidplace7 force-pushed the board_level-renames branch from 2933ddb to 185f492 Compare July 31, 2026 15:26
Relying on board_level = <empty> was causing some inheritence footguns.
Let's be explicit about what's being released.
@vidplace7
vidplace7 force-pushed the board_level-renames branch from 185f492 to 478cba4 Compare July 31, 2026 15:27
@vidplace7
vidplace7 enabled auto-merge July 31, 2026 15:31
@vidplace7
vidplace7 added this pull request to the merge queue Jul 31, 2026
Merged via the queue into develop with commit 76f4340 Jul 31, 2026
53 checks passed
Copilot AI added a commit that referenced this pull request Jul 31, 2026
Resolves conflicts from #11305 which made board_level explicit.
- Keep PR's sophisticated select_changed logic in generate_ci_matrix.py
- Update EMITTABLE_LEVELS to use 'release' instead of None
- Add board_level validation in load_all_envs (fail fast on missing/unknown levels)
- Update build_outlist to match 'release' explicitly instead of not-set
- Update tests to use level='release' for release boards
- Accept auto-merged board_level = release additions to ~100 variant files
Manuel1910 pushed a commit to Manuel1910/firmware that referenced this pull request Aug 1, 2026
Relying on board_level = <empty> was causing some inheritence footguns.
Let's be explicit about what's being released.
@vidplace7
vidplace7 deleted the board_level-renames branch August 5, 2026 23:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

github_actions Pull requests that update GitHub Actions code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants