#!/usr/bin/env python3 """ One-click deploy script for Hugging Face Spaces. Usage: python deploy.py This script will: 1. Install required dependencies 2. Create a Hugging Face Space 3. Push all files to the Space 4. Provide the Space URL """ import os import sys from pathlib import Path from huggingface_hub import HfApi, create_repo # Hugging Face token - read from environment variable or user input HF_TOKEN = os.environ.get("HF_TOKEN") if not HF_TOKEN: print("Error: HF_TOKEN environment variable not set.") print("Please set it before running this script.") sys.exit(1) def main(): api = HfApi() # Get user info try: whoami = api.whoami(token=HF_TOKEN) username = whoami["name"] print(f"Logged in as: {username}") except Exception as e: print(f"Error authenticating with Hugging Face: {e}") sys.exit(1) repo_name = "wheat-disease-classifier" repo_id = f"{username}/{repo_name}" print(f"\nCreating Space: {repo_id}") try: # Create the Space create_repo( repo_id=repo_id, repo_type="space", space_sdk="gradio", token=HF_TOKEN, exist_ok=True, ) print(f"✓ Space created/exists: {repo_id}") # Files to upload files_to_upload = [] # Root files for f in Path(".").glob("*.py"): files_to_upload.append(f) for f in Path(".").glob("*.txt"): files_to_upload.append(f) for f in Path(".").glob("*.md"): files_to_upload.append(f) for f in Path(".").glob("*.sh"): files_to_upload.append(f) for f in Path(".").glob("*.yaml"): files_to_upload.append(f) # Package files for pkg in ["dipauglib", "dipaugnet", "tests", "configs"]: pkg_path = Path(pkg) if pkg_path.exists(): for f in pkg_path.rglob("*.py"): files_to_upload.append(f) for f in pkg_path.rglob("*.yaml"): files_to_upload.append(f) # Upload all files print(f"\nUploading {len(files_to_upload)} files...") for file_path in files_to_upload: try: # Calculate path in repo path_in_repo = str(file_path) api.upload_file( path_or_fileobj=str(file_path), path_in_repo=path_in_repo, repo_id=repo_id, repo_type="space", token=HF_TOKEN, ) print(f" ✓ {file_path}") except Exception as e: print(f" ✗ {file_path}: {e}") print(f"\n{'='*60}") print(f"✓ DEPLOYMENT COMPLETE!") print(f"{'='*60}") print(f"\nView your Space at:") print(f"https://huggingface.co/spaces/{repo_id}") print(f"\nThe Space will build automatically. You can check the status at:") print(f"https://huggingface.co/spaces/{repo_id}/tree/main") except Exception as e: print(f"Error: {e}") import traceback traceback.print_exc() sys.exit(1) if __name__ == "__main__": main()