Add functions to approve, close, merge PRs, and delete branches

This commit is contained in:
2024-08-18 12:31:00 -05:00
parent 8ee7df789e
commit 8e6230a669
+144
View File
@@ -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