Spaces:
Build error
Build error
# FallnAI Autonomous Software Developer | |
# github_manager.py | |
import os | |
from github import Github, InputGitTreeElement | |
class GitHubManager: | |
"""A tool to manage GitHub repositories and push code.""" | |
def __init__(self, token): | |
self.github = Github(token) | |
def create_and_push_repo(self, repo_name, commit_message, files): | |
""" | |
Creates a new public repository and pushes a set of files to it. | |
:param repo_name: The name for the new repository. | |
:param commit_message: The message for the initial commit. | |
:param files: A dictionary of {file_path: file_content}. | |
:return: The URL of the new repository on success, or an error message. | |
""" | |
try: | |
user = self.github.get_user() | |
# Check if repo already exists | |
try: | |
user.get_repo(repo_name) | |
return f"Error: Repository '{repo_name}' already exists." | |
except Exception: | |
pass # Repo doesn't exist, which is what we want | |
# Create the repository | |
repo = user.create_repo(repo_name, private=False) | |
main_branch = repo.get_branch("main") | |
# Prepare files for the commit | |
elements = [] | |
for file_path, content in files.items(): | |
elements.append(InputGitTreeElement(file_path, '100644', 'blob', content)) | |
# Create the initial commit | |
base_tree = repo.get_git_tree(main_branch.commit.sha) | |
new_tree = repo.create_git_tree(elements, base_tree) | |
new_commit = repo.create_git_commit(commit_message, new_tree, [main_branch.commit]) | |
main_branch.set_reference(f"refs/heads/main", new_commit.sha) | |
return f"Success: Repository created and code pushed. URL: {repo.html_url}" | |
except Exception as e: | |
return f"Error pushing to GitHub: {e}" | |