Browse Source

Produce warning if keyboard is not configured via `keyboard.json` (#23321)

Joel Challis 2 years ago
parent
commit
573db7a0ee
1 changed files with 20 additions and 8 deletions
  1. 20 8
      lib/python/qmk/info.py

+ 20 - 8
lib/python/qmk/info.py

@@ -83,6 +83,25 @@ def _find_invalid_encoder_index(info_data):
     return ret
 
 
+def _validate_build_target(keyboard, info_data):
+    """Non schema checks
+    """
+    keyboard_json_path = Path('keyboards') / keyboard / 'keyboard.json'
+    config_files = find_info_json(keyboard)
+
+    # keyboard.json can only exist at the deepest part of the tree
+    keyboard_json_count = 0
+    for info_file in config_files:
+        if info_file.name == 'keyboard.json':
+            keyboard_json_count += 1
+            if info_file != keyboard_json_path:
+                _log_error(info_data, f'Invalid keyboard.json location detected: {info_file}.')
+
+    # Moving forward keyboard.json should be used as a build target
+    if keyboard_json_count == 0:
+        _log_warning(info_data, 'Build marker "keyboard.json" not found.')
+
+
 def _validate_layouts(keyboard, info_data):  # noqa C901
     """Non schema checks
     """
@@ -181,6 +200,7 @@ def _validate(keyboard, info_data):
         validate(info_data, 'qmk.api.keyboard.v1')
 
         # Additional validation
+        _validate_build_target(keyboard, info_data)
         _validate_layouts(keyboard, info_data)
         _validate_keycodes(keyboard, info_data)
         _validate_encoders(keyboard, info_data)
@@ -890,14 +910,6 @@ def merge_info_jsons(keyboard, info_data):
     """
     config_files = find_info_json(keyboard)
 
-    # keyboard.json can only exist at the deepest part of the tree
-    keyboard_json_count = 0
-    for index, info_file in enumerate(config_files):
-        if Path(info_file).name == 'keyboard.json':
-            keyboard_json_count += 1
-            if index != 0 or keyboard_json_count > 1:
-                _log_error(info_data, f'Invalid keyboard.json location detected: {info_file}.')
-
     for info_file in config_files:
         # Load and validate the JSON data
         new_info_data = json_load(info_file)