Hoghoghi / validate_docker_setup.py
Really-amin's picture
Upload 58 files
84fb503 verified
raw
history blame
5.36 kB
#!/usr/bin/env python3
"""
Docker Setup Validation Script
=============================
Validates that all Docker deployment requirements are met for Hugging Face Spaces.
"""
import os
import sys
from pathlib import Path
def check_file_exists(filepath, description):
"""Check if a file exists"""
if Path(filepath).exists():
print(f"βœ… {description}: {filepath}")
return True
else:
print(f"❌ {description}: {filepath} - MISSING")
return False
def check_dockerfile():
"""Validate Dockerfile contents"""
dockerfile_path = "Dockerfile"
if not check_file_exists(dockerfile_path, "Dockerfile"):
return False
with open(dockerfile_path, 'r') as f:
content = f.read()
required_elements = [
"FROM python:3.10-slim",
"EXPOSE 7860",
"CMD [\"uvicorn\"",
"port 7860"
]
for element in required_elements:
if element in content:
print(f"βœ… Dockerfile contains: {element}")
else:
print(f"❌ Dockerfile missing: {element}")
return False
return True
def check_dockerignore():
"""Validate .dockerignore contents"""
dockerignore_path = ".dockerignore"
if not check_file_exists(dockerignore_path, ".dockerignore"):
return False
with open(dockerignore_path, 'r') as f:
content = f.read()
required_patterns = [
"__pycache__",
".git",
"*.log",
"venv"
]
for pattern in required_patterns:
if pattern in content:
print(f"βœ… .dockerignore excludes: {pattern}")
else:
print(f"⚠️ .dockerignore missing: {pattern}")
return True
def check_requirements():
"""Validate requirements.txt"""
req_path = "requirements.txt"
if not check_file_exists(req_path, "requirements.txt"):
return False
with open(req_path, 'r') as f:
content = f.read()
required_packages = [
"fastapi",
"uvicorn",
"transformers",
"torch",
"PyMuPDF",
"pytesseract"
]
for package in required_packages:
if package in content:
print(f"βœ… requirements.txt includes: {package}")
else:
print(f"❌ requirements.txt missing: {package}")
return False
return True
def check_readme_metadata():
"""Validate README.md HF Spaces metadata"""
readme_path = "README.md"
if not check_file_exists(readme_path, "README.md"):
return False
with open(readme_path, 'r') as f:
content = f.read()
required_metadata = [
"sdk: docker",
"title: Legal Dashboard OCR System",
"emoji: πŸš€"
]
for metadata in required_metadata:
if metadata in content:
print(f"βœ… README.md contains: {metadata}")
else:
print(f"❌ README.md missing: {metadata}")
return False
return True
def check_app_structure():
"""Validate application structure"""
required_dirs = [
"app",
"app/api",
"app/services",
"app/models",
"frontend"
]
for dir_path in required_dirs:
if Path(dir_path).exists():
print(f"βœ… Directory exists: {dir_path}")
else:
print(f"❌ Directory missing: {dir_path}")
return False
return True
def check_main_py():
"""Validate main.py configuration"""
main_path = "app/main.py"
if not check_file_exists(main_path, "app/main.py"):
return False
with open(main_path, 'r') as f:
content = f.read()
required_elements = [
"port=7860",
"host=\"0.0.0.0\"",
"/health"
]
for element in required_elements:
if element in content:
print(f"βœ… main.py contains: {element}")
else:
print(f"❌ main.py missing: {element}")
return False
return True
def main():
"""Main validation function"""
print("πŸ” Validating Docker setup for Hugging Face Spaces...")
print("=" * 60)
checks = [
("Dockerfile", check_dockerfile),
(".dockerignore", check_dockerignore),
("requirements.txt", check_requirements),
("README.md metadata", check_readme_metadata),
("App structure", check_app_structure),
("main.py configuration", check_main_py)
]
all_passed = True
for description, check_func in checks:
print(f"\nπŸ“‹ Checking {description}...")
if not check_func():
all_passed = False
print()
print("=" * 60)
if all_passed:
print("πŸŽ‰ All checks passed! Ready for Hugging Face Spaces deployment.")
print("\nπŸš€ Next steps:")
print("1. Test locally: docker build -t legal-dashboard-ocr .")
print("2. Run container: docker run -p 7860:7860 legal-dashboard-ocr")
print("3. Deploy to HF Spaces: Push to your Space repository")
else:
print("❌ Some checks failed. Please fix the issues above.")
sys.exit(1)
if __name__ == "__main__":
main()