Added issue creation

This commit is contained in:
2024-08-19 14:30:17 -05:00
parent fcd558b4c6
commit e75f5c707e
3 changed files with 149 additions and 13 deletions
+100
View File
@@ -311,6 +311,56 @@ class GitHubTool(BaseTool):
},
"required": ["branch_name"]
}
},
{
"name": "create_issue",
"description": "Create a new issue in the repository",
"parameters": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Title of the issue"
},
"body": {
"type": "string",
"description": "Body of the issue"
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels to apply to the issue"
}
},
"required": ["title", "body"]
}
},
{
"name": "list_issues",
"description": "List issues in the repository",
"parameters": {
"type": "object",
"properties": {
"state": {
"type": "string",
"enum": ["open", "closed", "all"],
"default": "open",
"description": "State of the issues to retrieve"
},
"per_page": {
"type": "integer",
"default": 30,
"description": "Number of issues to return per page"
},
"page": {
"type": "integer",
"default": 1,
"description": "Page number of the results to fetch"
}
}
}
}
]
@@ -351,6 +401,10 @@ class GitHubTool(BaseTool):
kwargs.get("commit_message", ""), kwargs.get("merge_method", "merge"))
elif function_name == "delete_branch":
return self._delete_branch(kwargs["branch_name"])
elif function_name == "create_issue":
return self._create_issue(kwargs["title"], kwargs["body"], kwargs.get("labels", []))
elif function_name == "list_issues":
return self._list_issues(kwargs.get("state", "open"), kwargs.get("per_page", 30), kwargs.get("page", 1))
else:
error_message = f"Unknown function: {function_name}"
self.logger.error(error_message)
@@ -636,3 +690,49 @@ class GitHubTool(BaseTool):
error_message = f"Error deleting branch: {response.status_code}\nResponse: {response.text}"
self.logger.error(error_message)
return error_message
@metrics.measure
def _create_issue(self, title, body, labels=None):
self.logger.info(f"Creating issue: {title}")
url = f"{self.base_url}/repos/{self.repo}/issues"
data = {
"title": title,
"body": body
}
if labels:
data["labels"] = labels
response = requests.post(url, headers=self.headers, json=data)
if response.status_code == 201:
issue = response.json()
success_message = f"Issue created successfully: {issue['html_url']}"
self.logger.info(success_message)
return success_message
else:
error_message = f"Error creating issue: {response.status_code}\nResponse: {response.text}"
self.logger.error(error_message)
return error_message
@metrics.measure
def _list_issues(self, state="open", per_page=30, page=1):
self.logger.info(f"Listing issues. State: {state}, Per page: {per_page}, Page: {page}")
url = f"{self.base_url}/repos/{self.repo}/issues"
params = {
"state": state,
"per_page": per_page,
"page": page
}
response = requests.get(url, headers=self.headers, params=params)
if response.status_code == 200:
issues = [{
"number": issue["number"],
"title": issue["title"],
"state": issue["state"],
"created_at": issue["created_at"],
"url": issue["html_url"]
} for issue in response.json()]
self.logger.info(f"Successfully listed issues. Found {len(issues)} issues.")
return issues
else:
error_message = f"Error listing issues: {response.status_code}\nResponse: {response.text}"
self.logger.error(error_message)
return error_message