Spaces:
Sleeping
Sleeping
| import os | |
| import sys | |
| from git import Repo | |
| import importlib.util | |
| def main(): | |
| # GitHub Repository and Directory Setup | |
| repo_url = os.getenv("REPO_URL") # The private repository URL from environment variables | |
| github_token = os.getenv("GITHUB_PAT") # GitHub Personal Access Token from environment variables | |
| local_dir = "repo" | |
| # Clone the private repository if it doesn't exist locally | |
| if not os.path.exists(local_dir): | |
| try: | |
| # Prepare the repo URL with the token for authentication | |
| repo_url = repo_url.replace("https://", f"https://{github_token}@") | |
| print("Cloning the repository...") | |
| Repo.clone_from(repo_url, local_dir) | |
| print("Repository cloned successfully!") | |
| # Add the repo directory to the system path | |
| sys.path.insert(0, local_dir) | |
| except Exception as e: | |
| print(f"Error cloning repository: {e}") | |
| sys.exit(1) # Exit the script if the repo can't be cloned | |
| # Dynamically import and execute the app.py from the cloned repository | |
| try: | |
| spec = importlib.util.spec_from_file_location("cloned_app", os.path.join(local_dir, "app.py")) | |
| module = importlib.util.module_from_spec(spec) | |
| spec.loader.exec_module(module) | |
| # If the module has a 'main' function, call it (for apps like FastAPI or Gradio) | |
| if hasattr(module, "main"): | |
| module.main() | |
| else: | |
| print("No main function found in the cloned app.") | |
| except Exception as e: | |
| print(f"Error running the app from the cloned repo: {e}") | |
| sys.exit(1) # Exit the script if the cloned app can't be executed | |
| if __name__ == "__main__": | |
| main() | |