Lint the tests.toml and config_panel.toml with schemas too

This commit is contained in:
Salamandar 2024-06-09 23:25:03 +02:00
parent 1f035c4456
commit 1c4eff6a40

View file

@ -333,6 +333,27 @@ def manifest_v2_schema():
return urlopen("https://raw.githubusercontent.com/YunoHost/apps/master/schemas/manifest.v2.schema.json")["content"]
@cache_file(".tests.v1.schema.json", 3600)
def tests_v1_schema():
return urlopen("https://raw.githubusercontent.com/YunoHost/apps/master/schemas/tests.v1.schema.json")["content"]
@cache_file(".config_panel.v1.schema.json", 3600)
def config_panel_v1_schema():
return urlopen("https://raw.githubusercontent.com/YunoHost/apps/master/schemas/config_panel.v1.schema.json")["content"]
def validate_schema(name: str, schema, data):
v = jsonschema.Draft7Validator(schema)
for error in v.iter_errors(data):
try:
error_path = " > ".join(error.path)
except:
error_path = str(error.path)
yield Info(f"Error validating {name} using schema: in key {error_path}\n {error.message}")
tests = {}
tests_reports = {
"success": [],
@ -761,6 +782,8 @@ class App(TestSuite):
"The config panel is set to version 1.x, but the config script is apparently still using some old code from 0.1 such as '$YNH_CONFIG_STUFF' or 'yunohost app action'"
)
validate_schema("config_panel", config_panel_v1_schema(), toml.load(app.path + "config_panel.toml"))
@test()
def badges_in_readme(app):
@ -1158,7 +1181,7 @@ class Configurations(TestSuite):
############################
@test()
def tests_toml_exists(self):
def tests_toml(self):
app = self.app
@ -1174,6 +1197,8 @@ class Configurations(TestSuite):
yield Error(
"The 'check_process' file that interfaces with the app CI has now been replaced with 'tests.toml' format and is now mandatory for apps v2."
)
else:
validate_schema("tests.toml", tests_v1_schema(), toml.load(app.path + "tests.toml"))
@test()
def check_process_syntax(self):
@ -2230,24 +2255,9 @@ class Manifest(TestSuite):
@test()
def manifest_schema(self):
v = jsonschema.Draft7Validator(manifest_v2_schema())
if app_packaging_format <= 1:
return
for error in v.iter_errors(self.manifest):
try:
error_path = " > ".join(error.path)
except:
error_path = str(error.path)
yield Info(
"Error validating manifest using schema: in key "
+ error_path
+ "\n "
+ error.message
)
validate_schema("manifest", manifest_v2_schema(), self.manifest)
########################################