#!/usr/bin/env python3 """ Local setup script to replicate Docker container functionality Run this instead of the Dockerfile for local development """ import os import subprocess import sys import shutil import re from pathlib import Path def mask_sensitive_info(text): """Mask GitHub tokens in text for safe printing""" if text is None: return text # Replace GitHub tokens (ghp_) with asterisks masked = re.sub(r'ghp_[a-zA-Z0-9_]+', '************', text) return masked def run_command(cmd, check=True, shell=False): """Run a command and handle errors""" print(f"Running: {mask_sensitive_info(cmd)}") try: if shell: result = subprocess.run(cmd, shell=True, check=check, capture_output=True, text=True) else: result = subprocess.run(cmd.split(), check=check, capture_output=True, text=True) if result.stdout: print(mask_sensitive_info(result.stdout)) if result.stderr: print(mask_sensitive_info(result.stderr), file=sys.stderr) return result except subprocess.CalledProcessError as e: print(f"Error running command: {e}") print(f"stdout: {mask_sensitive_info(e.stdout)}") print(f"stderr: {mask_sensitive_info(e.stderr)}") raise def setup_environment(): """Set up the local environment similar to the Docker container""" # Create app directory structure app_dir = Path("app") app_dir.mkdir(exist_ok=True) os.chdir(app_dir) print("Setting up local environment...") # Check if git is installed try: run_command("git --version") except subprocess.CalledProcessError: print("Git is not installed. Please install git first.") sys.exit(1) # Clone the repository (you'll need to handle authentication) github_token = os.getenv('GITHUB_TOKEN') if not github_token: print("Please set GITHUB_TOKEN environment variable") print("Export it like: export GITHUB_TOKEN=your_token_here") sys.exit(1) repo_url = f"https://sawadogosalif:{github_token}@github.com/BurkimbIA/spaces.git" # Clone repository if it doesn't exist if not Path("spaces").exists(): print("Cloning repository...") run_command(f"git clone {repo_url}") else: print("Repository already exists, pulling latest changes...") os.chdir("spaces") run_command("git pull") os.chdir("..") # Copy files from leaderboards/asr/ to current directory source_path = Path("spaces/leaderboards/asr") if source_path.exists(): print("Copying files from spaces/leaderboards/asr...") for item in source_path.iterdir(): if item.is_file(): shutil.copy2(item, ".") elif item.is_dir(): shutil.copytree(item, item.name, dirs_exist_ok=True) else: print("Warning: spaces/leaderboards/asr directory not found in cloned repo") # Install Python requirements if Path("requirements.txt").exists(): print("Installing Python requirements...") run_command(f"{sys.executable} -m pip install -r requirements.txt") else: print("Warning: requirements.txt not found") print("Setup complete!") def main(): """Main function to run the app""" try: # Set up environment first setup_environment() # Check if app.py exists and run it if Path("app.py").exists(): print("Starting the application...") # Run the actual app.py that was copied from the repo subprocess.run([sys.executable, "app.py"]) else: print("app.py not found after setup. Please check the repository structure.") print("Available files:") for file in Path(".").iterdir(): print(f" {file}") except KeyboardInterrupt: print("\nApplication stopped by user") except Exception as e: print(f"Error: {e}") sys.exit(1) if __name__ == "__main__": main()