Spaces:
Sleeping
Sleeping
Download github_manager.py from dharu007/ArtifaXChatBot: direct link, hf CLI and curl.
- Browser
- Download file 7.15 kB
-
https://huggingface.co/spaces/dharu007/ArtifaXChatBot/resolve/main/github_manager.py
- Command line
-
hf download hf://spaces/dharu007/ArtifaXChatBot/github_manager.py
-
curl -L -o github_manager.py https://huggingface.co/spaces/dharu007/ArtifaXChatBot/resolve/main/github_manager.py
7.15 kB
| #!/usr/bin/env python3 | |
| """ | |
| GitHub Repository Manager for ArtifaX | |
| Automatically creates and manages GitHub repository using GitHub API | |
| """ | |
| import os | |
| import json | |
| import base64 | |
| from github import Github | |
| # Removed version import - using static version info | |
| class GitHubManager: | |
| def __init__(self, token=None): | |
| self.token = token or self.load_token() | |
| self.github = Github(self.token) if self.token else None | |
| def load_token(self): | |
| """Load GitHub token from config or environment""" | |
| try: | |
| config_path = os.path.join('config', 'github_config.json') | |
| if os.path.exists(config_path): | |
| with open(config_path, 'r') as f: | |
| config = json.load(f) | |
| return config.get('token') | |
| except: | |
| pass | |
| return os.environ.get('GITHUB_TOKEN') | |
| def create_repository(self, repo_name="ArtifaX", description=None, private=True): | |
| """Create a new GitHub repository""" | |
| if not self.github: | |
| return False, "GitHub token not configured" | |
| try: | |
| user = self.github.get_user() | |
| # Check if repo already exists | |
| try: | |
| existing_repo = user.get_repo(repo_name) | |
| return True, f"Repository already exists: {existing_repo.html_url}" | |
| except: | |
| pass | |
| # Create new repository | |
| repo_description = description or "ArtifaX - BA Automation Assistant - v1.2.0" | |
| repo = user.create_repo( | |
| name=repo_name, | |
| description=repo_description, | |
| private=private, | |
| auto_init=False | |
| ) | |
| return True, f"Repository created: {repo.html_url}" | |
| except Exception as e: | |
| return False, f"Failed to create repository: {str(e)}" | |
| def upload_files(self, repo_name="ArtifaX"): | |
| """Upload all project files to GitHub repository""" | |
| if not self.github: | |
| return False, "GitHub token not configured" | |
| try: | |
| user = self.github.get_user() | |
| repo = user.get_repo(repo_name) | |
| # Files to upload | |
| files_to_upload = [ | |
| 'web_server.py', | |
| 'server.py', | |
| 'ai_client.py', | |
| 'jira_client.py', | |
| 'document_generator.py', | |
| 'content_filter.py', | |
| 'version.py', | |
| 'requirements.txt', | |
| 'README.md', | |
| 'CHANGELOG.md', | |
| '.gitignore', | |
| 'agents/mapping_agent.py', | |
| 'agents/testcase_agent.py', | |
| 'agents/sequence_agent.py', | |
| 'agents/conversation_agent.py', | |
| 'templates/chat.html', | |
| 'config/ui_config.json', | |
| 'config/content_filter_config.json' | |
| ] | |
| uploaded_files = [] | |
| for file_path in files_to_upload: | |
| if os.path.exists(file_path): | |
| try: | |
| with open(file_path, 'r', encoding='utf-8') as f: | |
| content = f.read() | |
| repo.create_file( | |
| path=file_path, | |
| message=f"Add {file_path}", | |
| content=content | |
| ) | |
| uploaded_files.append(file_path) | |
| except Exception as e: | |
| print(f"Failed to upload {file_path}: {e}") | |
| return True, f"Uploaded {len(uploaded_files)} files successfully" | |
| except Exception as e: | |
| return False, f"Failed to upload files: {str(e)}" | |
| def create_release(self, repo_name="ArtifaX", tag_name=None, release_name=None): | |
| """Create a GitHub release""" | |
| if not self.github: | |
| return False, "GitHub token not configured" | |
| try: | |
| user = self.github.get_user() | |
| repo = user.get_repo(repo_name) | |
| tag = tag_name or "v1.2.0" | |
| name = release_name or "ArtifaX 1.2.0" | |
| # Read changelog for release notes | |
| release_notes = "Initial release of ArtifaX - BA Automation Assistant" | |
| try: | |
| with open('CHANGELOG.md', 'r') as f: | |
| changelog = f.read() | |
| # Extract current version notes | |
| lines = changelog.split('\n') | |
| in_current_version = False | |
| notes = [] | |
| for line in lines: | |
| if line.startswith('## [') and '1.2.0' in line: | |
| in_current_version = True | |
| continue | |
| elif line.startswith('## [') and in_current_version: | |
| break | |
| elif in_current_version: | |
| notes.append(line) | |
| if notes: | |
| release_notes = '\n'.join(notes).strip() | |
| except: | |
| pass | |
| release = repo.create_git_release( | |
| tag=tag, | |
| name=name, | |
| message=release_notes, | |
| draft=False, | |
| prerelease=False | |
| ) | |
| return True, f"Release created: {release.html_url}" | |
| except Exception as e: | |
| return False, f"Failed to create release: {str(e)}" | |
| def main(): | |
| """Interactive GitHub setup""" | |
| print("π ArtifaX GitHub Manager") | |
| print("=" * 40) | |
| # Get GitHub token | |
| token = input("Enter your GitHub Personal Access Token: ").strip() | |
| if not token: | |
| print("β GitHub token is required") | |
| return | |
| # Save token to config | |
| os.makedirs('config', exist_ok=True) | |
| config_path = os.path.join('config', 'github_config.json') | |
| with open(config_path, 'w') as f: | |
| json.dump({"token": token}, f, indent=2) | |
| manager = GitHubManager(token) | |
| # Create repository | |
| print("\nπ Creating GitHub repository...") | |
| success, message = manager.create_repository() | |
| print(f"{'β ' if success else 'β'} {message}") | |
| if success: | |
| # Upload files | |
| print("\nπ€ Uploading project files...") | |
| success, message = manager.upload_files() | |
| print(f"{'β ' if success else 'β'} {message}") | |
| if success: | |
| # Create release | |
| print("\nπ·οΈ Creating release...") | |
| success, message = manager.create_release() | |
| print(f"{'β ' if success else 'β'} {message}") | |
| print("\nπ GitHub setup complete!") | |
| print("\nNext steps:") | |
| print("1. Visit your repository on GitHub") | |
| print("2. Clone locally: git clone <repository-url>") | |
| print("3. Make changes and push updates") | |
| if __name__ == "__main__": | |
| main() |