Workflows
Blocks
Integrations
GitHub

GitHub Action Block

What it does: Create and manage issues, pull requests, releases, comments, and files in any GitHub repository directly from your workflows.

🎯

In simple terms: Connect your workflows to GitHub so you can automatically create bug reports, track feature requests, cut releases, review PRs, and sync data between GitHub and other tools — without writing a single API call.

When to Use This

Use the GitHub action when you need to:

  • ✅ Create GitHub issues automatically from form submissions, support tickets, or alerts
  • ✅ Add comments to issues with context from other systems
  • ✅ Create and manage releases as part of a CI/CD workflow
  • ✅ List open issues or PRs for reporting and dashboards
  • ✅ Read files from a repository for downstream processing
  • ✅ Create pull requests programmatically
  • ✅ Review PRs with automated review comments

Example: When a customer submits a bug report, automatically create a GitHub issue, assign it to the right team, and post a Slack notification.

Features

  • Issues: Create, get, list, update, assign, lock issues
  • Comments: Add comments to issues
  • Pull Requests: Create, list, and review pull requests
  • Releases: Create, get, list, update, and delete releases
  • Files: Read file contents or list directory contents
  • Repositories: Get repository info or list your repositories
  • Variable Support: Use {{variables}} from previous workflow steps in any field

Getting Your GitHub Credentials

GitHub uses Personal Access Tokens (PAT) for authentication.

Step 1 — Create a Personal Access Token

  1. Log in to GitHub and go to Settings (click your profile photo → Settings)
  2. In the left sidebar, click Developer settingsPersonal access tokensTokens (classic)
  3. Click Generate new tokenGenerate new token (classic)
  4. Give it a name (e.g., InditeAI Workflow)
  5. Set an expiration date (recommended: 90 days or 1 year)
  6. Select the required scopes:
    • repo — Full control of private repositories (includes all repo sub-scopes)
    • If you only need public repos: public_repo
  7. Click Generate token
  8. Copy the token immediately — you cannot see it again after leaving the page
⚠️

Keep your Personal Access Token secure. It grants access to all repositories your GitHub account can reach. Consider creating a dedicated GitHub account or using a GitHub App for production automations.

Step 2 — Connect in InditeAI

  1. Add the GitHub action block to your workflow
  2. Click Select CredentialsCreate New
  3. Paste your Personal Access Token
  4. Click Save Credentials

Setup in InditeAI

1. Connect Your Account

Follow the credential steps above. Once saved, select your credentials from the dropdown.

2. Select an Action

CategoryActions
RepositoriesGet Repository, List My Repositories
IssuesCreate Issue, Get Issue, List Issues, Update Issue, Lock Issue
CommentsAdd Comment
Pull RequestsCreate Pull Request, List Pull Requests, Create Review
ReleasesCreate Release, Get Release, List Releases, Update Release, Delete Release
FilesGet File, List Files

3. Set Repository Owner and Name

Most actions require two fields:

Repository Owner: The GitHub username or organization name

octocat
my-org
{{trigger.repoOwner}}

Repository Name: The repository name (without the owner prefix)

my-repo
backend-api
{{trigger.repoName}}
⚠️

Both Owner and Name are required for all repository-scoped actions. Leaving either blank will return a "Repository owner and name are required" error.

Working with Issues

Create Issue

Creates a new issue in the specified repository.

Repository Owner (required): octocat

Repository Name (required): my-repo

Title (required): Issue title

Bug: Login page fails on mobile Safari
{{trigger.subject}}

Body (optional): Issue description — supports {{variables}}

## Steps to Reproduce
1. {{trigger.steps}}

## Expected Behavior
{{trigger.expected}}

## Actual Behavior  
{{trigger.actual}}

Labels (optional): Comma-separated label names

bug,needs-triage
{{trigger.labels}}

Assignees (optional): Comma-separated GitHub usernames

octocat,hubot
{{lookup.assignee}}

Get Issue

Retrieves full details for a specific issue.

Issue Number (required):

42
{{trigger.issueNumber}}

Returns: Title, body, status, assignees, labels, milestone, created/updated timestamps.

List Issues

Returns all open issues in a repository.

Returns: Array of issue objects with number, title, state, labels, assignee.

Update Issue

Updates an existing issue's title, body, state, or labels.

Issue Number (required): 42

State (optional): open or closed

Title / Body / Labels: Any combination of these fields to update.

Lock Issue

Locks an issue to prevent further comments.

Issue Number (required): 42

Lock Reason (optional): off-topic, too heated, resolved, spam

Working with Comments

Add Comment

Posts a comment on an existing issue or pull request.

