mirror of
https://github.com/esphome/esphome.git
synced 2026-06-24 11:25:35 +00:00
[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:
1
.github/workflows/ci.yml
vendored
1
.github/workflows/ci.yml
vendored
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
61
script/generate-rp2040-boards.py
Executable file
61
script/generate-rp2040-boards.py
Executable 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)
|
||||||
Reference in New Issue
Block a user