Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """Pre-deploy validation script.""" | |
| import os | |
| import re | |
| def validate_experiment(path): | |
| errors = [] | |
| # Check README.md has YAML frontmatter | |
| readme_path = os.path.join(path, "README.md") | |
| if os.path.exists(readme_path): | |
| with open(readme_path) as f: | |
| content = f.read() | |
| if not content.startswith("---"): | |
| errors.append("README.md missing YAML frontmatter") | |
| else: | |
| errors.append("README.md not found") | |
| # Check requirements.txt has gradio==4.36.0 | |
| req_path = os.path.join(path, "requirements.txt") | |
| if os.path.exists(req_path): | |
| with open(req_path) as f: | |
| content = f.read() | |
| if "gradio==4.36.0" not in content: | |
| errors.append("requirements.txt missing pinned gradio==4.36.0") | |
| if "huggingface_hub==0.25.2" not in content: | |
| errors.append("requirements.txt missing pinned huggingface_hub==0.25.2") | |
| else: | |
| errors.append("requirements.txt not found") | |
| # Check app.py uses lazy loading | |
| app_path = os.path.join(path, "app.py") | |
| if os.path.exists(app_path): | |
| with open(app_path) as f: | |
| content = f.read() | |
| if "import torch" in content and "def " in content.split("def ")[0]: | |
| errors.append("torch imported at module level (not lazy)") | |
| if "hardcoded" in content.lower() or "api_key" in content.lower(): | |
| if "os.environ" not in content: | |
| errors.append("Possible hardcoded tokens") | |
| else: | |
| errors.append("app.py not found") | |
| if errors: | |
| print("VALIDATION FAILED:") | |
| for e in errors: | |
| print(f" - {e}") | |
| return False | |
| print("✅ Validation passed") | |
| return True | |
| if __name__ == "__main__": | |
| import sys | |
| path = sys.argv[1] if len(sys.argv) > 1 else "." | |
| validate_experiment(path) | |