Repository Owner (required): octocat

Repository Name (required): my-repo

Issue Number (required): 42

Comment Body (required): Comment text — supports {{variables}}

Auto-generated from support ticket #{{ticket.id}}:

{{ticket.description}}

Priority: {{ticket.priority}}
Customer: {{ticket.customerEmail}}

Working with Pull Requests

Create Pull Request

Opens a new pull request.

Title (required): PR title

feat: add user authentication
{{branch.name}} — auto PR

Head Branch (required): The branch with your changes

feature/user-auth
{{trigger.branchName}}

Base Branch (optional): The branch to merge into (default: main)

main
develop

Body (optional): PR description — supports {{variables}}

List Pull Requests

Returns all open pull requests in the repository.

Returns: Array of PR objects with number, title, head, base, state, user.

Create Review

Submits a review on an open pull request.

Pull Request Number (required):

{{trigger.pullNumber}}

Review Event (required): APPROVE, REQUEST_CHANGES, or COMMENT

Review Body (optional): Review comment text

Looks good to me! Merged after CI passes.
Please fix the failing tests before merging.

Working with Releases

Create Release

Creates a new GitHub release (and optional tag).

Tag Name (required): Git tag for this release

v1.2.0
{{version.tag}}

Release Name (optional): Display name for the release

Version 1.2.0 — Dark Mode

Body (optional): Release notes — supports {{variables}}

## What's New
- {{changelog.features}}

## Bug Fixes
- {{changelog.fixes}}

Draft: Check to save as a draft instead of publishing

Pre-release: Check to mark as a pre-release

Get Release

Release ID (required): Numeric release ID from a previous step

{{createRelease.id}}
{{trigger.releaseId}}

List Releases

Returns all releases for the repository, sorted by creation date.

Update Release

Updates an existing release's name, body, or tag.

Release ID (required): Numeric release ID

Fields to update: Release Name, Body, Tag Name — any combination.

Delete Release

Permanently deletes a release. The tag is not deleted.

Release ID (required): Numeric release ID

⚠️

Deleting a release is permanent. The associated git tag remains but the release page is removed from GitHub.

Working with Files

Get File

Retrieves the contents of a file in the repository.

File Path (required): Path to the file from the repo root

README.md
src/config/settings.json
{{trigger.filePath}}

