Add functions to approve, close, merge PRs, and delete branches
This commit is contained in:
@@ -238,6 +238,78 @@ class GitHubTool(BaseTool):
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "approve_pull_request",
|
||||
"description": "Approve a pull request",
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pull_number": {
|
||||
"type": "integer",
|
||||
"description": "The number of the pull request"
|
||||
}
|
||||
},
|
||||
"required": ["pull_number"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "close_pull_request",
|
||||
"description": "Close a pull request",
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pull_number": {
|
||||
"type": "integer",
|
||||
"description": "The number of the pull request"
|
||||
}
|
||||
},
|
||||
"required": ["pull_number"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "merge_pull_request",
|
||||
"description": "Merge a pull request",
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pull_number": {
|
||||
"type": "integer",
|
||||
"description": "The number of the pull request"
|
||||
},
|
||||
"commit_title": {
|
||||
"type": "string",
|
||||
"description": "Title for the automatic commit message",
|
||||
"default": "Merge pull request"
|
||||
},
|
||||
"commit_message": {
|
||||
"type": "string",
|
||||
"description": "Extra detail to append to automatic commit message",
|
||||
"default": ""
|
||||
},
|
||||
"merge_method": {
|
||||
"type": "string",
|
||||
"description": "Merge method to use",
|
||||
"enum": ["merge", "squash", "rebase"],
|
||||
"default": "merge"
|
||||
}
|
||||
},
|
||||
"required": ["pull_number"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "delete_branch",
|
||||
"description": "Delete a branch",
|
||||
"parameters": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"branch_name": {
|
||||
"type": "string",
|
||||
"description": "Name of the branch to delete"
|
||||
}
|
||||
},
|
||||
"required": ["branch_name"]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
||||
@@ -268,6 +340,15 @@ class GitHubTool(BaseTool):
|
||||
return self._list_branches(kwargs.get("per_page", 100), kwargs.get("all_pages", True))
|
||||
elif function_name == "get_branch_sha":
|
||||
return self._get_branch_sha(kwargs["branch"])
|
||||
elif function_name == "approve_pull_request":
|
||||
return self._approve_pull_request(kwargs["pull_number"])
|
||||
elif function_name == "close_pull_request":
|
||||
return self._close_pull_request(kwargs["pull_number"])
|
||||
elif function_name == "merge_pull_request":
|
||||
return self._merge_pull_request(kwargs["pull_number"], kwargs.get("commit_title", "Merge pull request"),
|
||||
kwargs.get("commit_message", ""), kwargs.get("merge_method", "merge"))
|
||||
elif function_name == "delete_branch":
|
||||
return self._delete_branch(kwargs["branch_name"])
|
||||
else:
|
||||
error_message = f"Unknown function: {function_name}"
|
||||
self.logger.error(error_message)
|
||||
@@ -474,3 +555,66 @@ class GitHubTool(BaseTool):
|
||||
|
||||
self.logger.info(f"Successfully listed all branches. Total: {len(all_branches)}")
|
||||
return all_branches
|
||||
|
||||
def _approve_pull_request(self, pull_number):
|
||||
self.logger.info(f"Approving pull request: {pull_number}")
|
||||
url = f"{self.base_url}/repos/{self.repo}/pulls/{pull_number}/reviews"
|
||||
data = {
|
||||
"event": "APPROVE"
|
||||
}
|
||||
response = requests.post(url, headers=self.headers, json=data)
|
||||
if response.status_code == 200:
|
||||
success_message = f"Pull request {pull_number} approved successfully"
|
||||
self.logger.info(success_message)
|
||||
return success_message
|
||||
else:
|
||||
error_message = f"Error approving pull request: {response.status_code}\nResponse: {response.text}"
|
||||
self.logger.error(error_message)
|
||||
return error_message
|
||||
|
||||
def _close_pull_request(self, pull_number):
|
||||
self.logger.info(f"Closing pull request: {pull_number}")
|
||||
url = f"{self.base_url}/repos/{self.repo}/pulls/{pull_number}"
|
||||
data = {
|
||||
"state": "closed"
|
||||
}
|
||||
response = requests.patch(url, headers=self.headers, json=data)
|
||||
if response.status_code == 200:
|
||||
success_message = f"Pull request {pull_number} closed successfully"
|
||||
self.logger.info(success_message)
|
||||
return success_message
|
||||
else:
|
||||
error_message = f"Error closing pull request: {response.status_code}\nResponse: {response.text}"
|
||||
self.logger.error(error_message)
|
||||
return error_message
|
||||
|
||||
def _merge_pull_request(self, pull_number, commit_title, commit_message, merge_method):
|
||||
self.logger.info(f"Merging pull request: {pull_number}")
|
||||
url = f"{self.base_url}/repos/{self.repo}/pulls/{pull_number}/merge"
|
||||
data = {
|
||||
"commit_title": commit_title,
|
||||
"commit_message": commit_message,
|
||||
"merge_method": merge_method
|
||||
}
|
||||
response = requests.put(url, headers=self.headers, json=data)
|
||||
if response.status_code == 200:
|
||||
success_message = f"Pull request {pull_number} merged successfully"
|
||||
self.logger.info(success_message)
|
||||
return success_message
|
||||
else:
|
||||
error_message = f"Error merging pull request: {response.status_code}\nResponse: {response.text}"
|
||||
self.logger.error(error_message)
|
||||
return error_message
|
||||
|
||||
def _delete_branch(self, branch_name):
|
||||
self.logger.info(f"Deleting branch: {branch_name}")
|
||||
url = f"{self.base_url}/repos/{self.repo}/git/refs/heads/{branch_name}"
|
||||
response = requests.delete(url, headers=self.headers)
|
||||
if response.status_code == 204:
|
||||
success_message = f"Branch {branch_name} deleted successfully"
|
||||
self.logger.info(success_message)
|
||||
return success_message
|
||||
else:
|
||||
error_message = f"Error deleting branch: {response.status_code}\nResponse: {response.text}"
|
||||
self.logger.error(error_message)
|
||||
return error_message
|
||||
Reference in New Issue
Block a user