c56bef871b
CodeQL / Analyze (python) (push) Has been cancelled
Update Platform Components Table / update (push) Has been cancelled
Docker image release / Build base image (push) Has been cancelled
Sync docs with Docusaurus / sync (push) Has been cancelled
Tests / Check if changed (push) Has been cancelled
Tests / format (push) Has been cancelled
Tests / check-imports (push) Has been cancelled
Tests / Unit / macos-latest (push) Has been cancelled
Tests / Unit / ubuntu-latest (push) Has been cancelled
Tests / Unit / windows-latest (push) Has been cancelled
Tests / mypy (push) Has been cancelled
Tests / Integration / ubuntu-latest (push) Has been cancelled
Tests / Integration / macos-latest (push) Has been cancelled
Tests / Integration / windows-latest (push) Has been cancelled
Tests / notify-slack-on-failure (push) Has been cancelled
Tests / Mark tests as completed (push) Has been cancelled
130 lines
4.2 KiB
Plaintext
130 lines
4.2 KiB
Plaintext
---
|
|
title: "GitHubIssueCommenter"
|
|
id: githubissuecommenter
|
|
slug: "/githubissuecommenter"
|
|
description: "This component posts comments to GitHub issues using the GitHub API."
|
|
---
|
|
|
|
# GitHubIssueCommenter
|
|
|
|
This component posts comments to GitHub issues using the GitHub API.
|
|
|
|
<div className="key-value-table">
|
|
|
|
| | |
|
|
| --- | --- |
|
|
| **Most common position in a pipeline** | After a Chat Generator that provides the comment text to post or right at the beginning of a pipeline |
|
|
| **Mandatory init variables** | `github_token`: GitHub personal access token. Can be set with `GITHUB_TOKEN` env var. |
|
|
| **Mandatory run variables** | `url`: A GitHub issue URL <br /> <br />`comment`: Comment text to post |
|
|
| **Output variables** | `success`: Boolean indicating whether the comment was posted successfully |
|
|
| **API reference** | [GitHub](/reference/integrations-github) |
|
|
| **GitHub link** | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/github |
|
|
| **Package name** | `github-haystack` |
|
|
|
|
</div>
|
|
|
|
## Overview
|
|
|
|
`GitHubIssueCommenter` takes a GitHub issue URL and comment text, then posts the comment to the specified issue.
|
|
|
|
The component requires authentication with a GitHub personal access token since posting comments is an authenticated operation.
|
|
|
|
### Authorization
|
|
|
|
This component requires GitHub authentication with a personal access token. You can set the token using the `GITHUB_TOKEN` environment variable, or pass it directly during initialization via the `github_token` parameter.
|
|
|
|
To create a personal access token, visit [GitHub's token settings page](https://github.com/settings/tokens). Make sure to grant the appropriate permissions for repository access and issue management.
|
|
|
|
### Installation
|
|
|
|
Install the GitHub integration with pip:
|
|
|
|
```shell
|
|
pip install github-haystack
|
|
```
|
|
|
|
## Usage
|
|
|
|
:::info[Repository Placeholder]
|
|
|
|
To run the following code snippets, you need to replace the `owner/repo` with your own GitHub repository name.
|
|
:::
|
|
|
|
### On its own
|
|
|
|
Basic usage with environment variable authentication:
|
|
|
|
```python
|
|
from haystack_integrations.components.connectors.github import GitHubIssueCommenter
|
|
|
|
commenter = GitHubIssueCommenter()
|
|
result = commenter.run(
|
|
url="https://github.com/owner/repo/issues/123",
|
|
comment="Thanks for reporting this issue! We'll look into it.",
|
|
)
|
|
|
|
print(result)
|
|
```
|
|
|
|
```bash
|
|
{'success': True}
|
|
```
|
|
|
|
### In a pipeline
|
|
|
|
The following pipeline analyzes a GitHub issue and automatically posts a response:
|
|
|
|
```python
|
|
from haystack import Pipeline
|
|
from haystack.components.builders.chat_prompt_builder import ChatPromptBuilder
|
|
from haystack.components.generators.chat import OpenAIChatGenerator
|
|
from haystack.dataclasses import ChatMessage
|
|
from haystack_integrations.components.connectors.github import (
|
|
GitHubIssueViewer,
|
|
GitHubIssueCommenter,
|
|
)
|
|
|
|
issue_viewer = GitHubIssueViewer()
|
|
issue_commenter = GitHubIssueCommenter()
|
|
|
|
prompt_template = [
|
|
ChatMessage.from_system(
|
|
"You are a helpful assistant that analyzes GitHub issues and creates appropriate responses.",
|
|
),
|
|
ChatMessage.from_user(
|
|
"Based on the following GitHub issue:\n"
|
|
"{% for document in documents %}"
|
|
"{% if document.meta.type == 'issue' %}"
|
|
"**Issue Title:** {{ document.meta.title }}\n"
|
|
"**Issue Description:** {{ document.content }}\n"
|
|
"{% endif %}"
|
|
"{% endfor %}\n"
|
|
"Generate a helpful response comment for this issue. Keep it professional and concise.",
|
|
),
|
|
]
|
|
|
|
prompt_builder = ChatPromptBuilder(template=prompt_template, required_variables="*")
|
|
llm = OpenAIChatGenerator(model="gpt-4o-mini")
|
|
|
|
pipeline = Pipeline()
|
|
pipeline.add_component("issue_viewer", issue_viewer)
|
|
pipeline.add_component("prompt_builder", prompt_builder)
|
|
pipeline.add_component("llm", llm)
|
|
pipeline.add_component("issue_commenter", issue_commenter)
|
|
|
|
pipeline.connect("issue_viewer.documents", "prompt_builder.documents")
|
|
pipeline.connect("prompt_builder.prompt", "llm.messages")
|
|
pipeline.connect("llm.replies", "issue_commenter.comment")
|
|
|
|
issue_url = "https://github.com/owner/repo/issues/123"
|
|
result = pipeline.run(
|
|
data={"issue_viewer": {"url": issue_url}, "issue_commenter": {"url": issue_url}},
|
|
)
|
|
|
|
print(f"Comment posted successfully: {result['issue_commenter']['success']}")
|
|
```
|
|
|
|
```
|
|
Comment posted successfully: True
|
|
```
|