Branch (optional): Branch to read from (default: repo's default branch)

main
feature/config-update

Returns: content (base64-encoded), name, path, sha, size, download_url

💡

The file content is returned base64-encoded. Use a Script block to decode it: Buffer.from(content, 'base64').toString('utf8')

List Files

Lists files and folders in a directory of the repository.

File Path (required): Directory path (use empty string or / for root)

src/components
docs/
{{trigger.directory}}

Branch (optional): Branch to read from.

Returns: Array of items with name, path, type (file or dir), sha, size.

Working with Repositories

Get Repository

Retrieves metadata and statistics for a repository.

Repository Owner (required): octocat

Repository Name (required): my-repo

Returns: name, full_name, description, language, stargazers_count, forks_count, open_issues_count, default_branch, visibility, created_at, updated_at.

List My Repositories

Returns up to 30 of your most recently updated repositories. No owner/repo fields needed.

Response Mapping

Map GitHub response data to workflow variables:

Issues:

  • number — Issue number
  • title — Issue title
  • stateopen or closed
  • html_url — Direct link to the issue
  • id — Internal GitHub issue ID

Pull Requests:

  • number — PR number
  • title, state, html_url
  • head.ref — Source branch name
  • base.ref — Target branch name

Releases:

  • id — Release ID (use for Get/Update/Delete Release)
  • tag_name, name, html_url
  • published_at — Publication timestamp

Files:

  • content — Base64-encoded file content
  • sha — File content hash
  • download_url — Direct download URL

Common Use Cases

1. Auto-Create Bug Reports from Support Tickets

Trigger: Zendesk / Freshdesk / Email trigger

Workflow:

  1. GitHub: Create Issue
    Owner: my-org
    Repo: backend-api
    Title: [Support] {{ticket.subject}}
    Body: Customer: {{ticket.email}}\n\n{{ticket.description}}
    Labels: bug,customer-reported
    Assignees: {{oncall.github_username}}
  2. Slack: Notify engineering channel
  3. Zendesk: Add internal note with GitHub issue URL

2. Automated Release Notes

Trigger: Schedule Trigger or Webhook

Workflow:

  1. GitHub: List Issues (recently closed)
  2. AI Block: Summarize closed issues into release notes
  3. GitHub: Create Release
    Tag: {{version.tag}}
    Body: {{ai.releaseNotes}}
  4. Slack: Announce release

3. PR Auto-Review for Bots

Trigger: Webhook Trigger (GitHub PR opened webhook)

Workflow:

  1. GitHub: Get File (read changed file)
  2. AI Block: Review code for obvious issues
  3. GitHub: Create Review
    Pull Number: {{trigger.pullNumber}}
    Event: COMMENT
    Body: {{ai.reviewFeedback}}

4. Issue to Project Sync

Trigger: GitHub webhook / Jira Trigger

Workflow:

  1. GitHub: Create Issue
  2. Jira: Create Issue (with GitHub issue URL in description)
  3. Airtable: Log cross-reference

5. Repository Health Dashboard

Trigger: Schedule Trigger (every Monday)

Workflow:

  1. GitHub: Get Repository (get open issue count)
  2. GitHub: List Pull Requests (count open PRs)
  3. Google Sheets: Update dashboard row
    Open Issues: {{repo.open_issues_count}}
    Open PRs: {{pullRequests.length}}
    Stars: {{repo.stargazers_count}}

Best Practices

Security

  • ✅ Use a fine-grained Personal Access Token scoped to only the repositories you need
  • ✅ Create a dedicated service account or GitHub App for production automations
  • ✅ Set an expiration date on all tokens and rotate them regularly
  • ✅ Never store tokens in workflow fields — always use Credentials

Data Quality

  • ✅ Always fill in both Owner and Name fields — leaving either blank causes a 404 error
  • ✅ Use {{variables}} from previous steps to populate owner/repo dynamically
  • ✅ Validate issue numbers before using Get/Update actions — deleted issues return 404
  • ✅ Keep issue titles concise; use the body for details

Automation

  • ✅ Use Condition blocks before Create Issue to avoid duplicate issues
  • ✅ Store the created issue number in a variable for follow-up actions (comments, updates)
  • ✅ For PR reviews: only approve if AI confidence is high; otherwise use COMMENT event
  • ✅ Use Labels consistently — they make filtering and searching much easier

Troubleshooting

"Repository owner and name are required"

Cause: Owner or Repo field was left empty.

Fix: Enter both the Repository Owner (GitHub username or org name) and Repository Name (just the repo name, not owner/repo format) in the block settings.

"Not Found" (404)

Cause: The owner, repo name, or issue/release number does not exist, or your token does not have access.

Fix:

  • Double-check the owner and repo name spelling (case-sensitive)
  • Verify your token has the repo scope (or public_repo for public repos)
  • Check that the issue/release number exists and was not deleted

"Requires authentication" (401)

Fix:

  • Verify your Personal Access Token is still valid (not expired)
  • Reconnect your credentials with a fresh token

"Resource not accessible by integration" (403)

Fix:

  • Your token is missing the required scope — regenerate with repo scope
  • For organization repositories: ensure your token has SSO authorization for the org if SSO is enabled

Issue or PR Not Created

Check:

  • Repository Owner and Name are correct
  • Your account has write access to the repository
  • Labels and Assignees exist in the repository (invalid labels are silently ignored on some GitHub plans)

Limitations

  • API Rate Limits: GitHub allows 5,000 requests per hour for authenticated users
  • File content: Returned as base64-encoded — requires decoding before use
  • Webhooks: For real-time GitHub events (PR opened, issue created), use a Webhook Trigger block pointed at a GitHub webhook
  • Large files: Files over 1 MB cannot be retrieved via the Contents API — use the raw URL or Git Data API
💡

Tip: For production automations, consider creating a dedicated GitHub bot account with access only to the repositories it needs. This makes it easy to audit automated actions (they all show up under the bot account) and prevents disruption when team members leave.

Example Workflow

Flow:

  1. Support email triggers the workflow
  2. A GitHub issue is created with the email subject and body
  3. Priority is evaluated with a Condition block
  4. High priority: assigned to on-call engineer + Slack alert + escalation comment
  5. Normal priority: labeled for triage and assigned to the backlog

Related Blocks

  • Webhook Trigger: Receive real-time events from GitHub (issue created, PR opened, push, etc.)
  • Condition: Route logic based on repository, labels, or issue state
  • Jira: Sync GitHub issues with Jira tickets bidirectionally
  • Slack / Discord: Notify engineering teams about issue/PR activity
  • Send Email: Send notifications outside Slack
  • AI Block: Generate release notes, review code, or triage issues automatically

Need Help?

Pro Tip: Use "List My Repositories" action first to discover available repository names, then pipe the result into subsequent actions using {{variables}}. This makes workflows portable across different repositories without hardcoding owner/repo names.

Indite Documentation v1.6.0
PrivacyTermsSupport