1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-18 03:02:20 +01:00

[CI] Check esp32 boards file is up to date (#10730)

This commit is contained in:
Jesse Hills
2025-09-16 08:03:02 +12:00
committed by GitHub
parent 5fac67d195
commit 612fb4cc3c
3 changed files with 130 additions and 29 deletions

View File

@@ -105,6 +105,7 @@ jobs:
script/ci-custom.py
script/build_codeowners.py --check
script/build_language_schema.py --check
script/generate-esp32-boards.py --check
pytest:
name: Run pytest

View File

@@ -1504,6 +1504,10 @@ BOARDS = {
"name": "BPI-Bit",
"variant": VARIANT_ESP32,
},
"bpi-centi-s3": {
"name": "BPI-Centi-S3",
"variant": VARIANT_ESP32S3,
},
"bpi_leaf_s3": {
"name": "BPI-Leaf-S3",
"variant": VARIANT_ESP32S3,
@@ -1664,10 +1668,46 @@ BOARDS = {
"name": "Espressif ESP32-S3-DevKitC-1-N8 (8 MB QD, No PSRAM)",
"variant": VARIANT_ESP32S3,
},
"esp32-s3-devkitc-1-n32r8v": {
"name": "Espressif ESP32-S3-DevKitC-1-N32R8V (32 MB Flash Octal, 8 MB PSRAM Octal)",
"variant": VARIANT_ESP32S3,
},
"esp32-s3-devkitc1-n16r16": {
"name": "Espressif ESP32-S3-DevKitC-1-N16R16V (16 MB Flash Quad, 16 MB PSRAM Octal)",
"variant": VARIANT_ESP32S3,
},
"esp32-s3-devkitc1-n16r2": {
"name": "Espressif ESP32-S3-DevKitC-1-N16R2 (16 MB Flash Quad, 2 MB PSRAM Quad)",
"variant": VARIANT_ESP32S3,
},
"esp32-s3-devkitc1-n16r8": {
"name": "Espressif ESP32-S3-DevKitC-1-N16R8V (16 MB Flash Quad, 8 MB PSRAM Octal)",
"variant": VARIANT_ESP32S3,
},
"esp32-s3-devkitc1-n4r2": {
"name": "Espressif ESP32-S3-DevKitC-1-N4R2 (4 MB Flash Quad, 2 MB PSRAM Quad)",
"variant": VARIANT_ESP32S3,
},
"esp32-s3-devkitc1-n4r8": {
"name": "Espressif ESP32-S3-DevKitC-1-N4R8 (4 MB Flash Quad, 8 MB PSRAM Octal)",
"variant": VARIANT_ESP32S3,
},
"esp32-s3-devkitc1-n8r2": {
"name": "Espressif ESP32-S3-DevKitC-1-N8R2 (8 MB Flash Quad, 2 MB PSRAM quad)",
"variant": VARIANT_ESP32S3,
},
"esp32-s3-devkitc1-n8r8": {
"name": "Espressif ESP32-S3-DevKitC-1-N8R8 (8 MB Flash Quad, 8 MB PSRAM Octal)",
"variant": VARIANT_ESP32S3,
},
"esp32-s3-devkitm-1": {
"name": "Espressif ESP32-S3-DevKitM-1",
"variant": VARIANT_ESP32S3,
},
"esp32-s3-fh4r2": {
"name": "Espressif ESP32-S3-FH4R2 (4 MB QD, 2MB PSRAM)",
"variant": VARIANT_ESP32S3,
},
"esp32-solo1": {
"name": "Espressif Generic ESP32-solo1 4M Flash",
"variant": VARIANT_ESP32,
@@ -1764,6 +1804,10 @@ BOARDS = {
"name": "Franzininho WiFi MSC",
"variant": VARIANT_ESP32S2,
},
"freenove-esp32-s3-n8r8": {
"name": "Freenove ESP32-S3 WROOM N8R8 (8MB Flash / 8MB PSRAM)",
"variant": VARIANT_ESP32S3,
},
"freenove_esp32_s3_wroom": {
"name": "Freenove ESP32-S3 WROOM N8R8 (8MB Flash / 8MB PSRAM)",
"variant": VARIANT_ESP32S3,
@@ -1964,6 +2008,10 @@ BOARDS = {
"name": "M5Stack AtomS3",
"variant": VARIANT_ESP32S3,
},
"m5stack-atoms3u": {
"name": "M5Stack AtomS3U",
"variant": VARIANT_ESP32S3,
},
"m5stack-core-esp32": {
"name": "M5Stack Core ESP32",
"variant": VARIANT_ESP32,
@@ -2084,6 +2132,10 @@ BOARDS = {
"name": "Ai-Thinker NodeMCU-32S2 (ESP-12K)",
"variant": VARIANT_ESP32S2,
},
"nologo_esp32c3_super_mini": {
"name": "Nologo ESP32C3 SuperMini",
"variant": VARIANT_ESP32C3,
},
"nscreen-32": {
"name": "YeaCreate NSCREEN-32",
"variant": VARIANT_ESP32,
@@ -2192,6 +2244,10 @@ BOARDS = {
"name": "SparkFun LoRa Gateway 1-Channel",
"variant": VARIANT_ESP32,
},
"sparkfun_pro_micro_esp32c3": {
"name": "SparkFun Pro Micro ESP32-C3",
"variant": VARIANT_ESP32C3,
},
"sparkfun_qwiic_pocket_esp32c6": {
"name": "SparkFun ESP32-C6 Qwiic Pocket",
"variant": VARIANT_ESP32C6,
@@ -2256,6 +2312,14 @@ BOARDS = {
"name": "Turta IoT Node",
"variant": VARIANT_ESP32,
},
"um_bling": {
"name": "Unexpected Maker BLING!",
"variant": VARIANT_ESP32S3,
},
"um_edges3_d": {
"name": "Unexpected Maker EDGES3[D]",
"variant": VARIANT_ESP32S3,
},
"um_feathers2": {
"name": "Unexpected Maker FeatherS2",
"variant": VARIANT_ESP32S2,
@@ -2268,10 +2332,18 @@ BOARDS = {
"name": "Unexpected Maker FeatherS3",
"variant": VARIANT_ESP32S3,
},
"um_feathers3_neo": {
"name": "Unexpected Maker FeatherS3 Neo",
"variant": VARIANT_ESP32S3,
},
"um_nanos3": {
"name": "Unexpected Maker NanoS3",
"variant": VARIANT_ESP32S3,
},
"um_omgs3": {
"name": "Unexpected Maker OMGS3",
"variant": VARIANT_ESP32S3,
},
"um_pros3": {
"name": "Unexpected Maker PROS3",
"variant": VARIANT_ESP32S3,
@@ -2280,6 +2352,14 @@ BOARDS = {
"name": "Unexpected Maker RMP",
"variant": VARIANT_ESP32S2,
},
"um_squixl": {
"name": "Unexpected Maker SQUiXL",
"variant": VARIANT_ESP32S3,
},
"um_tinyc6": {
"name": "Unexpected Maker TinyC6",
"variant": VARIANT_ESP32C6,
},
"um_tinys2": {
"name": "Unexpected Maker TinyS2",
"variant": VARIANT_ESP32S2,
@@ -2401,3 +2481,4 @@ BOARDS = {
"variant": VARIANT_ESP32S3,
},
}
# DO NOT ADD ANYTHING BELOW THIS LINE

View File

@@ -1,14 +1,18 @@
#!/usr/bin/env python3
import argparse
import json
import os
from pathlib import Path
import subprocess
import sys
import tempfile
from esphome.components.esp32 import ESP_IDF_PLATFORM_VERSION as ver
from esphome.helpers import write_file_if_changed
version_str = f"{ver.major}.{ver.minor:02d}.{ver.patch:02d}"
print(f"ESP32 Platform Version: {version_str}")
root = Path(__file__).parent.parent
boards_file_path = root / "esphome" / "components" / "esp32" / "boards.py"
def get_boards():
@@ -17,6 +21,9 @@ def get_boards():
[
"git",
"clone",
"-q",
"-c",
"advice.detachedHead=false",
"--depth",
"1",
"--branch",
@@ -26,16 +33,14 @@ def get_boards():
],
check=True,
)
boards_file = os.path.join(tempdir, "boards")
boards_directory = Path(tempdir) / "boards"
boards = {}
for fname in os.listdir(boards_file):
if not fname.endswith(".json"):
continue
with open(os.path.join(boards_file, fname), encoding="utf-8") as f:
for fname in boards_directory.glob("*.json"):
with fname.open(encoding="utf-8") as f:
board_info = json.load(f)
mcu = board_info["build"]["mcu"]
name = board_info["name"]
board = fname[:-5]
board = fname.stem
variant = mcu.upper()
boards[board] = {
"name": name,
@@ -47,33 +52,47 @@ def get_boards():
TEMPLATE = """ "%s": {
"name": "%s",
"variant": %s,
},
"""
},"""
def main():
def main(check: bool):
boards = get_boards()
# open boards.py, delete existing BOARDS variable and write the new boards dict
boards_file_path = os.path.join(
os.path.dirname(__file__), "..", "esphome", "components", "esp32", "boards.py"
)
with open(boards_file_path, encoding="UTF-8") as f:
lines = f.readlines()
existing_content = boards_file_path.read_text(encoding="UTF-8")
with open(boards_file_path, "w", encoding="UTF-8") as f:
for line in lines:
if line.startswith("BOARDS = {"):
f.write("BOARDS = {\n")
f.writelines(
TEMPLATE % (board, info["name"], info["variant"])
for board, info in sorted(boards.items())
)
f.write("}\n")
break
parts: list[str] = []
for line in existing_content.splitlines():
if line == "BOARDS = {":
parts.append(line)
parts.extend(
TEMPLATE % (board, info["name"], info["variant"])
for board, info in sorted(boards.items())
)
parts.append("}")
parts.append("# DO NOT ADD ANYTHING BELOW THIS LINE")
break
f.write(line)
parts.append(line)
parts.append("")
content = "\n".join(parts)
if check:
if existing_content != content:
print("boards.py file is not up to date.")
print("Please run `script/generate-esp32-boards.py`")
sys.exit(1)
print("boards.py file is up to date")
elif write_file_if_changed(boards_file_path, content):
print("ESP32 boards updated successfully.")
if __name__ == "__main__":
main()
print("ESP32 boards updated successfully.")
parser = argparse.ArgumentParser()
parser.add_argument(
"--check",
help="Check if the boards.py file is up to date.",
action="store_true",
)
args = parser.parse_args()
main(args.check)