diff options
author | Nick Brassel <nick@tzarc.org> | 2023-10-06 10:34:23 +1100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-06 10:34:23 +1100 |
commit | 127560ae223255d0e081b932e902d2da242abf06 (patch) | |
tree | 3a27003918ff1c1eafa94192c2b85c0a903f1af8 /lib/python/qmk/cli | |
parent | 92873cc14f1ef66ae3c856dc6b5298c75e66f8d2 (diff) |
Add `qmk ci-validate-aliases` (#22205)
Diffstat (limited to 'lib/python/qmk/cli')
-rw-r--r-- | lib/python/qmk/cli/__init__.py | 1 | ||||
-rw-r--r-- | lib/python/qmk/cli/ci/__init__.py | 0 | ||||
-rw-r--r-- | lib/python/qmk/cli/ci/validate_aliases.py | 46 |
3 files changed, 47 insertions, 0 deletions
diff --git a/lib/python/qmk/cli/__init__.py b/lib/python/qmk/cli/__init__.py index 9c3decf4f7..b8bc99aa0d 100644 --- a/lib/python/qmk/cli/__init__.py +++ b/lib/python/qmk/cli/__init__.py @@ -31,6 +31,7 @@ safe_commands = [ ] subcommands = [ + 'qmk.cli.ci.validate_aliases', 'qmk.cli.bux', 'qmk.cli.c2json', 'qmk.cli.cd', diff --git a/lib/python/qmk/cli/ci/__init__.py b/lib/python/qmk/cli/ci/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/lib/python/qmk/cli/ci/__init__.py diff --git a/lib/python/qmk/cli/ci/validate_aliases.py b/lib/python/qmk/cli/ci/validate_aliases.py new file mode 100644 index 0000000000..a205d03cff --- /dev/null +++ b/lib/python/qmk/cli/ci/validate_aliases.py @@ -0,0 +1,46 @@ +"""Validates the list of keyboard aliases. +""" +from pathlib import Path + +from milc import cli + +from qmk.json_schema import json_load +from qmk.keyboard import resolve_keyboard, keyboard_folder + + +def _safe_keyboard_folder(target): + try: + return keyboard_folder(target) # throws ValueError if it's invalid + except Exception: + return None + + +def _target_keyboard_exists(target): + # If there's no target, then we can't build it. + if not target: + return False + + # If the target directory existed but there was no rules.mk or rules.mk was incorrectly parsed, then we can't build it. + if not resolve_keyboard(target): + return False + + # If the target directory exists but it itself has an invalid alias or invalid rules.mk, then we can't build it either. + if not _safe_keyboard_folder(target): + return False + + # As far as we can tell, we can build it! + return True + + +@cli.subcommand('Validates the list of keyboard aliases.', hidden=True) +def ci_validate_aliases(cli): + aliases = json_load(Path('data/mappings/keyboard_aliases.hjson')) + + success = True + for alias in aliases.keys(): + target = aliases[alias].get('target', None) + if not _target_keyboard_exists(target): + cli.log.error(f'Keyboard alias {alias} has a target that doesn\'t exist: {target}') + success = False + + return success |