Skip to content

Commit 63c827a

Browse files
committed
downgrade missing metadata fields to warnings
1 parent 312fca1 commit 63c827a

2 files changed

Lines changed: 20 additions & 10 deletions

File tree

scripts/validate_plugins/run.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def build_result(
4646
ok: bool,
4747
stage: str,
4848
message: str,
49+
severity: str | None = None,
4950
plugin_dir_name: str | None = None,
5051
details: dict | str | None = None,
5152
) -> dict:
@@ -56,6 +57,7 @@ def build_result(
5657
"ok": ok,
5758
"stage": stage,
5859
"message": message,
60+
"severity": severity or ("pass" if ok else "fail"),
5961
}
6062
if plugin_dir_name:
6163
result["plugin_dir_name"] = plugin_dir_name
@@ -212,6 +214,7 @@ def precheck_plugin_directory(plugin_dir: Path) -> dict:
212214
if missing:
213215
return {
214216
"ok": False,
217+
"severity": "warn",
215218
"stage": "metadata",
216219
"message": f"missing required metadata fields: {', '.join(missing)}",
217220
}
@@ -262,12 +265,14 @@ def build_worker_sys_path(*, astrbot_root: Path, astrbot_path: Path) -> list[str
262265

263266

264267
def build_report(results: list[dict]) -> dict:
265-
passed = sum(1 for result in results if result.get("ok"))
266-
failed = len(results) - passed
268+
passed = sum(1 for result in results if result.get("severity") == "pass")
269+
warned = sum(1 for result in results if result.get("severity") == "warn")
270+
failed = sum(1 for result in results if result.get("severity") == "fail")
267271
return {
268272
"summary": {
269273
"total": len(results),
270274
"passed": passed,
275+
"warned": warned,
271276
"failed": failed,
272277
},
273278
"results": results,
@@ -442,6 +447,7 @@ def validate_plugin(
442447
ok=False,
443448
stage=precheck["stage"],
444449
message=precheck["message"],
450+
severity=precheck.get("severity"),
445451
details=precheck.get("details"),
446452
)
447453

@@ -535,7 +541,8 @@ def task(index: int, plugin: str, plugin_data: dict) -> tuple[int, dict]:
535541
)
536542

537543
results[original_index - 1] = result
538-
status = "PASS" if result.get("ok") else "FAIL"
544+
severity = result.get("severity", "pass" if result.get("ok") else "fail")
545+
status = {"pass": "PASS", "warn": "WARN", "fail": "FAIL"}.get(severity, "FAIL")
539546
stage = result.get("stage", "unknown")
540547
message = result.get("message", "")
541548
print(f"[{original_index}/{total}] {status} {plugin} [{stage}] {message}", flush=True)

tests/test_validate_plugins.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -400,8 +400,8 @@ def test_validate_selected_plugins_emits_progress_and_result_lines(self):
400400
("plugin-b", {"repo": "https://github.com/example/plugin-b"}),
401401
]
402402
fake_results = [
403-
{"plugin": "plugin-a", "ok": True, "stage": "load", "message": "ok"},
404-
{"plugin": "plugin-b", "ok": False, "stage": "metadata", "message": "invalid metadata.yaml"},
403+
{"plugin": "plugin-a", "ok": True, "severity": "pass", "stage": "load", "message": "ok"},
404+
{"plugin": "plugin-b", "ok": False, "severity": "warn", "stage": "metadata", "message": "missing required metadata fields: desc"},
405405
]
406406

407407
with mock.patch.object(module, "validate_plugin", side_effect=fake_results) as validate_mock:
@@ -420,7 +420,7 @@ def test_validate_selected_plugins_emits_progress_and_result_lines(self):
420420
self.assertEqual(validate_mock.call_count, 2)
421421
print_mock.assert_any_call("[1/2] Queued plugin-a", flush=True)
422422
print_mock.assert_any_call("[1/2] PASS plugin-a [load] ok", flush=True)
423-
print_mock.assert_any_call("[2/2] FAIL plugin-b [metadata] invalid metadata.yaml", flush=True)
423+
print_mock.assert_any_call("[2/2] WARN plugin-b [metadata] missing required metadata fields: desc", flush=True)
424424

425425
def test_validate_selected_plugins_preserves_result_order_with_out_of_order_completion(self):
426426
module = load_validator_module()
@@ -592,6 +592,7 @@ def test_reports_missing_required_metadata_fields(self):
592592
result = module.precheck_plugin_directory(plugin_dir)
593593

594594
self.assertFalse(result["ok"])
595+
self.assertEqual(result["severity"], "warn")
595596
self.assertEqual(result["stage"], "metadata")
596597
self.assertIn("desc", result["message"])
597598
self.assertIn("version", result["message"])
@@ -652,19 +653,21 @@ def test_worker_sys_path_includes_astrbot_root_before_codebase(self):
652653

653654

654655
class ReportBuilderTests(unittest.TestCase):
655-
def test_build_report_counts_passed_and_failed_results(self):
656+
def test_build_report_counts_passed_warned_and_failed_results(self):
656657
module = load_validator_module()
657658

658659
report = module.build_report(
659660
[
660-
{"plugin": "plugin-a", "ok": True, "stage": "load", "message": "ok"},
661-
{"plugin": "plugin-b", "ok": False, "stage": "metadata", "message": "missing desc"},
661+
{"plugin": "plugin-a", "ok": True, "severity": "pass", "stage": "load", "message": "ok"},
662+
{"plugin": "plugin-b", "ok": False, "severity": "warn", "stage": "metadata", "message": "missing desc"},
663+
{"plugin": "plugin-c", "ok": False, "severity": "fail", "stage": "load", "message": "boom"},
662664
]
663665
)
664666

665-
self.assertEqual(report["summary"]["total"], 2)
667+
self.assertEqual(report["summary"]["total"], 3)
666668
self.assertEqual(report["summary"]["passed"], 1)
667669
self.assertEqual(report["summary"]["failed"], 1)
670+
self.assertEqual(report["summary"]["warned"], 1)
668671
self.assertEqual(report["results"][1]["plugin"], "plugin-b")
669672

670673

0 commit comments

Comments
 (0)