ArtifaXChatBot / github_manager.py
dharu007's picture
Upload 19 files
f87257e verified
Raw History Blame Contribute Delete
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()