# 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}"