Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import tempfile | |
| import shutil | |
| from git import Repo | |
| from github import Github | |
| import os | |
| def clone_and_push(hf_username, hf_space_name, github_repo_name, github_token): | |
| tmp_dir = None | |
| try: | |
| # Prepare the git URL for the Hugging Face Spaces repository | |
| hf_repo_url = f"https://huggingface.co/spaces/{hf_username}/{hf_space_name}.git" | |
| # Create a temporary directory to clone the repository | |
| tmp_dir = tempfile.mkdtemp() | |
| # Clone the Hugging Face Spaces repository | |
| repo = Repo.clone_from(hf_repo_url, tmp_dir) | |
| # Authenticate with GitHub using the provided token | |
| g = Github(github_token) | |
| user = g.get_user() | |
| # Create a new GitHub repository | |
| github_repo = user.create_repo(github_repo_name) | |
| # Remove the existing 'origin' remote pointing to Hugging Face | |
| repo.delete_remote(repo.remotes.origin) | |
| # Construct the authenticated GitHub URL | |
| github_username = user.login | |
| github_remote_url = f"https://{github_username}:{github_token}@github.com/{github_username}/{github_repo_name}.git" | |
| # Add the new 'origin' remote pointing to GitHub | |
| repo.create_remote('origin', github_remote_url) | |
| # Push the code to the new GitHub repository | |
| repo.git.push('origin', 'HEAD:refs/heads/main', set_upstream=True) | |
| return f"Successfully pushed to GitHub repository: {github_repo.html_url}" | |
| except Exception as e: | |
| return f"An error occurred: {str(e)}" | |
| finally: | |
| # Clean up the temporary directory | |
| if tmp_dir and os.path.exists(tmp_dir): | |
| shutil.rmtree(tmp_dir) | |
| iface = gr.Interface( | |
| theme="Nymbo/Nymbo_Theme", | |
| fn=clone_and_push, | |
| inputs=[ | |
| gr.Textbox(label="Hugging Face Username", placeholder="e.g., john_doe"), | |
| gr.Textbox(label="Hugging Face Spaces Name", placeholder="e.g., my-space"), | |
| gr.Textbox(label="GitHub Repository Name", placeholder="e.g., my-new-repo"), | |
| gr.Textbox(label="GitHub Personal Access Token", type="password"), | |
| ], | |
| outputs="text", | |
| title="Hugging Face Spaces to GitHub Repo", | |
| description=""" | |
| Enter the details to clone a Hugging Face Spaces repository and push it to a new GitHub repository. | |
| **Note:** Your GitHub personal access token must have permissions to create repositories and push code (usually the 'repo' scope). | |
| """, | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() |