1
0
Fork 0
mirror of https://github.com/YunoHost/apps.git synced 2024-09-03 20:06:07 +02:00

Merge pull request #2122 from YunoHost/schema_all_files

In catalog_linter, lint all toml files (graveyard wishlist etc).
This commit is contained in:
Alexandre Aubin 2024-03-19 18:56:38 +01:00 committed by GitHub
commit ab89336e12
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -2,6 +2,7 @@
import json import json
import sys import sys
from pathlib import Path
from difflib import SequenceMatcher from difflib import SequenceMatcher
from typing import Any, Dict, Generator, List, Tuple from typing import Any, Dict, Generator, List, Tuple
@ -16,16 +17,27 @@ from appslib.utils import (
) )
def validate_schema() -> Generator[str, None, None]: def validate_schema(data: dict, schema_path: Path) -> Generator[str, None, None]:
with open( schema = json.load(schema_path.open("r", encoding="utf-8"))
REPO_APPS_ROOT / "schemas" / "apps.toml.schema.json", encoding="utf-8" validator = jsonschema.Draft202012Validator(schema)
) as file: for error in validator.iter_errors(data):
apps_catalog_schema = json.load(file)
validator = jsonschema.Draft202012Validator(apps_catalog_schema)
for error in validator.iter_errors(get_catalog()):
yield f"at .{'.'.join(error.path)}: {error.message}" yield f"at .{'.'.join(error.path)}: {error.message}"
def validate_schema_pretty(data: dict, name: str) -> bool:
schema_path = REPO_APPS_ROOT / "schemas" / f"{name}.schema.json"
has_errors = False
schema_errors = list(validate_schema(data, schema_path))
if schema_errors:
has_errors = True
print(f"Error while validating {name} against schema:")
for error in schema_errors:
print(f" - {error}")
if schema_errors:
print()
return has_errors
def check_app( def check_app(
app: str, infos: Dict[str, Any] app: str, infos: Dict[str, Any]
) -> Generator[Tuple[str, bool], None, None]: ) -> Generator[Tuple[str, bool], None, None]:
@ -88,14 +100,11 @@ def check_all_apps() -> Generator[Tuple[str, List[Tuple[str, bool]]], None, None
def main() -> None: def main() -> None:
has_errors = False has_errors = False
schema_errors = list(validate_schema()) has_errors |= validate_schema_pretty(get_antifeatures(), "antifeatures.toml")
if schema_errors: has_errors |= validate_schema_pretty(get_catalog(), "apps.toml")
has_errors = True has_errors |= validate_schema_pretty(get_categories(), "categories.toml")
print("Error while validating catalog against schema:") has_errors |= validate_schema_pretty(get_graveyard(), "graveyard.toml")
for error in schema_errors: has_errors |= validate_schema_pretty(get_wishlist(), "wishlist.toml")
print(f" - {error}")
if schema_errors:
print()
for app, errors in check_all_apps(): for app, errors in check_all_apps():
print(f"{app}:") print(f"{app}:")
@ -105,8 +114,7 @@ def main() -> None:
level = "error" if is_fatal else "warning" level = "error" if is_fatal else "warning"
print(f" - {level}: {error}") print(f" - {level}: {error}")
if has_errors: sys.exit(has_errors)
sys.exit(1)
if __name__ == "__main__": if __name__ == "__main__":