my-agent / core /github_sync.py
UzbekLider's picture
Update core/github_sync.py
8fe22f8 verified
Raw
History Blame Contribute Delete
2.14 kB
import os
import logging
from github import Github
log = logging.getLogger("core")
class GitHubSyncer:
def __init__(self, repo_name: str, access_token: str):
self.repo_name = repo_name
self.access_token = access_token
if self.access_token:
self.gh = Github(self.access_token)
try:
self.repo = self.gh.get_repo(self.repo_name)
log.info(f"Connected to GitHub repository: {self.repo_name}")
except Exception as e:
log.error(f"Failed to connect to GitHub repo {self.repo_name}: {e}")
self.repo = None
else:
log.warning("GITHUB_TOKEN not provided. GitHub sync will be disabled.")
self.repo = None
def sync_file(self, file_path: str, content: str, commit_message: str = "Auto-update by AI Agent"):
if not self.repo:
log.warning(f"Skipping GitHub sync for {file_path}: No repository connection.")
return
# Windows yo'lakchalarini GitHub uchun to'g'rilash (/)
git_path = file_path.replace("\\", "/")
try:
# Fayl allaqachon GitHub-da bormi yoki yo'qligini tekshirish
try:
contents = self.repo.get_contents(git_path, ref="main")
# Fayl bor bo'lsa, yangilaymiz (update)
self.repo.update_file(
path=git_path,
message=commit_message,
content=content,
sha=contents.sha,
branch="main"
)
log.info(f"Updated existing file on GitHub: {git_path}")
except Exception:
# Fayl topilmasa, yangi yaratamiz (create)
self.repo.create_file(
path=git_path,
message=commit_message,
content=content,
branch="main"
)
log.info(f"Created new file on GitHub: {git_path}")
except Exception as e:
log.error(f"Failed to sync file {git_path} to GitHub: {e}")
raise e