mirror of
https://github.com/OpenBMB/ChatDev.git
synced 2026-04-25 11:18:06 +00:00
105 lines
3.0 KiB
Python
105 lines
3.0 KiB
Python
"""
|
|
Validate All YAML Workflow Configurations
|
|
|
|
This tool performs strict validation on all YAML workflow configuration files
|
|
in the yaml_instance/ directory. It ensures configuration integrity and prevents
|
|
runtime errors by catching issues early in the development process.
|
|
|
|
Purpose:
|
|
- Validates YAML syntax and schema compliance for all workflow configurations
|
|
- Prevents invalid configurations from causing runtime failures
|
|
- Essential for CI/CD pipelines to ensure code quality
|
|
- Provides detailed error reporting for debugging
|
|
|
|
Usage:
|
|
python tools/validate_all_yamls.py
|
|
# or via Makefile:
|
|
make validate-yamls
|
|
"""
|
|
|
|
import sys
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
|
|
def validate_all():
|
|
base_dir = Path("yaml_instance")
|
|
if not base_dir.exists():
|
|
print(f"Directory {base_dir} not found.")
|
|
sys.exit(1)
|
|
|
|
# Recursive search for all .yaml files
|
|
files = sorted(list(base_dir.rglob("*.yaml")))
|
|
|
|
if not files:
|
|
print("No YAML files found.")
|
|
return
|
|
|
|
print(
|
|
f"Found {len(files)} YAML files. Running FULL validation via check.check...\n"
|
|
)
|
|
|
|
passed = 0
|
|
failed = 0
|
|
failed_files = []
|
|
|
|
for yaml_file in files:
|
|
# Use relative path for cleaner output
|
|
try:
|
|
rel_path = yaml_file.relative_to(Path.cwd())
|
|
except ValueError:
|
|
rel_path = yaml_file
|
|
|
|
# NOW we run check.check, which we just patched to have a main()
|
|
# This performs the stricter load_config() validation
|
|
cmd = [sys.executable, "-m", "check.check", "--path", str(yaml_file)]
|
|
|
|
try:
|
|
result = subprocess.run(cmd, capture_output=True, text=True)
|
|
|
|
if result.returncode == 0:
|
|
print(f"{rel_path}")
|
|
passed += 1
|
|
else:
|
|
print(f"{rel_path}")
|
|
# Indent error output
|
|
if result.stdout:
|
|
print(" stdout:", result.stdout.strip().replace("\n", "\n "))
|
|
# Validation errors usually print to stdout/stderr depending on impl
|
|
# Our new main prints to stdout for success/failure message
|
|
failed += 1
|
|
failed_files.append(str(rel_path))
|
|
except Exception as e:
|
|
print(f"{rel_path} (Execution Failed)")
|
|
print(f" Error: {e}")
|
|
failed += 1
|
|
failed_files.append(str(rel_path))
|
|
|
|
print("\n" + "=" * 40)
|
|
print(f"YAML Validation Summary")
|
|
print("=" * 40)
|
|
print(f"Total Files: {len(files)}")
|
|
print(f"Passed: {passed}")
|
|
print(f"Failed: {failed}")
|
|
|
|
if failed > 0:
|
|
print("\nFailed Files:")
|
|
for f in failed_files:
|
|
print(f"- {f}")
|
|
|
|
# Overall validation status
|
|
print("\n" + "=" * 40)
|
|
print("Overall Validation Status")
|
|
print("=" * 40)
|
|
|
|
if failed > 0:
|
|
print("YAML validation: FAILED")
|
|
sys.exit(1)
|
|
else:
|
|
print("All validations passed successfully.")
|
|
sys.exit(0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
validate_all()
|