Spaces:
Sleeping
Sleeping
File size: 2,550 Bytes
f3156fe ffce82d f3156fe ffce82d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
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() |