---
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 configuration is defined and maintained [here](https://github.com/instill-ai/component/blob/main/application/github/v0/config/definition.json).
## 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
withing 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 | `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
| 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 | `pull-requests` | array[object] | An array of PRs |
### 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 (optional) | `commits` | array[object] | commits in the PR |
### 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 (optional) | `stats` | object | stats of changes |
| Files (optional) | `files` | array[object] | files in the commit |
### List Review Comments
Get the review comments in a pull request
| 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 | `comments` | array[object] | An array of comments |
### Create Review Comment
Create a review comment in pull request.
| 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 (required) | `comment` | object | The comment to be added |
| 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 (optional) | `user` | object | User who created the comment |
### List Issues
Get the list of all issues in a repository
| 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 | `issues` | array[object] | An array of issues |
### Get Issue
Get an issue.
| 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
| 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
| 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 (optional) | `config` | object | Configuration of the webhook |
## 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}
```