Add schema validator build checks
Add schemas to ensure configurations are validated at
compile time and they meet certain formatting requirements.
Change-Id: Id6ff2d5eb77d496b230d946fcb8d0282784b2028
Signed-off-by: Amithash Prasad <amithash@meta.com>
diff --git a/scripts/schema_validator.py b/scripts/schema_validator.py
new file mode 100755
index 0000000..ecbbbbb
--- /dev/null
+++ b/scripts/schema_validator.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python3
+# Copyright 2021-present Facebook. All Rights Reserved.
+import argparse
+import json
+import sys
+
+import jsonschema.validators
+
+
+def validator(schema_path):
+ with open(schema_path) as f:
+ schema = json.load(f)
+ validator = jsonschema.Draft202012Validator(schema)
+ return validator
+
+
+def validate_json_conf(schema, js):
+ v = validator(schema)
+ try:
+ with open(js) as f:
+ data = json.load(f)
+ v.validate(data)
+ return True
+ except jsonschema.exceptions.ValidationError as e:
+ print("Validation failed", file=sys.stderr)
+ print(e, file=sys.stderr)
+ return False
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ description="JSON Schema Validator",
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
+ )
+ parser.add_argument(
+ "input",
+ nargs="+",
+ help="Input handler configuration",
+ )
+ parser.add_argument(
+ "-s",
+ "--schema",
+ default=None,
+ help="Schema to validate against",
+ )
+ args = parser.parse_args()
+ if args.schema is None:
+ print("FAILURE: Schema is required. See help")
+ sys.exit(1)
+ schema = args.schema
+ files = args.input
+ for f in files:
+ if validate_json_conf(schema, f):
+ print("SUCCESS: ", f)
+ else:
+ print("FAILURE: ", f, file=sys.stderr)
+ sys.exit(1)
+
+
+if __name__ == "__main__":
+ main()