[rp2040] Add CI check for boards.py freshness (#14754)

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
J. Nick Koston
2026-03-13 13:28:55 -10:00
committed by GitHub
parent d6d3bbbad8
commit 5e3c44d48f
3 changed files with 73 additions and 1 deletions

View File

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

View File

@@ -6,6 +6,7 @@ Usage: python esphome/components/rp2040/generate_boards.py <arduino-pico-path>
import json import json
from pathlib import Path from pathlib import Path
import re import re
import subprocess
import sys import sys
from jinja2 import Environment, FileSystemLoader from jinja2 import Environment, FileSystemLoader
@@ -157,7 +158,7 @@ def generate(arduino_pico_path: Path) -> str:
board_pins, boards = load_boards(arduino_pico_path) board_pins, boards = load_boards(arduino_pico_path)
template = _jinja_env.get_template("boards.jinja2") template = _jinja_env.get_template("boards.jinja2")
return template.render( content = template.render(
cyw43_gpio_offset=CYW43_GPIO_OFFSET, cyw43_gpio_offset=CYW43_GPIO_OFFSET,
cyw43_max_gpio=CYW43_GPIO_OFFSET + CYW43_GPIO_COUNT - 1, cyw43_max_gpio=CYW43_GPIO_OFFSET + CYW43_GPIO_COUNT - 1,
default_max_pin=DEFAULT_MAX_PIN, default_max_pin=DEFAULT_MAX_PIN,
@@ -165,6 +166,15 @@ def generate(arduino_pico_path: Path) -> str:
boards=sorted(boards.items()), boards=sorted(boards.items()),
) )
# Format output to match pre-commit ruff formatting
result = subprocess.run(
[sys.executable, "-m", "ruff", "format", "--stdin-filename", "boards.py"],
input=content.encode(),
capture_output=True,
check=True,
)
return result.stdout.decode()
def main(): def main():
if len(sys.argv) < 2: if len(sys.argv) < 2:

View File

@@ -0,0 +1,61 @@
#!/usr/bin/env python3
from __future__ import annotations
import argparse
from pathlib import Path
import subprocess
import sys
import tempfile
from esphome.components.rp2040 import RECOMMENDED_ARDUINO_FRAMEWORK_VERSION
from esphome.components.rp2040.generate_boards import generate
from esphome.helpers import write_file_if_changed
ver = RECOMMENDED_ARDUINO_FRAMEWORK_VERSION
version_tag: str = f"{ver.major}.{ver.minor}.{ver.patch}"
root: Path = Path(__file__).parent.parent
boards_file_path: Path = root / "esphome" / "components" / "rp2040" / "boards.py"
def main(check: bool) -> None:
with tempfile.TemporaryDirectory() as tempdir:
subprocess.run(
[
"git",
"clone",
"-q",
"-c",
"advice.detachedHead=false",
"--depth",
"1",
"--branch",
version_tag,
"https://github.com/earlephilhower/arduino-pico",
tempdir,
],
check=True,
)
content: str = generate(Path(tempdir))
if check:
existing_content: str = boards_file_path.read_text(encoding="utf-8")
if existing_content != content:
print("esphome/components/rp2040/boards.py is not up to date.")
print("Please run `script/generate-rp2040-boards.py`")
sys.exit(1)
print("esphome/components/rp2040/boards.py is up to date")
elif write_file_if_changed(boards_file_path, content):
print("RP2040 boards updated successfully.")
if __name__ == "__main__":
parser: argparse.ArgumentParser = argparse.ArgumentParser()
parser.add_argument(
"--check",
help="Check if the boards.py file is up to date.",
action="store_true",
)
args: argparse.Namespace = parser.parse_args()
main(args.check)