mirror of
https://github.com/zmkfirmware/zmk.git
synced 2026-03-20 04:55:20 -05:00
feat: Add hardware metadata schema.
* Initial hardware metadata JSON schema. * GH Action to validate all schemas for boards/shields.
This commit is contained in:
committed by
Pete Johanson
parent
4a5454b0f9
commit
1d69bdda60
59
app/scripts/west_commands/metadata.py
Normal file
59
app/scripts/west_commands/metadata.py
Normal file
@@ -0,0 +1,59 @@
|
||||
# Copyright (c) 2021 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
'''Metadata command for ZMK.'''
|
||||
|
||||
from functools import cached_property
|
||||
import glob
|
||||
import json
|
||||
from jsonschema import validate, ValidationError
|
||||
import os
|
||||
import sys
|
||||
import yaml
|
||||
from textwrap import dedent # just for nicer code indentation
|
||||
|
||||
from west.commands import WestCommand
|
||||
from west import log # use this for user output
|
||||
|
||||
|
||||
class Metadata(WestCommand):
|
||||
def __init__(self):
|
||||
super().__init__(
|
||||
'metadata', # gets stored as self.name
|
||||
'ZMK hardware metadata commands', # self.help
|
||||
# self.description:
|
||||
dedent('''Operate on the board/shield metadata.'''))
|
||||
|
||||
def do_add_parser(self, parser_adder):
|
||||
parser = parser_adder.add_parser(self.name,
|
||||
help=self.help,
|
||||
description=self.description)
|
||||
|
||||
parser.add_argument('subcommand', default="check",
|
||||
help='The subcommand to run. Defaults to "check".', nargs="?")
|
||||
return parser # gets stored as self.parser
|
||||
|
||||
@cached_property
|
||||
def schema(self):
|
||||
return json.load(
|
||||
open("../schema/hardware-metadata.schema.json", 'r'))
|
||||
|
||||
def validate_file(self, file):
|
||||
print("Validating: " + file)
|
||||
with open(file, 'r') as stream:
|
||||
try:
|
||||
validate(yaml.safe_load(stream), self.schema)
|
||||
except yaml.YAMLError as exc:
|
||||
print("Failed loading metadata yaml: " + file)
|
||||
print(exc)
|
||||
return False
|
||||
except ValidationError as vexc:
|
||||
print("Failed validation of: " + file)
|
||||
print(vexc)
|
||||
return False
|
||||
return True
|
||||
|
||||
def do_run(self, args, unknown_args):
|
||||
status = all([self.validate_file(f) for f in glob.glob(
|
||||
"boards/**/*.zmk.yml", recursive=True)])
|
||||
|
||||
sys.exit(0 if status else 1)
|
||||
Reference in New Issue
Block a user