---
title: "GitHub"
lang: "en-US"
draft: false
description: "Learn about how to set up a VDP GitHub component https://github.com/instill-ai/instill-core"
---
The GitHub component is an application component that allows users to do anything available on GitHub.
It can carry out the following tasks:
- [List Pull Requests](#list-pull-requests)
- [Get Pull Request](#get-pull-request)
- [Get Commit](#get-commit)
- [List Review Comments](#list-review-comments)
- [Create Review Comment](#create-review-comment)
- [List Issues](#list-issues)
- [Get Issue](#get-issue)
- [Create Issue](#create-issue)
- [Create Webhook](#create-webhook)
## Release Stage
`Alpha`
## Configuration
The component definition and tasks are defined in the [definition.json](https://github.com/instill-ai/component/blob/main/application/github/v0/config/definition.json) and [tasks.json](https://github.com/instill-ai/component/blob/main/application/github/v0/config/tasks.json) files respectively.
## Setup
In order to communicate with GitHub, the following connection details need to be
provided. You may specify them directly in a pipeline recipe as key-value pairs
within the component's `setup` block, or you can create a **Connection** from
the [**Integration Settings**](https://www.instill.tech/docs/vdp/integration)
page and reference the whole `setup` as `setup:
${connection.<my-connection-id>}`.
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| Token (required) | `token` | string | Fill in your GitHub access token for advanced usages. For more information about how to create tokens, please refer to the <a href="https://github.com/settings/tokens">github settings</a>. |
## Supported Tasks
### List Pull Requests
Get the list of all pull requests in a repository. Detailed information about each commit in a PR is omitted, please use the `Get Commit` task or the `Get Pull Request` task to get the details of a commit.
| Input | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Task ID (required) | `task` | string | `TASK_LIST_PULL_REQUESTS` |
| Owner (required) | `owner` | string | Owner of the repository |
| Repository (required) | `repository` | string | Repository name |
| State | `state` | string | State of the PRs, including open, closed, all. Default is open |
| Sort | `sort` | string | Sort the PRs by created, updated, popularity, or long-running. Default is created |
| Direction | `direction` | string | Direction of the sort, including asc or desc. Default is desc |
| Page | `page` | integer | Page number of the results to fetch. Default is 1 |
| Per Page | `per-page` | integer | Number of results to fetch per page. Default is 30 |
| Output | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| [Pull Requests](#list-pull-requests-pull-requests) | `pull-requests` | array[object] | An array of PRs |
<details>
<summary> Output Objects in List Pull Requests</summary>
<h4 id="list-pull-requests-pull-requests">Pull Requests</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| PR base | `base` | string | base commit of the PR (in SHA value) |
| PR body | `body` | string | Body of the PR |
| Number of PR comments | `comments-num` | integer | number of comments on the PR |
| [Commits](#list-pull-requests-commits) | `commits` | array | commits in the PR |
| Number of PR commits | `commits-num` | integer | number of commits in the PR |
| PR diff url | `diff-url` | string | url to the diff of the PR |
| PR head | `head` | string | head commit of the PR (in SHA value) |
| PR id | `id` | integer | id of the PR |
| PR number | `number` | integer | number of the PR |
| Number of PR review comments | `review-comments-num` | integer | number of review comments in the PR |
| PR state | `state` | string | state of the PR |
| PR Title | `title` | string | Title of the PR |
<h4 id="list-pull-requests-commits">Commits</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| [Files](#list-pull-requests-files) | `files` | array | files in the commit |
| Commit message | `message` | string | message of the commit |
| Commit SHA | `sha` | string | SHA of the commit |
| [Commit stats](#list-pull-requests-commit-stats) | `stats` | object | stats of changes |
<h4 id="list-pull-requests-commit-stats">Commit Stats</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| Additions | `additions` | integer | number of additions in the commit |
| Total changes | `changes` | integer | total number of changes in the commit |
| Deletions | `deletions` | integer | number of deletions in the commit |
<h4 id="list-pull-requests-files">Files</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| Additions | `additions` | integer | number of additions in the commit |
| Total changes | `changes` | integer | total number of changes in the commit |
| Deletions | `deletions` | integer | number of deletions in the commit |
| File name | `filename` | string | name of the file |
| Patch | `patch` | string | patch of the file |
</details>
### Get Pull Request
Get a pull request from a repository, given the PR number. This will default to the latest PR if no PR number is provided
| Input | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Task ID (required) | `task` | string | `TASK_GET_PULL_REQUEST` |
| Owner (required) | `owner` | string | Owner of the repository |
| Repository (required) | `repository` | string | Repository name |
| PR Number | `pr-number` | integer | Number of the PR. `0` for the latest PR |
| Output | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| PR id (optional) | `id` | integer | id of the PR |
| PR number (optional) | `number` | integer | number of the PR |
| PR state (optional) | `state` | string | state of the PR |
| PR Title (optional) | `title` | string | Title of the PR |
| PR body (optional) | `body` | string | Body of the PR |
| PR diff url (optional) | `diff-url` | string | url to the diff of the PR |
| PR head (optional) | `head` | string | head commit of the PR (in SHA value) |
| PR base (optional) | `base` | string | base commit of the PR (in SHA value) |
| Number of PR comments (optional) | `comments-num` | integer | number of comments on the PR |
| Number of PR commits (optional) | `commits-num` | integer | number of commits in the PR |
| Number of PR review comments (optional) | `review-comments-num` | integer | number of review comments in the PR |
| [Commits](#get-pull-request-commits) (optional) | `commits` | array[object] | commits in the PR |
<details>
<summary> Output Objects in Get Pull Request</summary>
<h4 id="get-pull-request-commits">Commits</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| [Files](#get-pull-request-files) | `files` | array | files in the commit |
| Commit message | `message` | string | message of the commit |
| Commit SHA | `sha` | string | SHA of the commit |
| [Commit stats](#get-pull-request-commit-stats) | `stats` | object | stats of changes |
<h4 id="get-pull-request-commit-stats">Commit Stats</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| Additions | `additions` | integer | number of additions in the commit |
| Total changes | `changes` | integer | total number of changes in the commit |
| Deletions | `deletions` | integer | number of deletions in the commit |
<h4 id="get-pull-request-files">Files</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| Additions | `additions` | integer | number of additions in the commit |
| Total changes | `changes` | integer | total number of changes in the commit |
| Deletions | `deletions` | integer | number of deletions in the commit |
| File name | `filename` | string | name of the file |
| Patch | `patch` | string | patch of the file |
</details>
### Get Commit
Get a commit from a repository, given the commit SHA
| Input | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Task ID (required) | `task` | string | `TASK_GET_COMMIT` |
| Owner (required) | `owner` | string | Owner of the repository |
| Repository (required) | `repository` | string | Repository name |
| Commit SHA (required) | `sha` | string | SHA of the commit |
| Output | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Commit SHA (optional) | `sha` | string | SHA of the commit |
| Commit message (optional) | `message` | string | message of the commit |
| [Commit stats](#get-commit-commit-stats) (optional) | `stats` | object | stats of changes |
| [Files](#get-commit-files) (optional) | `files` | array[object] | files in the commit |
<details>
<summary> Output Objects in Get Commit</summary>
<h4 id="get-commit-commit-stats">Commit Stats</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| Additions | `additions` | integer | number of additions in the commit |
| Total changes | `changes` | integer | total number of changes in the commit |
| Deletions | `deletions` | integer | number of deletions in the commit |
<h4 id="get-commit-files">Files</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| Additions | `additions` | integer | number of additions in the commit |
| Total changes | `changes` | integer | total number of changes in the commit |
| Deletions | `deletions` | integer | number of deletions in the commit |
| File name | `filename` | string | name of the file |
| Patch | `patch` | string | patch of the file |
</details>
### List Review Comments
Get the review comments in a pull request. The comments can be on a specific line or on the PR as a whole.
| Input | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Task ID (required) | `task` | string | `TASK_LIST_REVIEW_COMMENTS` |
| Owner (required) | `owner` | string | Owner of the repository |
| Repository (required) | `repository` | string | Repository name |
| PR Number | `pr-number` | integer | Number of the PR. Default is `0`, which retrieves all comments on all PRs in the repository |
| Sort | `sort` | string | Sort the comments by created, updated. Default is created |
| Direction | `direction` | string | Direction of the sort, including asc or desc. Default is desc |
| Since | `since` | string | Only comments updated at or after this time are returned. Default is 2021-01-01T00:00:00Z |
| Page | `page` | integer | Page number of the results to fetch. Default is 1 |
| Per Page | `per-page` | integer | Number of results to fetch per page. Default is 30 |
| Output | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| [Comments](#list-review-comments-comments) | `comments` | array[object] | An array of comments |
<details>
<summary> Output Objects in List Review Comments</summary>
<h4 id="list-review-comments-comments">Comments</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| Comment body | `body` | string | Body of the comment |
| Commit SHA | `commitId` | string | SHA of the commit on which you want to comment |
| Comment created at | `created-at` | string | Time the comment was created |
| Comment id | `id` | integer | ID of the comment |
| In Reply To | `in-reply-to-id` | integer | ID of the comment this comment is in reply to |
| Comment end line | `line` | integer | The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to. |
| Comment path | `path` | string | Path of the file the comment is on |
| Comment end side | `side` | string | Side of the end line, can be one of: LEFT, RIGHT, side. LEFT is the left side of the diff (deletion), RIGHT is the right side of the diff (addition), and side is the comment on the PR as a whole. Default is side. |
| Comment start line | `start-line` | integer | The first line in the pull request diff that your multi-line comment applies to. Only multi-line comment needs to fill this field. |
| Comment start side | `start-side` | string | Side of the start line, can be one of: LEFT, RIGHT, side. LEFT is the left side of the diff (deletion), RIGHT is the right side of the diff (addition), and side is the comment on the PR as a whole. Default is side. |
| Comment type | `subject-type` | string | Subject type of the comment, can be one of: line, file. Default is line |
| Comment updated at | `updated-at` | string | Time the comment was updated |
| [User](#list-review-comments-user) | `user` | object | User who created the comment |
<h4 id="list-review-comments-user">User</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| User id | `id` | integer | ID of the user |
| User URL | `url` | string | URL of the user |
</details>
### Create Review Comment
Create a review comment in a pull request. The comment can be a general comment or a review comment. The comment can be on a specific line or on the PR as a whole.
| Input | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Task ID (required) | `task` | string | `TASK_CREATE_REVIEW_COMMENT` |
| Owner (required) | `owner` | string | Owner of the repository |
| Repository (required) | `repository` | string | Repository name |
| PR Number (required) | `pr-number` | integer | Number of the PR |
| [Comment](#create-review-comment-comment) (required) | `comment` | object | The comment to be added |
<details>
<summary> Input Objects in Create Review Comment</summary>
<h4 id="create-review-comment-comment">Comment</h4>
The comment to be added
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| Comment body | `body` | string | Body of the comment |
| Commit SHA | `commit-id` | string | SHA of the commit on which you want to comment |
| Comment end line | `line` | integer | The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to. |
| Comment path | `path` | string | Path of the file the comment is on |
| Comment end side | `side` | string | Side of the end line, can be one of: LEFT, RIGHT, side. LEFT is the left side of the diff (deletion), RIGHT is the right side of the diff (addition), and side is the comment on the PR as a whole. Default is side. <br/><details><summary><strong>Enum values</strong></summary><ul><li>`LEFT`</li><li>`RIGHT`</li><li>`side`</li></ul></details> |
| Comment start line | `start-line` | integer | The first line in the pull request diff that your multi-line comment applies to. Only multi-line comment needs to fill this field. |
| Comment start side | `start-side` | string | Side of the start line, can be one of: LEFT, RIGHT, side. LEFT is the left side of the diff (deletion), RIGHT is the right side of the diff (addition), and side is the comment on the PR as a whole. Default is side. <br/><details><summary><strong>Enum values</strong></summary><ul><li>`LEFT`</li><li>`RIGHT`</li><li>`side`</li></ul></details> |
| Comment type | `subject-type` | string | Subject type of the comment, can be one of: line, file. Default is line <br/><details><summary><strong>Enum values</strong></summary><ul><li>`line`</li><li>`file`</li></ul></details> |
</details>
| Output | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Comment id (optional) | `id` | integer | ID of the comment |
| In Reply To (optional) | `in-reply-to-id` | integer | ID of the comment this comment is in reply to |
| Commit SHA (optional) | `commitId` | string | SHA of the commit on which you want to comment |
| Comment body (optional) | `body` | string | Body of the comment |
| Comment path (optional) | `path` | string | Path of the file the comment is on |
| Comment end line (optional) | `line` | integer | The line of the blob in the pull request diff that the comment applies to. For a multi-line comment, the last line of the range that your comment applies to. |
| Comment start line (optional) | `start-line` | integer | The first line in the pull request diff that your multi-line comment applies to. Only multi-line comment needs to fill this field. |
| Comment end side (optional) | `side` | string | Side of the end line, can be one of: LEFT, RIGHT, side. LEFT is the left side of the diff (deletion), RIGHT is the right side of the diff (addition), and side is the comment on the PR as a whole. Default is side. |
| Comment start side (optional) | `start-side` | string | Side of the start line, can be one of: LEFT, RIGHT, side. LEFT is the left side of the diff (deletion), RIGHT is the right side of the diff (addition), and side is the comment on the PR as a whole. Default is side. |
| Comment type (optional) | `subject-type` | string | Subject type of the comment, can be one of: line, file. Default is line |
| Comment created at (optional) | `created-at` | string | Time the comment was created |
| Comment updated at (optional) | `updated-at` | string | Time the comment was updated |
| [User](#create-review-comment-user) (optional) | `user` | object | User who created the comment |
<details>
<summary> Output Objects in Create Review Comment</summary>
<h4 id="create-review-comment-user">User</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| User id | `id` | integer | ID of the user |
| User URL | `url` | string | URL of the user |
</details>
### List Issues
Get the list of all issues in a repository,This can be a pull request or a general issue, and you can tell by the `is-pull-request` field.
| Input | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Task ID (required) | `task` | string | `TASK_LIST_ISSUES` |
| Owner (required) | `owner` | string | Owner of the repository |
| Repository (required) | `repository` | string | Repository name |
| State | `state` | string | State of the issues, can be one of: open, closed, all. Default is open |
| Sort | `sort` | string | Sort the issues by created, updated, popularity, or long-running. Default is created |
| Direction | `direction` | string | Direction of the sort, can be one of: asc, desc. Default is desc |
| Since | `since` | string | Only issues updated at or after this time are returned. Default is 2021-01-01T00:00:00Z |
| No Pull Request | `no-pull-request` | boolean | Whether to `not` include pull requests in the response. Since issue and pr use the same indexing system in GitHub, the API returns all relevant objects (issues and pr). Default is false |
| Page | `page` | integer | Page number of the results to fetch. Default is 1 |
| Per Page | `per-page` | integer | Number of results to fetch per page. Default is 30 |
| Output | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| [Issues](#list-issues-issues) | `issues` | array[object] | An array of issues |
<details>
<summary> Output Objects in List Issues</summary>
<h4 id="list-issues-issues">Issues</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| Assignee | `assignee` | string | Assignee of the issue |
| Assignees | `assignees` | array | Assignees of the issue |
| Issue body | `body` | string | Body of the issue |
| Is Pull Request | `is-pull-request` | boolean | Whether the issue is a pull request |
| Labels | `labels` | array | Labels of the issue |
| Issue number | `number` | integer | Number of the issue |
| Issue state | `state` | string | State of the issue |
| Issue title | `title` | string | Title of the issue |
</details>
### Get Issue
Get an issue. This can be a pull request or a general issue, and you can tell by the `is-pull-request` field.
| Input | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Task ID (required) | `task` | string | `TASK_GET_ISSUE` |
| Owner (required) | `owner` | string | Owner of the repository |
| Repository (required) | `repository` | string | Repository name |
| Issue Number (required) | `issue-number` | integer | Number of the issue |
| Output | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Issue number (optional) | `number` | integer | Number of the issue |
| Issue state (optional) | `state` | string | State of the issue |
| Issue title (optional) | `title` | string | Title of the issue |
| Issue body (optional) | `body` | string | Body of the issue |
| Assignee (optional) | `assignee` | string | Assignee of the issue |
| Assignees (optional) | `assignees` | array[string] | Assignees of the issue |
| Labels (optional) | `labels` | array[string] | Labels of the issue |
| Is Pull Request (optional) | `is-pull-request` | boolean | Whether the issue is a pull request |
### Create Issue
Create an issue
| Input | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Task ID (required) | `task` | string | `TASK_CREATE_ISSUE` |
| Owner (required) | `owner` | string | Owner of the repository |
| Repository (required) | `repository` | string | Repository name |
| Issue title (required) | `title` | string | Title of the issue |
| Issue body (required) | `body` | string | Body of the issue |
| Output | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Issue number (optional) | `number` | integer | Number of the issue |
| Issue state (optional) | `state` | string | State of the issue |
| Issue title (optional) | `title` | string | Title of the issue |
| Issue body (optional) | `body` | string | Body of the issue |
| Assignee (optional) | `assignee` | string | Assignee of the issue |
| Assignees (optional) | `assignees` | array[string] | Assignees of the issue |
| Labels (optional) | `labels` | array[string] | Labels of the issue |
| Is Pull Request (optional) | `is-pull-request` | boolean | Whether the issue is a pull request |
### Create Webhook
Create a webhook for a repository
| Input | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Task ID (required) | `task` | string | `TASK_CREATE_WEBHOOK` |
| Owner (required) | `owner` | string | Owner of the repository |
| Repository (required) | `repository` | string | Repository name |
| Webhook URL (required) | `hook-url` | string | URL to send the payload to |
| Events (required) | `events` | array[string] | Events to trigger the webhook. Please see <a href="https://docs.github.com/en/webhooks/webhook-events-and-payloads">the github document</a> for more information |
| Active | `active` | boolean | Whether the webhook is active. Default is false |
| Content Type | `content-type` | string | Content type of the webhook, can be one of: json, form. Default is json |
| Hook Secret | `hook-secret` | string | If provided, the secret will be used as the key to generate the HMAC hex digest value for delivery signature headers. (see <a href="https://docs.github.com/en/webhooks/webhook-events-and-payloads#delivery-headers">the document</a>) |
| Output | ID | Type | Description |
| :--- | :--- | :--- | :--- |
| Webhook ID (optional) | `id` | integer | ID of the webhook |
| Webhook URL (optional) | `url` | string | URL of the webhook |
| Ping URL (optional) | `ping-url` | string | URL to ping the webhook |
| Test URL (optional) | `test-url` | string | URL to test the webhook |
| [Config](#create-webhook-config) (optional) | `config` | object | Configuration of the webhook |
<details>
<summary> Output Objects in Create Webhook</summary>
<h4 id="create-webhook-config">Config</h4>
| Field | Field ID | Type | Note |
| :--- | :--- | :--- | :--- |
| Content Type | `content-type` | string | Content type of the webhook |
| Insecure SSL | `insecure-ssl` | string | Whether the webhook is insecure |
| Webhook URL | `url` | string | URL of the webhook |
</details>
## Example Recipes
Recipe for the [List GitHub Repo Issues](https://instill.tech/instill-ai/pipelines/github-demo/playground) pipeline.
```yaml
version: v1beta
component:
anthropic-0:
type: anthropic
task: TASK_TEXT_GENERATION_CHAT
input:
max-new-tokens: 1000
model-name: claude-3-5-sonnet-20240620
prompt: Summarise and pick the most important issues from this list ${github.output.issues}
system-message: You are a helpful assistant.
temperature: 0.7
top-k: 10
setup:
api-key: ${secret.INSTILL_SECRET}
github:
type: github
task: TASK_LIST_ISSUES
input:
direction: desc
no-pull-request: false
owner: ${variable.repository-owner}
page: 1
per-page: 30
repository: ${variable.repository-name}
since: "2021-01-01T00:00:00Z"
sort: created
state: open
setup:
token: ${secret.github-demo}
variable:
repository-name:
title: Repository Name
description: Name of the repository i.e. instill-core
instill-format: string
repository-owner:
title: Repository Owner
description: Name of the repository owner i.e. instill-ai
instill-format: string
output:
result:
title: Result
value: ${anthropic-0.output.text}
```