feat(tools): add run-coherence.py - runs all checks
This commit is contained in:
parent
caa4c473bb
commit
dac78460df
1 changed files with 91 additions and 0 deletions
91
tools/coherence/run-coherence.py
Normal file
91
tools/coherence/run-coherence.py
Normal file
|
|
@ -0,0 +1,91 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
run-coherence.py - Run all coherence checks
|
||||||
|
|
||||||
|
One thing: Run all checks and output unified report.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
from datetime import datetime
|
||||||
|
import json
|
||||||
|
|
||||||
|
TOOLS = [
|
||||||
|
("check-frontmatter", "Checking for frontmatter..."),
|
||||||
|
("check-metadata", "Checking metadata quality..."),
|
||||||
|
("check-links", "Checking for broken links..."),
|
||||||
|
]
|
||||||
|
|
||||||
|
def run_check(tool_name):
|
||||||
|
"""Run a coherence check tool."""
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
["python3", f"tools/coherence/{tool_name}.py", "public/fieldnotes/"],
|
||||||
|
capture_output=True,
|
||||||
|
text=True,
|
||||||
|
timeout=30
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
"tool": tool_name,
|
||||||
|
"passed": result.returncode == 0,
|
||||||
|
"output": result.stdout,
|
||||||
|
"error": result.stderr
|
||||||
|
}
|
||||||
|
except Exception as e:
|
||||||
|
return {
|
||||||
|
"tool": tool_name,
|
||||||
|
"passed": False,
|
||||||
|
"output": "",
|
||||||
|
"error": str(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""Run all coherence checks."""
|
||||||
|
print("=" * 50)
|
||||||
|
print("COHERENCE CHECK")
|
||||||
|
print(f"Started: {datetime.now().isoformat()}")
|
||||||
|
print("=" * 50)
|
||||||
|
print()
|
||||||
|
|
||||||
|
results = []
|
||||||
|
all_passed = True
|
||||||
|
|
||||||
|
for tool_name, description in TOOLS:
|
||||||
|
print(f"Running: {description}")
|
||||||
|
result = run_check(tool_name)
|
||||||
|
results.append(result)
|
||||||
|
|
||||||
|
if result["passed"]:
|
||||||
|
print(f" OK")
|
||||||
|
else:
|
||||||
|
print(f" ISSUES FOUND")
|
||||||
|
all_passed = False
|
||||||
|
print()
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
print("=" * 50)
|
||||||
|
print("SUMMARY")
|
||||||
|
print("=" * 50)
|
||||||
|
|
||||||
|
passed = sum(1 for r in results if r["passed"])
|
||||||
|
total = len(results)
|
||||||
|
|
||||||
|
print(f"Checks passed: {passed}/{total}")
|
||||||
|
print(f"Status: {'ALL OK' if all_passed else 'ISSUES FOUND'}")
|
||||||
|
print()
|
||||||
|
|
||||||
|
if not all_passed:
|
||||||
|
print("Details:")
|
||||||
|
for r in results:
|
||||||
|
if not r["passed"]:
|
||||||
|
print(f" {r['tool']}:")
|
||||||
|
if r["output"]:
|
||||||
|
for line in r["output"].split("\n")[:5]:
|
||||||
|
print(f" {line}")
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
print("All coherence checks passed!")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue