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
- Log in to GitHub and go to Settings (click your profile photo → Settings)
- In the left sidebar, click Developer settings → Personal access tokens → Tokens (classic)
- Click Generate new token → Generate new token (classic)
- Give it a name (e.g.,
InditeAI Workflow) - Set an expiration date (recommended: 90 days or 1 year)
- Select the required scopes:
repo— Full control of private repositories (includes all repo sub-scopes)- If you only need public repos:
public_repo
- Click Generate token
- 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
- Add the GitHub action block to your workflow
- Click Select Credentials → Create New
- Paste your Personal Access Token
- 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
| Category | Actions |
|---|---|
| Repositories | Get Repository, List My Repositories |
| Issues | Create Issue, Get Issue, List Issues, Update Issue, Lock Issue |
| Comments | Add Comment |
| Pull Requests | Create Pull Request, List Pull Requests, Create Review |
| Releases | Create Release, Get Release, List Releases, Update Release, Delete Release |
| Files | Get 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 PRHead Branch (required): The branch with your changes
feature/user-auth
{{trigger.branchName}}Base Branch (optional): The branch to merge into (default: main)
main
developBody (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 ModeBody (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-updateReturns: 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 numbertitle— Issue titlestate—openorclosedhtml_url— Direct link to the issueid— Internal GitHub issue ID
Pull Requests:
number— PR numbertitle,state,html_urlhead.ref— Source branch namebase.ref— Target branch name
Releases:
id— Release ID (use for Get/Update/Delete Release)tag_name,name,html_urlpublished_at— Publication timestamp
Files:
content— Base64-encoded file contentsha— File content hashdownload_url— Direct download URL
Common Use Cases
1. Auto-Create Bug Reports from Support Tickets
Trigger: Zendesk / Freshdesk / Email trigger
Workflow:
- 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}} - Slack: Notify engineering channel
- Zendesk: Add internal note with GitHub issue URL
2. Automated Release Notes
Trigger: Schedule Trigger or Webhook
Workflow:
- GitHub: List Issues (recently closed)
- AI Block: Summarize closed issues into release notes
- GitHub: Create Release
Tag: {{version.tag}} Body: {{ai.releaseNotes}} - Slack: Announce release
3. PR Auto-Review for Bots
Trigger: Webhook Trigger (GitHub PR opened webhook)
Workflow:
- GitHub: Get File (read changed file)
- AI Block: Review code for obvious issues
- GitHub: Create Review
Pull Number: {{trigger.pullNumber}} Event: COMMENT Body: {{ai.reviewFeedback}}
4. Issue to Project Sync
Trigger: GitHub webhook / Jira Trigger
Workflow:
- GitHub: Create Issue
- Jira: Create Issue (with GitHub issue URL in description)
- Airtable: Log cross-reference
5. Repository Health Dashboard
Trigger: Schedule Trigger (every Monday)
Workflow:
- GitHub: Get Repository (get open issue count)
- GitHub: List Pull Requests (count open PRs)
- 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
numberin a variable for follow-up actions (comments, updates) - ✅ For PR reviews: only approve if AI confidence is high; otherwise use
COMMENTevent - ✅ 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
reposcope (orpublic_repofor 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
reposcope - 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:
- Support email triggers the workflow
- A GitHub issue is created with the email subject and body
- Priority is evaluated with a Condition block
- High priority: assigned to on-call engineer + Slack alert + escalation comment
- 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?
- Review GitHub REST API documentation (opens in a new tab)
- Check your Personal Access Tokens (opens in a new tab)
- Verify repository permissions in GitHub → Settings → Collaborators and teams
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.